Prozkoumání analýzy složení softwaru

Dokončeno

Software Composition Analysis (SCA) je automatizovaný proces pro identifikaci opensourcových komponent a komponent třetích stran v aplikacích, analýzu ohrožení zabezpečení, dodržování licencí a kvality kódu. Vzhledem k tomu, že moderní aplikace stále více spoléhají na externí závislosti, stala se SCA zásadním předpokladem pro správu rizik spojených se softwarovými dodavatelskými řetězci.

Co je Analýza složení softwaru?

Analýza softwarového složení je postup automatického zjišťování, katalogizace a analýzy všech opensourcových komponent a komponent třetích stran používaných v aplikaci. Nástroje SCA prověřují manifesty balíčků, soubory zámků závislostí, zdrojový kód a kompilované binární soubory a vytvářejí komplexní softwarové vyúčtování materiálů (SBOM).

Základní možnosti SCA

Zjišťování závislostí:

  • Analýza manifestu: Nástroje SCA čtou soubory manifestu balíčku (package.json, requirements.txt, pom.xml, *.csproj) k identifikaci deklarovaných závislostí.
  • Analýza uzamčení souboru: Analyzovat soubory zámků (package-lock.json, Pipfile.lock, Gemfile.lock) zobrazující přesné nainstalované verze, včetně tranzitivních závislostí.
  • Binární skenování: Pokročilé nástroje kontrolují kompilované artefakty, image kontejnerů a nasazené aplikace za účelem zjišťování vložených závislostí, které nejsou deklarovány v manifestech.
  • Podpora více jazyků: Komplexní nástroje podporují desítky programovacích jazyků a ekosystémů balíčků (npm, PyPI, Maven, NuGet, RubyGems, Go moduly).

Analýza ohrožení zabezpečení:

  • CVE porovnání: Porovnejte zjištěné závislosti s databázemi Common Vulnerabilities and Exposures (CVE).
  • Vyhodnocování závažnosti: Výpočet běžných skóre bodovacího systému ohrožení zabezpečení (CVSS) označující závažnost ohrožení zabezpečení od 0 (žádné) do 10 (kritické).
  • Inteligence o zneužitích: Určete, které zranitelnosti mají známé zneužití aktivně využívané útočníky.
  • Doporučení k opravě: Navrhněte konkrétní upgrady verzí, které řeší chyby zabezpečení při zachování kompatibility.

Dodržování předpisů licencí:

  • Detekce licencí: Identifikujte licence pro všechny závislosti analýzou licenčních souborů, metadat balíčků a hlaviček zdrojového kódu.
  • Vynucování zásad: Automaticky označí závislosti, které porušují zásady licencí organizace.
  • Analýza kompatibility: Zjistí konfliktní licence, které se nedají v rámci stejné aplikace zkombinovat z právních předpisů.
  • Sledování povinností: Dokumentace licenčních požadavků, jako jsou oznámení o přisuzování, zpřístupnění zdrojového kódu nebo omezení odvozené práce.

Hodnocení kvality:

  • Stav údržby: Vyhodnoťte, jestli jsou závislosti aktivně udržovány nebo opuštěny.
  • Zdraví komunity: Posouzení aktivity přispěvatele, velikosti komunity a udržitelnosti projektů
  • Postupy zabezpečení: Ověřte, že projekty mají odpovědné procesy odhalování a bezpečnostní upozornění.
  • Doporučení k aktualizaci: Identifikujte zastaralé závislosti a navrhujte bezpečnější a aktuálnější alternativy.

Proč je SCA pro DevOps zásadní

Moderní postupy vývoje softwaru činí SCA nepostradatelným:

Explozi závislostí

Aplikace obsahují stovky závislostí:

  • Přímé závislosti: Typická aplikace přímo odkazuje na externí balíčky 20–50.
  • Přechodné závislosti: Každá přímá závislost přináší vlastní závislosti a vytváří stromy závislostí s celkovými balíčky 200–500.
  • Několik ekosystémů: Aplikace často kombinují závislosti z více jazykových ekosystémů (front-end JavaScript, back-end Pythonu, mikroslužby Java).
  • Závislosti kontejnerů: Kontejnerizované aplikace zahrnují závislosti základních imagí a závislosti aplikací.

