Závislosti
Skenování SCA
Sken SCA zjistí, které komponenty open source projekt používá, a každou z nich porovná s daty o zranitelnostech a licencích. Patří k nejlevnějším bezpečnostním kontrolám, které můžete do pipeline přidat, pokud víte, co sken vidí a kde potřebuje pomoc.
Aktualizováno
Co se děje při skenu SCA
-
Načtení cíle. Skener přečte manifesty a lockfily, například
package-lock.json,poetry.lockneboCargo.lock, případně rozbalí image kontejneru. - Sestavení seznamu komponent. Nalezené údaje převede na názvy a verze, obvykle včetně tranzitivních závislostí.
- Porovnání s daty. Každá komponenta se vyhledá ve zdrojích, jako jsou GitHub Advisory Database, OSV a NVD, a její licence se porovná s vašimi pravidly.
- Report. Nálezy jsou seřazené podle závažnosti, obvykle s opravenou verzí. V CI může pravidlo job nechat selhat.
Širší praxi, do které skenování patří, popisuje článek co je analýza softwarového složení.
Kde skeny SCA spouštět
Jeden sken na jednom místě nechává mezery. Každá fáze odpovídá na jinou otázku, proto většina týmů spouští skenů více.
| Kde | Na co odpovídá | Co mu uniká |
|---|---|---|
| Počítač vývojáře nebo IDE | Je bezpečné tento balíček přidat? | Vše, na čem ho vývojář nespustí |
| Pull request | Přináší tato změna známé riziko? | Nová bezpečnostní upozornění ke kódu, který se nezměnil |
| Build v CI | Co obsahuje vydání? | Vše, co skener v buildu nevidí |
| Registr kontejnerů | Co je v tomto image? | Kompilovaný kód a nástroje buildu, které nezanechají stopu |
| Po vydání | Týká se toho, co jsme dodali, něco nového? | Nic, pokud je záznam o tom, co bylo dodáno, úplný |
Poslední řádek většina programů vynechává. Nové bezpečnostní upozornění se týká verze, kterou jste vydali před měsíci, a žádný pull request kvůli němu sken nespustí.
Jak číst výsledky skenu SCA
První sken skutečného projektu často vrátí stovky nálezů. Procházejte je v tomto pořadí:
- Začněte tím, co se aktivně zneužívá. Nález v katalogu KEV od CISA má přednost před vyšším skóre CVSS bez známého zneužití. Viz jak prioritizovat zranitelnosti.
- Ověřte, že se vás týká. Závislosti jen pro vývoj se nedodávají. Některé nástroje přidávají analýzu dosažitelnosti, která ověří, zda lze zranitelný kód vůbec zavolat.
- Opravujte na správné úrovni. U tranzitivního nálezu bývá oprava obvykle v balíčku, který ho přináší, a to ukáže graf závislostí.
- Zaznamenejte, co opravovat nebudete. U nálezu, který jste se rozhodli akceptovat, má být uvedeno proč, jinak další člověk udělá stejnou práci znovu. Standardním způsobem záznamu je VEX.
Proč čistý sken neznamená čistý software
- Vidí to, co je deklarované. Skener čte soubory, které má před sebou, takže repozitář bez commitnutého lockfilu mu dává málo podkladů a kód stažený instalačním hookem se v něm nikdy neobjeví.
- Vidí to, na co jste ho namířili. Základní image, nástroje buildu a GitHub Actions ve vaší pipeline jsou oddělené od manifestu vaší aplikace.
- Zná jen to, co bylo zveřejněno. Nový škodlivý balíček zatím nemá žádné bezpečnostní upozornění.
- Seznam není build. Buildy určují verze až při spuštění, takže to, co sken přečetl, a to, co vydání obsahuje, se může lišit.
To jsou limity samotného skenování, komerčního i open source. CRACI našlo zranitelné balíčky, které Snyk ani Aikido nenahlásily, protože tyto komponenty nikdy nebyly v tom, co skenovaly.
Bezplatné a komerční skenery
Bezplatné možnosti pokrývají základy dobře. Upozornění Dependabot jsou součástí GitHubu, OWASP Dependency-Check a Trivy jsou open source a Grype se kombinuje s generátorem SBOM Syft. Komerční nástroje přidávají pravidla, prioritizaci, analýzu dosažitelnosti a workflow napříč mnoha týmy. Srovnání nejlepších nástrojů SCA pokrývá 13 z nich a tento průvodce ukazuje, proč se bezplatné generátory navzájem neshodují.
Skenování SCA a záznam během buildu
CRACI není skener a ten svůj se vzdávat nemusíte. Je to runner pro GitHub Actions, který zaznamenává každý balíček, který každý job stáhne, v každé úrovni stromu a včetně balíčků obnovených z cache CI, a pak průběžně znovu vyhodnocuje SBOM toho, co bylo dodáno, jakmile jsou zveřejněny nové zranitelnosti. Váš skener pokrývá pull requesty a počítače vývojářů. CRACI pokrývá build a vše, co následuje po něm. Viz kde má CRACI místo vedle vašich nástrojů SCA.
Skenování SCA: časté dotazy
Co je sken SCA?
Sken SCA přečte manifesty, lockfily nebo image kontejneru projektu, zjistí, které komponenty open source používá, a porovná je s daty o zranitelnostech a licencích.
Je SCA totéž co skenování závislostí?
Téměř. Skenováním závislostí se obvykle myslí kontrola známých zranitelností v závislostech. SCA je širší pojem a zahrnuje i licence, zastaralé balíčky a vytváření inventáře, například SBOM.
Kdy by se měly skeny SCA spouštět?
U pull requestů, aby se zastavila nová rizika; v buildu v CI, aby popsaly vydání; a průběžně po vydání, protože nová bezpečnostní upozornění se týkají i softwaru, který jste už dodali.
Jak dlouho sken SCA trvá?
Obvykle sekundy až několik minut, protože čte metadata, místo aby analyzoval celý váš kód. Díky tomu ho lze prakticky spouštět u každého pull requestu.
Proč skenery SCA hlásí různé výsledky?
Každý má vlastní pravidla pro to, co číst, jak pojmenovávat komponenty a jaká data o zranitelnostech použít. Stejný commit tak může vést k různým seznamům komponent a různým nálezům.
Najde skenování SCA malware?
Porovnání s bezpečnostními upozorněními najde škodlivá vydání až tehdy, když upozornění existuje. Nástroje, které analyzují chování balíčků, mohou některá zachytit dříve. Nový škodlivý balíček nemá v den svého vzniku žádné upozornění.
Zjistěte, co váš sken SCA neviděl
Spusťte jeden workflow GitHub Actions na CRACI a porovnejte jeho zaznamenanou SBOM s komponentami, které nahlásil váš skener.
Rezervujte si demo