Jak začít se statickým testováním bezpečnosti u infrastruktury jako kódu
Přemýšlíte, jak začít se statickým testováním bezpečnosti aplikací (SAST)? Třeba vám pomůže tento článek představující vybrané nástroje a příklady jejich začlenění do CI/CD pipeline v IaC (Infrastructure as Code).

Infrastructure as Code (IaC) je postup softwarového inženýrství, který umožňuje spravovat a zajišťovat infrastrukturu pomocí kódu. SAST (Static Application Security Testing) hraje klíčovou roli při zajišťování bezpečnosti artefaktů IaC. V tomto textu představíme užitečné nástroje pro skenování artefaktů IaC a na příkladech ukážeme, jak SAST začlenit do CI/CD pipeliny.
Obecně
Doporučujeme používat vestavěné šablony pro SAST IaC z Gitlabu, je to nejlepší způsob, jak začít, a ideální základ, pro pokročilejší použití postupujte dle pokynů níže. Příklad pipeline se SAST IaC je níže:
--- include: - template: Security/SAST.gitlab-ci.yml - template: Security/Dependency-Scanning.gitlab-ci.yml - template: Security/Secret-Detection.gitlab-ci.yml - template: Security/SAST-IaC.gitlab-ci.yml stages: - test
Všechny jazyky zmiňované v tomto cheetsheetu jsou podporovány SAST IaC šablonami v GitLabu.
Pipeline používá nástroj kick. Jde o uverzální SAST nástroj podporující řadu jazyků, částečně na úkor přesnosti. Pro specifické jazyky je vhodnější použít specializované nástroje.
Poznámka: IaC skenování podporuje různé konfigurační soubory. Pokud jsou v projektu zjištěny jakékoli podporované konfigurační soubory, jsou skenovány pomocí KICS. Podporovány jsou projekty s kombinací konfiguračních souborů IaC.
Docker
Při analýze nástrojů jsme zjistili, že nástroje našly chyby, které navzdory označení kritické nebo vysoké neměly takový dopad, aby si toto hodnocení zasloužily. Doporučujeme tedy vybírat nástroj spíše podle typu projektu, na kterém pracujete.
Doporučené nástroje:
- Grype nabízí nejobsáhlejší a nejpodrobnější reporty, je však určen spíše pro skenování závislostí než zranitelností.
- Hadolint je linter pro Dockerfiles, který kontroluje osvědčené postupy a běžné chyby, užitečné i v CI/CI pipelinách.
- Clair je podobný grype. Zaměřuje se především na skenování zranitelností, nevýhodou může být složitější nastavení.
- Trivy patří mezi nástroje pro skenování závislostí. Na rozdíl od ostatních však jeho výstupy nejsou příliš rozsáhlé.
Naše doporučení: kombinace grype a hadolint. Tyto nástroje se vzájemně dobře doplňují.
Kubernetes
Kubernetes, též k8s, mohou mít různé formy konfigurací. Nejčastější jsou k8s manifesty nebo helmcharts.
Doporučené nástroje:
- Checkov lze aktuálně považovat za nejužitečnější.
- Trivy, jak bylo uvedeno výše, má problematické nastavení a potřebuje být připojen na běžící k8s klastr.
- Terrascan - je jednoduchý SAST nástroj vhodný pro začlenění do pipelines s krátkými reporty.
- KICS je zase možné využít ve předpřipravených GitLab šablonách.
Ansible
Několik nástrojů se zaměřuje speciálně i na Ansible. Je to proto, že Ansible se používá hlavně k nastavení a konfiguraci strojů, a nejde tak o významný zdroj zranitelností. Tyto nástroje se zpravidla zaměřují na kontrolu toho, co Ansible skript nasazuje, nebo zda ve skriptu náhodou nezůstaly nějaké secrets (hesla, tokeny, API klíče).
Tyto problémy řeší jiné nástroje, proto doporučujeme kombinovat nástroje podle toho, co potřebujete zkontrolovat. Pokud například potřebujete zkontrolovat citlivé informace, použijte GitLeaks nebo TruffleHog.
Doporučené nástroje:
- KICS je možné využít ve předpřipravených GitLab šablonách.
- Checkov má také podporu pro Ansible.
- Ansible-lint je linter vytvořený autory Ansible, který kontroluje skripty vůči doporučením a častým chybám.
CI/CD Pipeliny
Další příklady naleznete v našem cheatsheetu pro CI/CD pipeliny.