Ruční sledování není možné:

  • Škála: Ruční sledování stovek závislostí napříč desítkami aplikací je nepraktické.
  • Rychlost: Nové zranitelnosti jsou odhalovány každý den, což způsobuje, že jakýkoli ruční inventář je okamžitě zastaralý.
  • Komplexnost: Pochopení tranzitivních řetězů závislostí a jejich interakcí vyžaduje automatizovanou analýzu.
  • Distribuované vlastnictví: Závislosti udržované tisíci nezávislých opensourcových projektů po celém světě.

Imperativní zabezpečení

Zranitelnosti v závislostech jsou aktivně zneužívány:

  • Porušení zabezpečení s vysokým profilem: Hlavní bezpečnostní incidenty pravidelně zahrnují zneužití známých ohrožení zabezpečení v oblíbených opensourcových balíčcích.
  • Útoky na dodavatelský řetězec: Útočníci narušují legitimní balíčky pro distribuci malwaru podřízeným příjemcům.
  • Nulové zranitelnosti: Dříve neznámé zranitelnosti v široce používaných balíčcích mohou mít vliv na tisíce organizací současně.
  • Naléhavost opravy: Kritická ohrožení zabezpečení vyžadují rychlou identifikaci a nápravu napříč všemi ovlivněnými aplikacemi.

Tradiční nástroje zabezpečení postrádají zranitelnosti v závislostech:

  • Statická analýza: Nástroje pro kontrolu zdrojového kódu analyzují kód, ale ne kód závislostí.
  • Dynamické testování: Testování průniku může vynechat chyby zabezpečení v závislostech, které se během testů neaktivují.
  • Ruční revize: Týmy zabezpečení nemůžou zkontrolovat zdrojový kód stovek balíčků třetích stran.
  • Specializovaná detekce: Vyžadují se nástroje SCA speciálně navržené k identifikaci ohrožení zabezpečení závislostí.

Požadavek na dodržování předpisů

Porušení licencí mají významná rizika:

  • Právní odpovědnost: Použití závislostí bez dodržování licenčních podmínek může vést k žalobám a škodám.
  • Vynucené otevření zdrojového kódu: Licence se silnou copyleft (GPL, AGPL) mohou vyžadovat, aby byly celé aplikace uvolněny jako open-source.
  • Omezení distribuce: Některé licence zakazují komerční distribuci nebo ukládají omezení využití.
  • Požadavky na audit: Regulační architektury stále častěji vyžadují, aby organizace udržovaly přesné softwarové faktury za materiály.

Složitost licence:

  • Stovky typů licencí: Opensourcový ekosystém zahrnuje stovky různých licencí s různými povinnostmi.
  • Problémy s kompatibilitou: Různé licence mají konfliktní podmínky, které zakazují jejich použití současně.
  • Tranzitivní licencování: Licenční povinnosti z tranzitivních závislostí musí být sledovány a splněny.
  • Změny licencí: Projekty někdy mění licence mezi verzemi, které vyžadují průběžné monitorování.

Jak fungují nástroje SCA

Nástroje SCA využívají více technik ke zjišťování a analýze závislostí:

Mechanismy zjišťování

Analýza souboru manifestu:

  • Formáty specifické pro jazyk: Nástroje rozumí formátům manifestu balíčků pro každý jazyk (package.json pro npm, requirements.txt pro Python, pom.xml pro Maven).
  • Řešení závislostí: Parsovat specifikace verze závislostí, včetně rozsahů, omezení a pravidel řešení
  • Kontrola pracovního prostoru: Rekurzivně prohledávat adresáře projektů a najít všechny soubory manifestu v monorepos a pracovních prostorech s více projekty.
  • Povědomí o konfiguraci: Zvažte závislosti specifické pro prostředí (vývoj, testování, produkční prostředí) samostatně.

Analýza zámkových souborů závislostí:

  • Přesné verze: Soubory uzamčení zaznamenávají přesné verze všech závislostí, včetně tranzitivních závislostí.
  • Stav instalace: Představuje skutečné nainstalované závislosti místo abstraktních požadavků.
  • Deterministické rozlišení: Zamčené soubory zajišťují konzistentní verze závislostí napříč prostředími.
  • Kompletní grafy závislostí: Zahrnutí úplného přechodného stromu závislostí s řešeními verzí

Skenování binárních souborů a skenování artefaktů:

  • Kompilované artefakty: Zkontrolujte soubory JAR, soubory wheel, knihovny DLL a spustitelné soubory a identifikujte vložené závislosti.
  • Vrstvy imagí kontejnerů: Analyzujte vrstvy imagí kontejneru a zjistěte základní součásti imagí a závislosti aplikací.
  • Kontrola systému souborů: Prozkoumejte nasazené systémy souborů aplikací a vyhledejte závislosti, které nejsou deklarované v manifestech.
  • Otisk prstu: Pomocí kryptografického hashování identifikujte konkrétní verze balíčků i bez metadat.

Integrace sestavení:

  • Pluginy nástroje pro sestavování: Integrace se systémy sestavování (Maven, Gradle, webpack, pip) za účelem zachycení informací o závislostech během procesu sestavování.
  • Háky pro řešení: Připojte se k procesům řešení závislostí za účelem zaznamenání nainstalovaných přesných verzí.
  • Generování artefaktů: Generovat artefakty seznamu softwarových komponent (SBOM) během buildu pro následné využití.
  • Integrace kanálu: Spuštěním automatizovaných kroků v kanálech CI/CD můžete analyzovat každé sestavení.

Možnosti analýzy

Párování zranitelností:

  • Dotazování databáze: Query National Vulnerability Database (NVD), GitHub Advisory Database a proprietární databáze ohrožení zabezpečení.
  • Porovnávání rozsahu verzí: Určete, jestli konkrétní verze balíčků spadají do ohrožených rozsahů verzí.
  • Ověření opravy: Ověřte, jestli použité opravy skutečně řeší nahlášené chyby zabezpečení.
  • Stanovení priorit: Seřadí ohrožení zabezpečení podle závažnosti, zneužití a obchodního dopadu.

Identifikace licence:

  • Více zdrojů: Extrahujte informace o licenci z metadat balíčku, licenčních souborů, zdrojových hlaviček a dokumentů readme.
  • Normalizace licencí: Mapuje různé názvy a identifikátory licencí (SPDX, OSI) na standardizované typy licencí.
  • Duální licencování: Zpracování balíčků vydaných v rámci více alternativních licencí
  • Vlastní licence: Identifikace nestandardních licencí vyžadujících právní kontrolu

Analýza dostupnosti:

  • Konstrukce grafu volání: Sestavení grafů volání, které ukazují, který kód závislostí je skutečně spouštěn vaší aplikací.
  • Detekce mrtvého kódu: Identifikujte závislosti, které jsou zahrnuté, ale nikdy nebyly použité.
  • Analýza cesty zneužití: Určete, jestli jsou ohrožené cesty kódu dostupné z vstupních bodů aplikace.
  • Upřesnění rizik: Snižte šum tím, že se zaměříte na zneužitelné chyby zabezpečení ve skutečně používaném kódu.

Průběžné monitorování:

  • Upozorňování v reálném čase: Při zveřejnění nových ohrožení zabezpečení ovlivňujících vaše závislosti můžete dostávat okamžitá oznámení.
  • Naplánovaná kontrola: Pravidelně prohledává aplikace a zjišťuje nově zjištěná ohrožení zabezpečení v nezměněných závislostech.
  • Porovnání výchozí úrovně: Sledujte změny v zranitelnosti a stavu dodržování předpisů v průběhu času.
  • Prevence regrese: Upozornění, když nové závislosti zavádějí ohrožení zabezpečení nebo porušení licencí

Vzory integrace SCA

Efektivní implementace SCA zahrnuje integraci v několika bodech životního cyklu vývoje:

Vývojářská pracovní stanice

Integrace integrovaného vývojového prostředí (IDE):

  • Zpětná vazba v reálném čase: Skenujte závislosti při jejich přidávání vývojáři do projektů.
  • Vložená upozornění: Zobrazení upozornění na ohrožení zabezpečení a licence přímo v integrovaném vývojovém prostředí (IDE).
  • Návrhy nápravy: Navrhněte alternativní verze balíčků nebo náhradní balíčky.
  • Vynucování zásad: Zabránit přidávání závislostí, které porušují zásady organizace.

Validace před potvrzením:

  • Háky Gitu: Před potvrzením spusťte kontroly SCA, abyste zabránili zavedení ohrožených závislostí.
  • Místní kontrola: Před nasdílením změn do vzdálených úložišť proveďte místní analýzu změn.
  • Rychlá zpětná vazba: Poskytněte vývojářům okamžitou zpětnou vazbu během aktivního vývoje.
  • Včasné zjišťování: Zachyťte problémy předtím, než se dostanou ke sdíleným větvím a kanálům CI/CD.

Správa zdrojového kódu

Ověření žádosti o přijetí změn:

  • Automatizované kontroly: Spusťte analýzu SCA na všech žádostech o přijetí změn a detekujte změny závislostí.
  • Zkontrolujte komentáře: Publikujte zjištění jako komentáře k pull requestům pro viditelnost revidujících.
  • Blokování sloučení: Zabrání sloučení pull requestů, které zavádějí kritické zranitelnosti nebo porušení licencí.
  • Sledování změn závislostí: Jasně zdokumentujte, jaké změny v závislostech představují jednotlivé pull requesty.

Integrace GitHub Dependabota:

  • Automatizované aktualizace: Automaticky vytvářet pull requesty, když jsou k dispozici aktualizace zabezpečení závislostí.
  • Výstrahy zabezpečení: Získejte výstrahy zabezpečení GitHubu pro zranitelné závislosti.
  • Graf závislostí: Vizualizujte vztahy závislostí v funkci grafu závislostí GitHubu.
  • Kontrola pracovních postupů: Využijte procesy kontroly a schvalování GitHubu pro aktualizace závislostí.

Kanály CI/CD

Skenování při sestavení:

  • Kroky potrubí: Přidejte kontrolu SCA jako automatizované kroky sestavení v CI/CD potrubích.
  • Brány kvality: Zamítnout sestavení, která nesplňují požadavky na zabezpečení a dodržování předpisů.
  • Generování SBOM: Vytvářejte softwarový seznam materiálů spolu s výstupy sestavení.
  • Záznamy auditu: Zaznamenává výsledky kontroly pro účely dodržování předpisů a forenzních účelů.

Brány nasazení:

  • Ověření před nasazením: Prohledejte artefakty před nasazením do produkčních prostředí.
  • Zásady specifické pro prostředí: Použijte přísnější zásady pro produkční nasazení než vývojová nasazení.
  • Spouštěče vrácení změn: Automaticky vrátí zpět nasazení, u nichž byly zjištěny kritické ohrožení zabezpečení.
  • Schválení nasazení: Vyžadovat ruční schválení pro nasazení se známými, ale přijatými riziky.

Monitorování modulu runtime

Produkční skenování:

  • Analýza nasazené aplikace: Skenování skutečně nasazených aplikací za účelem zjištění běhových závislostí
  • Kontrola registru kontejneru: Nepřetržitě prohledávat image kontejnerů uložené v registrech.
  • Analýza funkcí bez serveru: Prohledávat nasazené bezserverové funkce a jejich závislosti.
  • Detekce posunu: Identifikujte rozdíly mezi zamýšlenými a skutečnými nasazenými závislostmi.

Průběžné monitorování ohrožení zabezpečení:

  • Průběžný dohled: Monitorujte nasazené aplikace pro nově zveřejněné chyby zabezpečení, které mají vliv na aktuální závislosti.
  • Reakce na incidenty: Při zjištění kritických ohrožení zabezpečení v produkčním prostředí aktivují pracovní postupy reakce na incidenty.
  • Plánování oprav: Vygenerujte plány nasazení oprav pro řešení ohrožení zabezpečení v nasazených aplikacích.
  • Dodržování SLA: Sledujte časové rámce nápravy, abyste zajistili dodržování SLA zabezpečení.

Osvědčené postupy pracovního postupu SCA

Úspěšná implementace SCA se řídí osvědčenými pracovními postupy:

Stanovení základní linie

Počáteční inventář:

  • Komplexní zjišťování: Spuštěním nástrojů SCA pro všechny aplikace vytvořte kompletní inventář závislostí.
  • Hodnocení rizika: Porozumíte aktuálnímu ohrožením zabezpečení a problémům s dodržováním předpisů licencí.
  • Stanovení priorit: Určete, které aplikace a ohrožení zabezpečení vyžadují okamžitou pozornost.
  • Výchozí dokumentace: Zdokumentování aktuálního stavu jako základ pro měření zlepšení.

Definování zásad

Zásady zabezpečení:

  • Prahové hodnoty závažnosti zranitelností: Definujte, které úrovně závažnosti jsou přijatelné (např. žádné kritické, omezena na vysokou).
  • Časové rámce nápravy: Vytvořte smlouvy SLA pro opravy různých závažností ohrožení zabezpečení (kritické do 7 dnů, maximum do 30 dnů).
  • Procesy výjimek: Vytváření pracovních postupů pro přijetí rizika v případě, že okamžitá náprava není možná
  • Sledování výjimek: Udržujte záznam auditu o přijatých rizicích s obchodními odůvodněními.

Zásady dodržování předpisů:

  • Seznamy povolených licencí: Určete, které licence jsou vždy přijatelné (MIT, Apache 2.0, BSD).
  • Seznamy odepření licencí: Zakázat konkrétní licence nekompatibilní s obchodním modelem (GPL pro proprietární software).
  • Pracovní postupy schválení: Vyžadovat právní kontrolu závislostí s určitými licencemi (LGPL, MPL, vlastní licence).
  • Požadavky na přisuzování: Definujte, jak musí být přiřazeny licence v distribuovaném softwaru.

Automatizace vynucování

Integrace pipeline:

  • Automatizované skenování: Spustit kontroly SCA automaticky na každém buildu a pull requestu.
  • Brány kvality: Nakonfigurujte brány pipeline, které blokují sestavení nebo nasazení aplikace, která porušují zásady.
  • Automatizovaná náprava: Pomocí nástrojů, jako je GitHub Dependabot, můžete automaticky vytvářet pull requesty pro aktualizace zabezpečení.
  • Hlášení: Generujte zprávy o souladu pro přehled auditu a managementu.

Neustálé zlepšování

Sledování metrik:

  • Střední doba nápravy (MTTR): Změřte, jak rychle se po zjištění opravují ohrožení zabezpečení.
  • Snížení ohrožení zabezpečení: Sledování počtu ohrožení zabezpečení v průběhu času
  • Míra dodržování předpisů: Monitorujte procento závislostí splňujících licenční zásady.
  • Pokrytí: Ujistěte se, že nástroje SCA prohledávají všechny aplikace a závislosti.

Upřesnění procesů:

  • Správa falešně pozitivních výsledků: Vylaďte nástroje, abyste snížili falešně pozitivní výsledky pomocí konfigurace a výjimek.
  • Školení pro vývojáře: Informujte vývojáře o zabezpečeném výběru a správě závislostí.
  • Vývoj zásad: Aktualizujte zásady na základě vznikajících hrozeb a obchodních požadavků.
  • Vyhodnocení nástroje: Pravidelně vyhodnocujte nové nástroje a funkce SCA.

Analýza složení softwaru poskytuje automatizované funkce nezbytné pro správu rizik zabezpečení a dodržování předpisů v moderních aplikacích, které jsou silně závislé na opensourcových komponentách. V další lekci se dozvíte, jak implementovat GitHub Dependabot, konkrétní nástroj SCA integrovaný do GitHubu.