DevSecOps: principy fungování a srovnání SCA. První část

Význam analýzy softwarových komponent třetích stran (Software Composition Analysis - SCA) ve vývojovém procesu roste s vydáváním výročních zpráv o zranitelnostech open source knihoven, které publikují Synopsys, Sonatype, Snyk a White Source. . Podle zprávy Stav zranitelností zabezpečení open source 2020 počet identifikovaných open source zranitelností v roce 2019 vzrostl oproti předchozímu roku téměř 1.5krát, přičemž open source komponenty využívá 60 % až 80 % projektů. Na nezávislém základě jsou procesy SCA samostatnou praxí OWASP SAMM a BSIMM jako indikátoru vyspělosti a v první polovině roku 2020 vydal OWASP nový standard OWASP Software Component Verification Standard (SCVS), který poskytuje osvědčené postupy pro ověřování třetích komponenty strany v dodavatelském řetězci BY.

DevSecOps: principy fungování a srovnání SCA. První část

Jeden z nejnázornějších případů Stalo se společností Equifax v květnu 2017. Neznámí útočníci získali informace o 143 milionech Američanů, včetně celých jmen, adres, rodných čísel a řidičských průkazů. Ve 209 000 případech obsahovaly dokumenty také informace o bankovních kartách obětí. K tomuto úniku došlo v důsledku zneužití kritické chyby zabezpečení v Apache Struts 2 (CVE-2017-5638), zatímco oprava byla vydána již v březnu 2017. Na instalaci aktualizace měla společnost dva měsíce, ale nikdo si s tím hlavu nelámal.

Tento článek se bude zabývat problematikou výběru nástroje pro provádění SCA z pohledu kvality výsledků analýzy. Bude poskytnuto i funkční srovnání nástrojů. Proces integrace do CI/CD a integrační schopnosti budou ponechány na další publikace. Společnost OWASP představila širokou škálu nástrojů na vašem webu, ale v aktuální recenzi se dotkneme pouze nejpopulárnějšího open source nástroje Dependency Check, o něco méně známé open source platformy Dependency Track a Enterprise řešení Sonatype Nexus IQ. Také pochopíme, jak tato řešení fungují, a porovnáme získané výsledky pro falešně pozitivní výsledky.

DevSecOps: principy fungování a srovnání SCA. První část

Princip činnosti

Kontrola závislosti je nástroj (CLI, maven, modul jenkins, ant), který analyzuje soubory projektu, shromažďuje informace o závislostech (název balíčku, groupid, název specifikace, verze...), vytváří řádek CPE (Common Platform Enumeration). , Package URL ( PURL) a identifikuje zranitelnosti pro CPE/PURL z databází (NVD, Sonatype OSS Index, NPM Audit API...), načež sestaví jednorázový report ve formátu HTML, JSON, XML...

Podívejme se, jak CPE vypadá:

cpe:2.3:part:vendor:product:version:update:edition:language:sw_edition:target_sw:target_hw:other

  • Část: Označení, že komponenta souvisí s aplikací (a), operačním systémem (o), hardwarem (h) (povinné)
  • Prodávající: Název výrobce produktu (povinné)
  • Produkt: Název produktu (povinný)
  • Verze: Verze komponenty (zastaralá položka)
  • aktualizace: Aktualizace balíčku
  • Edice: Starší verze (zastaralá položka)
  • Jazyk: Jazyk definovaný v RFC-5646
  • Edice SW: Verze softwaru
  • Cílový SW: Softwarové prostředí, ve kterém produkt funguje
  • Cílový HW: Hardwarové prostředí, ve kterém produkt funguje
  • Ostatní: Informace o dodavateli nebo produktu

Příklad CPE vypadá takto:

cpe:2.3:a:pivotal_software:spring_framework:3.0.0:*:*:*:*:*:*:*

Řádek znamená, že CPE verze 2.3 popisuje aplikační komponent od výrobce pivotal_software se jménem spring_framework verze 3.0.0. Pokud otevřeme zranitelnost CVE-2014-0225 v NVD můžeme vidět zmínku o tomto CPE. První problém, kterému byste měli okamžitě věnovat pozornost, je to, že CVE v NVD podle CPE hlásí problém ve frameworku a ne v konkrétní komponentě. To znamená, že pokud jsou vývojáři pevně svázáni s frameworkem a zjištěná zranitelnost neovlivňuje moduly, které vývojáři používají, bezpečnostní specialista bude muset tak či onak toto CVE rozebrat a přemýšlet o aktualizaci.

Adresu URL používají také nástroje SCA. Formát adresy URL balíčku je následující:

scheme:type/namespace/name@version?qualifiers#subpath

  • Systém: Vždy tam bude 'pkg' označující, že se jedná o adresu URL balíčku (povinné)
  • Typ: „Typ“ balíčku nebo „protokol“ balíčku, jako je maven, npm, nuget, gem, pypi atd. (Požadované)
  • Namespace: Nějaká předpona názvu, jako je ID skupiny Maven, vlastník obrázku Docker, uživatel GitHubu nebo organizace. Volitelné a závisí na typu.
  • Jméno: Název balíčku (povinný)
  • Verze: Verze balíčku
  • Kvalifikace: Další kvalifikační údaje pro balíček, jako je OS, architektura, distribuce atd. Volitelné a specifické pro typ.
  • Podcesta: Další cesta v balíčku vzhledem ke kořenu balíčku

Například:

pkg:golang/google.golang.org/genproto#googleapis/api/annotations
pkg:maven/org.apache.commons/[email protected]
pkg:pypi/[email protected]

Závislost Track — On-premise webová platforma, která přijímá již vygenerovaný kusovník (Bill of Materials, BOM). CycloneDX и SPDX, tedy hotové specifikace o existujících závislostech. Jedná se o XML soubor popisující závislosti – název, hash, url balíčku, vydavatel, licence. Dále Dependency Track analyzuje kusovník, podívá se na CVE dostupné pro identifikované závislosti z databáze zranitelnosti (NVD, Sonatype OSS Index...), poté sestaví grafy, vypočítá metriky a pravidelně aktualizuje data o stavu zranitelnosti komponent. .

Příklad toho, jak může kusovník vypadat ve formátu XML:

<?xml version="1.0" encoding="UTF-8"?>
<bom xmlns="http://cyclonedx.org/schema/bom/1.2" serialNumber="urn:uuid:3e671687-395b-41f5-a30f-a58921a69b79" version="1">
  <components>
    <component type="library">
      <publisher>Apache</publisher>
      <group>org.apache.tomcat</group>
      <name>tomcat-catalina</name>
      <version>9.0.14</version>
      <hashes>
        <hash alg="MD5">3942447fac867ae5cdb3229b658f4d48</hash>
        <hash alg="SHA-1">e6b1000b94e835ffd37f4c6dcbdad43f4b48a02a</hash>
        <hash alg="SHA-256">f498a8ff2dd007e29c2074f5e4b01a9a01775c3ff3aeaf6906ea503bc5791b7b</hash>
        <hash alg="SHA-512">e8f33e424f3f4ed6db76a482fde1a5298970e442c531729119e37991884bdffab4f9426b7ee11fccd074eeda0634d71697d6f88a460dce0ac8d627a29f7d1282</hash>
      </hashes>
      <licenses>
        <license>
          <id>Apache-2.0</id>
        </license>
      </licenses>
      <purl>pkg:maven/org.apache.tomcat/[email protected]</purl>
    </component>
      <!-- More components here -->
  </components>
</bom>

Kusovník lze použít nejen jako vstupní parametry pro Dependency Track, ale také pro inventarizaci softwarových komponent v dodavatelském řetězci, například pro poskytování softwaru zákazníkovi. V roce 2014 byl ve Spojených státech dokonce navržen zákon „Zákon o řízení a transparentnosti kybernetického řetězce z roku 2014“, který uváděl, že při nákupu softwaru jakýkoli stát. Instituce si musí vyžádat kusovník, aby zabránila použití zranitelných součástí, ale zákon ještě nevstoupil v platnost.

Vrátíme-li se k SCA, Dependency Track má připravené integrace s platformami oznámení, jako je Slack, a systémy pro správu zranitelnosti, jako je Kenna Security. Za zmínku také stojí, že Dependency Track mimo jiné identifikuje zastaralé verze balíčků a poskytuje informace o licencích (kvůli podpoře SPDX).

Pokud se budeme bavit konkrétně o kvalitě SCA, tak je zde zásadní rozdíl.

Dependency Track nepřijímá jako vstup projekt, ale spíše kusovník. To znamená, že pokud chceme projekt otestovat, musíme nejprve vygenerovat bom.xml, například pomocí CycloneDX. Závislost Track je tedy přímo závislá na CycloneDX. Zároveň umožňuje přizpůsobení. Toto napsal tým OZON Modul CycloneDX pro sestavení souborů kusovníků pro projekty Golang pro další skenování prostřednictvím Dependency Track.

Nexus IQ je komerční řešení SCA od Sonatype, které je součástí ekosystému Sonatype, jehož součástí je také Nexus Repository Manager. Nexus IQ může přijímat jako vstup jak válečné archivy (pro java projekty) přes webové rozhraní nebo API, tak kusovník, pokud vaše organizace ještě nepřešla z CycloneDX na nové řešení. Na rozdíl od open source řešení IQ odkazuje nejen na CP/PURL na identifikovanou komponentu a odpovídající zranitelnost v databázi, ale zohledňuje i vlastní výzkum, například název zranitelné funkce nebo třídy. Mechanismy IQ budou diskutovány později v analýze výsledků.

Pojďme si shrnout některé funkční vlastnosti a také zvážit podporované jazyky pro analýzu:

jazyk
Nexus IQ
Kontrola závislosti
Závislost Track

Jáva
+
+
+

C / C ++
+
+
-

C#
+
+
-

. Čistá
+
+
+

Erlang
-
-
+

JavaScript (NodeJS)
+
+
+

PHP
+
+
+

PYTHON
+
+
+

Rubín
+
+
+

Perl
-
-
-

Scala
+
+
+

Cíl C
+
+
-

Rychlý
+
+
-

R
+
-
-

Go
+
+
+

Funkčnost

Funkčnost
Nexus IQ
Kontrola závislosti
Závislost Track

Schopnost zajistit, aby komponenty použité ve zdrojovém kódu byly zkontrolovány na licencovanou čistotu
+
-
+

Schopnost skenovat a analyzovat zranitelnosti a čistotu licencí pro obrázky Docker
+ Integrace s Clair
-
-

Možnost konfigurovat zásady zabezpečení pro použití knihoven s otevřeným zdrojovým kódem
+
-
-

Schopnost skenovat úložiště s otevřeným zdrojovým kódem na zranitelné komponenty
+ RubyGems, Maven, NPM, Nuget, Pypi, Conan, Bower, Conda, Go, p2, R, Yum, Helm, Docker, CocoaPods, Git LFS
-
+ Hex, RubyGems, Maven, NPM, Nuget, Pypi

Dostupnost specializované výzkumné skupiny
+
-
-

Provoz s uzavřenou smyčkou
+
+
+

Používání databází třetích stran
+ Uzavřená databáze Sonatype
+ Sonatype OSS, veřejní poradci NPM
+ Sonatype OSS, NPM Public Advisors, RetireJS, VulnDB, podpora vlastní databáze zranitelností

Schopnost filtrovat komponenty open source při pokusu o načtení do vývojové smyčky podle nakonfigurovaných zásad
+
-
-

Doporučení pro opravu zranitelností, dostupnost odkazů na opravy
+
+- (závisí na popisu ve veřejných databázích)
+- (závisí na popisu ve veřejných databázích)

Seřazení zjištěných zranitelností podle závažnosti
+
+
+

Model přístupu založený na rolích
+
-
+

podpora CLI
+
+
+- (pouze pro CycloneDX)

Vzorkování/třídění zranitelností podle definovaných kritérií
+
-
+

Dashboard podle stavu aplikace
+
-
+

Generování reportů ve formátu PDF
+
-
-

Generování reportů ve formátu JSONCSV
+
+
-

Podpora ruského jazyka
-
-
-

Integrační schopnosti

Integrace
Nexus IQ
Kontrola závislosti
Závislost Track

Integrace LDAP/Active Directory
+
-
+

Integrace s průběžným integračním systémem Bamboo
+
-
-

Integrace s průběžným integračním systémem TeamCity
+
-
-

Integrace s kontinuálním integračním systémem GitLab
+
+- (jako plugin pro GitLab)
+

Integrace s kontinuálním integračním systémem Jenkins
+
+
+

Dostupnost pluginů pro IDE
+ IntelliJ, Eclipse, Visual Studio
-
-

Podpora vlastní integrace prostřednictvím webových služeb (API) nástroje
+
-
+

Kontrola závislosti

První start

Spusťte kontrolu závislosti na záměrně zranitelné aplikaci DVJA.

K tomu použijeme Plugin Maven pro kontrolu závislostí:

mvn org.owasp:dependency-check-maven:check

V důsledku toho se v cílovém adresáři objeví dependency-check-report.html.

DevSecOps: principy fungování a srovnání SCA. První část

Otevřeme soubor. Po souhrnných informacích o celkovém počtu zranitelností můžeme vidět informace o zranitelnostech s vysokou úrovní závažnosti a spolehlivosti s uvedením balíčku, CPE a počtu CVE.

Dále následují podrobnější informace, zejména podklad, na základě kterého bylo rozhodnuto (důkazy), tedy určitý kusovník.

DevSecOps: principy fungování a srovnání SCA. První část

Dále následuje popis CPE, PURL a CVE. Mimochodem, doporučení pro opravu nejsou zahrnuta kvůli jejich absenci v databázi NVD.

DevSecOps: principy fungování a srovnání SCA. První část

Chcete-li systematicky zobrazovat výsledky skenování, můžete nakonfigurovat Nginx s minimálním nastavením nebo odeslat výsledné defekty do systému správy defektů, který podporuje konektory pro kontrolu závislostí. Například Defect Dojo.

Závislost Track

Instalace

Dependency Track je zase webová platforma se zobrazovanými grafy, takže naléhavý problém ukládání defektů v řešení třetích stran zde nevzniká.
Podporované skripty pro instalaci jsou: Docker, WAR, Executable WAR.

První start

Jdeme na URL běžící služby. Přihlásíme se přes admin/admin, změníme přihlašovací jméno a heslo a pak se dostaneme na Dashboard. Další věcí, kterou uděláme, je vytvoření projektu pro testovací aplikaci v Javě Domů/Projekty → Vytvořit projekt . Vezměme si DVJA jako příklad.

DevSecOps: principy fungování a srovnání SCA. První část

Vzhledem k tomu, že sledování závislostí může jako vstup přijmout pouze kusovník, musí být tento kusovník načten. Využijme toho CycloneDX Maven Plugin:

mvn org.cyclonedx:cyclonedx-maven-plugin:makeAggregateBom

Získáme bom.xml a načteme soubor ve vytvořeném projektu DVJA → Závislosti → Nahrát kusovník.

Pojďme do Administrace → Analyzátory. Chápeme, že máme povolený pouze Internal Analyzer, který zahrnuje NVD. Pojďme také připojit Sonatype OSS Index.

DevSecOps: principy fungování a srovnání SCA. První část

Dostáváme tedy následující obrázek pro náš projekt:

DevSecOps: principy fungování a srovnání SCA. První část

V seznamu také můžete najít jednu zranitelnost použitelnou pro Sonatype OSS:

DevSecOps: principy fungování a srovnání SCA. První část

Hlavním zklamáním bylo, že Dependency Track již nepřijímá sestavy XML pro kontrolu závislostí. Nejnovější podporované verze integrace Kontrola závislosti byly 1.0.0 - 4.0.2, zatímco jsem testoval 5.3.2.

zde je видео (a zde), když to ještě bylo možné.

Nexus IQ

První start

Instalace Nexus IQ pochází z archivů dokumentace, ale pro tyto účely jsme vytvořili image Docker.

Po přihlášení do konzole je potřeba vytvořit organizaci a aplikaci.

DevSecOps: principy fungování a srovnání SCA. První část

DevSecOps: principy fungování a srovnání SCA. První část

DevSecOps: principy fungování a srovnání SCA. První část

Jak vidíte, nastavení v případě IQ je poněkud složitější, protože také potřebujeme vytvořit zásady použitelné pro různé „fáze“ (dev, build, stage, release). To je nezbytné k zablokování zranitelných komponent, když se pohybují potrubím blíže k produkci, nebo k jejich zablokování, jakmile se dostanou do Nexus Repo při stahování vývojáři.

Abychom pocítili rozdíl mezi open source a enterprise, proveďte stejné skenování prostřednictvím Nexus IQ stejným způsobem prostřednictvím plugin Maven, který dříve vytvořil testovací aplikaci v rozhraní NexusIQ dvja-test-and-compare:

mvn com.sonatype.clm:clm-maven-plugin:evaluate -Dclm.applicationId=dvja-test-and-compare -Dclm.serverUrl=<NEXUSIQIP> -Dclm.username=<USERNAME> -Dclm.password=<PASSWORD>

Postupujte podle URL vygenerované zprávy ve webovém rozhraní IQ:

DevSecOps: principy fungování a srovnání SCA. První část

Zde můžete vidět všechna porušení zásad s různými úrovněmi významnosti (od informací po kritické zabezpečení). Písmeno D vedle komponenty znamená, že komponenta je přímá závislost, a písmeno T vedle komponenty znamená, že komponenta je tranzitivní závislost, to znamená, že je tranzitivní.

Mimochodem, zpráva Zpráva o stavu zabezpečení open source za rok 2020 od Snyk uvádí, že více než 70 % zranitelností open source objevených v Node.js, Javě a Ruby je v tranzitivních závislostech.

Pokud otevřeme jedno z porušení zásad Nexus IQ, můžeme vidět popis komponenty a také graf verzí, který ukazuje umístění aktuální verze v časovém grafu a také to, kdy zranitelnost přestane fungovat. být zranitelný. Výška svíček na grafu ukazuje oblíbenost používání této komponenty.

DevSecOps: principy fungování a srovnání SCA. První část

Pokud přejdete do sekce zranitelnosti a rozbalíte CVE, můžete si přečíst popis této zranitelnosti, doporučení pro odstranění a také důvod, proč byla tato komponenta narušena, tedy přítomnost třídy DiskFileitem.class.

DevSecOps: principy fungování a srovnání SCA. První část

DevSecOps: principy fungování a srovnání SCA. První část

Shrňme pouze ty, které se týkají komponent Java třetích stran, odebereme komponenty js. V závorkách uvádíme počet zranitelností, které byly nalezeny mimo NVD.

Celkové IQ zařízení Nexus:

  • Naskenované závislosti: 62
  • Zranitelné závislosti: 16
  • Nalezená zranitelnost: 42 (8 sonatype db)

Kontrola celkové závislosti:

  • Naskenované závislosti: 47
  • Zranitelné závislosti: 13
  • Nalezená zranitelnost: 91 (14 sonatype oss)

Sledování celkové závislosti:

  • Naskenované závislosti: 59
  • Zranitelné závislosti: 10
  • Nalezená zranitelnost: 51 (1 sonatype oss)

V dalších krocích analyzujeme získané výsledky a zjistíme, která z těchto zranitelností je skutečný defekt a která je falešně pozitivní.

Zřeknutí se odpovědnosti

Tato recenze není nespornou pravdou. Autor si nekladl za cíl vyzdvihnout samostatný nástroj na pozadí jiných. Účelem revize bylo ukázat mechanismy fungování nástrojů SCA a způsoby kontroly jejich výsledků.

Porovnání výsledků

Podmínky:

Falešně pozitivní zranitelnost komponent třetích stran je:

  • Neshoda CVE s identifikovanou komponentou
  • Pokud je například identifikována zranitelnost v rámci struts2 a nástroj ukazuje na součást rámce struts-tiles, na kterou se tato zranitelnost nevztahuje, jedná se o falešně pozitivní
  • Neshoda CVE s identifikovanou verzí komponenty
  • Například zranitelnost je vázána na verzi pythonu > 3.5 a nástroj označuje verzi 2.7 jako zranitelnou - to je falešně pozitivní, protože ve skutečnosti se zranitelnost vztahuje pouze na větev produktu 3.x
  • Duplicitní CVE
  • Pokud například SCA určí CVE, který umožňuje RCE, pak SCA určí CVE pro stejnou komponentu, která platí pro produkty Cisco ovlivněné tímto RCE. V tomto případě bude falešně pozitivní.
  • Například CVE bylo nalezeno v komponentě spring-web, načež SCA ukazuje na stejné CVE v jiných komponentách Spring Framework, zatímco CVE nemá nic společného s jinými komponentami. V tomto případě bude falešně pozitivní.

Předmětem studie byl Open Source projekt DVJA. Studie zahrnovala pouze java komponenty (bez js).

Souhrnné výsledky

Pojďme rovnou k výsledkům ruční kontroly zjištěných zranitelností. Úplnou zprávu pro každý CVE lze nalézt v příloze.

Souhrnné výsledky pro všechny chyby zabezpečení:

Parametr
Nexus IQ
Kontrola závislosti
Závislost Track

Celková zjištěná zranitelnost
42
91
51

Nesprávně identifikovaná zranitelnost (falešně pozitivní)
2 (4.76%)
62 (68,13%)
29 (56.86%)

Nebyly nalezeny žádné relevantní chyby zabezpečení (falešně negativní)
10
20
27

Souhrn výsledků podle komponent:

Parametr
Nexus IQ
Kontrola závislosti
Závislost Track

Celkový počet identifikovaných komponent
62
47
59

Celkem zranitelné komponenty
16
13
10

Nesprávně identifikované zranitelné komponenty (falešně pozitivní)
1
5
0

Nesprávně identifikované zranitelné komponenty (falešně pozitivní)
0
6
6

Pojďme sestavit vizuální grafy pro vyhodnocení poměru falešně pozitivních a falešně negativních k celkovému počtu zranitelností. Komponenty jsou označeny vodorovně a zranitelnosti v nich identifikované svisle.

DevSecOps: principy fungování a srovnání SCA. První část

DevSecOps: principy fungování a srovnání SCA. První část

DevSecOps: principy fungování a srovnání SCA. První část

Pro srovnání, podobnou studii provedl tým Sonatype testující projekt 1531 komponent pomocí OWASP Dependency Check. Jak vidíme, poměr šumu ke správným reakcím je srovnatelný s našimi výsledky.

DevSecOps: principy fungování a srovnání SCA. První část
Zdroj: www.sonatype.com/why-precision-matters-ebook

Podívejme se na některé CVE z našich výsledků skenování, abychom pochopili důvod těchto výsledků.

více

№ 1

Pojďme se nejprve podívat na některé zajímavé body o Sonatype Nexus IQ.

Nexus IQ upozorňuje na problém s deserializací se schopností provádět RCE v Spring Frameworku vícekrát. CVE-2016-1000027 ve verzi spring-web:3.0.5 poprvé a CVE-2011-2894 v jarním kontextu:3.0.5 a spring-core:3.0.5. Nejprve se zdá, že existuje duplicitní zranitelnost napříč více CVE. Protože když se podíváte na CVE-2016-1000027 a CVE-2011-2894 v databázi NVD, zdá se, že je vše zřejmé

Komponenta
Zranitelnost

spring-web:3.0.5
CVE-2016-1000027

jarní kontext:3.0.5
CVE-2011-2894

jádro pružiny: 3.0.5
CVE-2011-2894

popis CVE-2011-2894 od NVD:
DevSecOps: principy fungování a srovnání SCA. První část

popis CVE-2016-1000027 od NVD:
DevSecOps: principy fungování a srovnání SCA. První část

CVE-2011-2894 je sám o sobě docela slavný. Ve zprávě White Source 2011 tento CVE byl uznán jako jeden z nejběžnějších. Popisů pro CVE-2016-100027 je v NVD v zásadě málo a zdá se, že jsou použitelné pouze pro Spring Framework 4.1.4. Pojďme se na to podívat reference a zde je vše víceméně jasné. Z Udržitelné články Chápeme, že kromě zranitelnosti v RemoteInvocationSerializingExporter v CVE-2011-2894 je zranitelnost pozorována v HttpInvokerServiceExporter. Toto nám říká Nexus IQ:

DevSecOps: principy fungování a srovnání SCA. První část

V NVD však nic takového neexistuje, a proto jsou kontroly závislostí a sledování závislostí falešně negativní.

Také z popisu CVE-2011-2894 lze pochopit, že zranitelnost je skutečně přítomna jak v spring-context:3.0.5, tak v spring-core:3.0.5. Potvrzení o tom lze nalézt v článku od osoby, která tuto chybu zabezpečení našla.

№ 2

Komponenta
Zranitelnost
Výsledek

vzpěry 2jádrové:2.3.30
CVE-2016-4003
NEPRAVDIVÉ

Pokud si prostudujeme zranitelnost CVE-2016-4003, pochopíme, že byla opravena ve verzi 2.3.28, nicméně Nexus IQ nám ji hlásí. V popisu chyby zabezpečení je poznámka:

DevSecOps: principy fungování a srovnání SCA. První část

To znamená, že zranitelnost existuje pouze ve spojení se zastaralou verzí JRE, na kterou se nás rozhodli varovat. Přesto to považujeme za falešně pozitivní, i když ne za nejhorší.

№ 3

Komponenta
Zranitelnost
Výsledek

xwork-core: 2.3.30
CVE-2017-9804
TRUE

xwork-core: 2.3.30
CVE-2017-7672
NEPRAVDIVÉ

Pokud se podíváme na popisy CVE-2017-9804 a CVE-2017-7672, pochopíme, že problém je URLValidator class, s CVE-2017-9804 vycházející z CVE-2017-7672. Přítomnost druhé zranitelnosti nenese žádnou užitečnou zátěž kromě toho, že její závažnost vzrostla na High, takže ji můžeme považovat za zbytečný hluk.

Celkově nebyly pro Nexus IQ nalezeny žádné další falešně pozitivní výsledky.

№ 4

Existuje několik věcí, které odlišují IQ od jiných řešení.

Komponenta
Zranitelnost
Výsledek

spring-web:3.0.5
CVE-2020-5398
TRUE

CVE v NVD uvádí, že se vztahuje pouze na verze 5.2.x před 5.2.3, 5.1.x před 5.1.13 a verze 5.0.x před 5.0.16, pokud se však podíváme na popis CVE v Nexus IQ , pak uvidíme následující:
Upozornění na odchylku: Výzkumný tým zabezpečení Sonatype zjistil, že tato chyba zabezpečení byla zavedena ve verzi 3.0.2.RELEASE a nikoli ve verzi 5.0.x, jak je uvedeno v upozornění.

Poté následuje PoC pro tuto chybu zabezpečení, která uvádí, že je přítomna ve verzi 3.0.5.

Falešně negativní je odeslán do Dependency Check a Dependency Track.

№ 5

Podívejme se na falešně pozitivní pro kontrolu závislosti a sledování závislosti.

Dependency Check vyniká tím, že odráží ty CVE, které se vztahují na celý framework v NVD, na ty komponenty, na které se tyto CVE nevztahují. Týká se to CVE-2012-0394, CVE-2013-2115, CVE-2014-0114, CVE-2015-0899, CVE-2015-2992, CVE-2016-1181, CVE-2016-1182, která způsobila kontrolu závislosti ” na struts-taglib:1.3.8 a struts-tiles-1.3.8. Tyto komponenty nemají nic společného s tím, co je popsáno v CVE – zpracování požadavků, validace stránky a tak dále. To je způsobeno skutečností, že to, co mají tyto CVE a komponenty společné, je pouze framework, a proto to Dependency Check považoval za zranitelnost.

Stejná situace je s spring-tx:3.0.5 a podobná situace s struts-core:1.3.8. U struts-core nalezly Dependency Check a Dependency Track spoustu zranitelností, které jsou ve skutečnosti použitelné pro struts2-core, což je v podstatě samostatný rámec. V tomto případě Nexus IQ správně pochopil obrázek a ve vydaných CVE uváděl, že struts-core dosáhlo konce životnosti a je nutné přejít na struts2-core.

№ 6

V některých situacích je nespravedlivé interpretovat zjevnou chybu kontroly závislosti a sledování závislosti. Zejména CVE-2013-4152, CVE-2013-6429, CVE-2013-6430, CVE-2013-7315, CVE-2014-0054, CVE-2014-0225, CVE-2014-0225, které Dependency Check přiřazený spring-core:3.0.5 ve skutečnosti patří spring-web:3.0.5. Současně byly některé z těchto CVE nalezeny také Nexus IQ, IQ je však správně identifikovalo s jinou komponentou. Protože tyto zranitelnosti nebyly ve spring-core nalezeny, nelze tvrdit, že v frameworku v zásadě nejsou a open source nástroje na tyto zranitelnosti správně upozornily (jen jim trochu uniklo).

Závěry

Jak vidíme, stanovení spolehlivosti identifikovaných zranitelností ruční kontrolou nedává jednoznačné výsledky, a proto vznikají kontroverzní otázky. Výsledky jsou takové, že řešení Nexus IQ má nejnižší míru falešně pozitivních výsledků a nejvyšší přesnost.

Za prvé je to způsobeno skutečností, že tým Sonatype rozšířil popis každé zranitelnosti CVE z NVD ve svých databázích a uvedl zranitelnosti pro konkrétní verzi komponent až po třídu nebo funkci, provedl další výzkum (např. , kontrola zranitelností starších verzí softwaru).

Důležitý vliv na výsledky mají i ty zranitelnosti, které nebyly zahrnuty do NVD, ale přesto jsou přítomny v databázi Sonatype s označením SONATYPE. Podle zprávy Stav zranitelností zabezpečení open source 2020 45 % objevených zranitelností s otevřeným zdrojovým kódem není nahlášeno společnosti NVD. Podle databáze WhiteSource tam skončí zveřejněno pouze 29 % všech open source zranitelností hlášených mimo NVD, a proto je důležité hledat zranitelnosti i v jiných zdrojích.

Výsledkem je, že Dependency Check produkuje hodně šumu a chybí některé zranitelné komponenty. Dependency Track produkuje méně hluku a detekuje velké množství komponent, což ve webovém rozhraní vizuálně nebolí oči.

Praxe však ukazuje, že open source by se měl stát prvními kroky k vyspělým DevSecOps. První věc, na kterou byste měli myslet při integraci SCA do vývoje, jsou procesy, konkrétně přemýšlet společně s vedením a souvisejícími odděleními o tom, jak by měly vypadat ideální procesy ve vaší organizaci. Může se ukázat, že pro vaši organizaci nejprve Dependency Check nebo Dependency Track pokryje všechny obchodní potřeby a Enterprise řešení budou logickým pokračováním kvůli rostoucí složitosti vyvíjených aplikací.

Příloha A: Výsledky komponent
Legenda:

  • Vysoká – zranitelnosti na vysoké a kritické úrovni v komponentě
  • Střední — Zranitelnost součásti se střední úrovní kritickosti
  • PRAVDA — Skutečně pozitivní záležitost
  • FALSE — Falešně pozitivní problém

Komponenta
Nexus IQ
Kontrola závislosti
Závislost Track
Výsledek

dom4j: 1.6.1
Vysoký
Vysoký
Vysoký
TRUE

log4j-core: 2.3
Vysoký
Vysoký
Vysoký
TRUE

log4j: 1.2.14
Vysoký
Vysoký
-
TRUE

commons-collections:3.1
Vysoký
Vysoký
Vysoký
TRUE

Commons-fileupload:1.3.2
Vysoký
Vysoký
Vysoký
TRUE

commons-beanutils:1.7.0
Vysoký
Vysoký
Vysoký
TRUE

commons-kodek:1:10
Střední
-
-
TRUE

mysql-connector-java: 5.1.42
Vysoký
Vysoký
Vysoký
TRUE

pružina-výraz:3.0.5
Vysoký
součást nenalezena

TRUE

spring-web:3.0.5
Vysoký
součást nenalezena
Vysoký
TRUE

jarní kontext:3.0.5
Střední
součást nenalezena
-
TRUE

jádro pružiny: 3.0.5
Střední
Vysoký
Vysoký
TRUE

struts2-config-browser-plugin:2.3.30
Střední
-
-
TRUE

spring-tx: 3.0.5
-
Vysoký
-
NEPRAVDIVÉ

jádro vzpěry:1.3.8
Vysoký
Vysoký
Vysoký
TRUE

xwork-core: 2.3.30
Vysoký
-
-
TRUE

vzpěry 2 jádrové: 2.3.30
Vysoký
Vysoký
Vysoký
TRUE

vzpěry-taglib:1.3.8
-
Vysoký
-
NEPRAVDIVÉ

vzpěry-dlaždice-1.3.8
-
Vysoký
-
NEPRAVDIVÉ

Příloha B: Výsledky zranitelnosti
Legenda:

  • Vysoká – zranitelnosti na vysoké a kritické úrovni v komponentě
  • Střední — Zranitelnost součásti se střední úrovní kritickosti
  • PRAVDA — Skutečně pozitivní záležitost
  • FALSE — Falešně pozitivní problém

Komponenta
Nexus IQ
Kontrola závislosti
Závislost Track
Přísnost
Výsledek
Komentář

dom4j: 1.6.1
CVE-2018-1000632
CVE-2018-1000632
CVE-2018-1000632
Vysoký
TRUE

CVE-2020-10683
CVE-2020-10683
CVE-2020-10683
Vysoký
TRUE

log4j-core: 2.3
CVE-2017-5645
CVE-2017-5645
CVE-2017-5645
Vysoký
TRUE

CVE-2020-9488
CVE-2020-9488
CVE-2020-9488
Nízké
TRUE

log4j: 1.2.14
CVE-2019-17571
CVE-2019-17571
-
Vysoký
TRUE

-
CVE-2020-9488
-
Nízké
TRUE

SONATYPE-2010-0053
-
-
Vysoký
TRUE

commons-collections:3.1
-
CVE-2015-6420
CVE-2015-6420
Vysoký
NEPRAVDIVÉ
Duplikáty RCE(OSSINDEX)

-
CVE-2017-15708
CVE-2017-15708
Vysoký
NEPRAVDIVÉ
Duplikáty RCE(OSSINDEX)

SONATYPE-2015-0002
RCE (OSSINDEX)
RCE(OSSINDEX)
Vysoký
TRUE

Commons-fileupload:1.3.2
CVE-2016-1000031
CVE-2016-1000031
CVE-2016-1000031
Vysoký
TRUE

SONATYPE-2014-0173
-
-
Střední
TRUE

commons-beanutils:1.7.0
CVE-2014-0114
CVE-2014-0114
CVE-2014-0114
Vysoký
TRUE

-
CVE-2019-10086
CVE-2019-10086
Vysoký
NEPRAVDIVÉ
Tato chyba zabezpečení se týká pouze verzí 1.9.2+

commons-kodek:1:10
SONATYPE-2012-0050
-
-
Střední
TRUE

mysql-connector-java: 5.1.42
CVE-2018-3258
CVE-2018-3258
CVE-2018-3258
Vysoký
TRUE

CVE-2019-2692
CVE-2019-2692
-
Střední
TRUE

-
CVE-2020-2875
-
Střední
NEPRAVDIVÉ
Stejná zranitelnost jako CVE-2019-2692, ale s poznámkou „útoky mohou významně ovlivnit další produkty“

-
CVE-2017-15945
-
Vysoký
NEPRAVDIVÉ
Není relevantní pro mysql-connector-java

-
CVE-2020-2933
-
Nízké
NEPRAVDIVÉ
Duplikát CVE-2020-2934

CVE-2020-2934
CVE-2020-2934
-
Střední
TRUE

pružina-výraz:3.0.5
CVE-2018-1270
součást nenalezena
-
Vysoký
TRUE

CVE-2018-1257
-
-
Střední
TRUE

spring-web:3.0.5
CVE-2016-1000027
součást nenalezena
-
Vysoký
TRUE

CVE-2014-0225
-
CVE-2014-0225
Vysoký
TRUE

CVE-2011-2730
-
-
Vysoký
TRUE

-
-
CVE-2013-4152
Střední
TRUE

CVE-2018-1272
-
-
Vysoký
TRUE

CVE-2020-5398
-
-
Vysoký
TRUE
Názorný příklad ve prospěch IQ: „Výzkumný tým zabezpečení Sonatype zjistil, že tato chyba zabezpečení byla zavedena ve verzi 3.0.2.RELEASE a nikoli ve verzi 5.0.x, jak je uvedeno v doporučení.“

CVE-2013-6429
-
-
Střední
TRUE

CVE-2014-0054
-
CVE-2014-0054
Střední
TRUE

CVE-2013-6430
-
-
Střední
TRUE

jarní kontext:3.0.5
CVE-2011-2894
součást nenalezena
-
Střední
TRUE

jádro pružiny: 3.0.5
-
CVE-2011-2730
CVE-2011-2730
Vysoký
TRUE

CVE-2011-2894
CVE-2011-2894
CVE-2011-2894
Střední
TRUE

-
-
CVE-2013-4152
Střední
NEPRAVDIVÉ
Duplikát stejné zranitelnosti v spring-webu

-
CVE-2013-4152
-
Střední
NEPRAVDIVÉ
Zranitelnost se týká komponenty pružiny

-
CVE-2013-6429
CVE-2013-6429
Střední
NEPRAVDIVÉ
Zranitelnost se týká komponenty pružiny

-
CVE-2013-6430
-
Střední
NEPRAVDIVÉ
Zranitelnost se týká komponenty pružiny

-
CVE-2013-7315
CVE-2013-7315
Střední
NEPRAVDIVÉ
SPLIT z CVE-2013-4152. + Chyba zabezpečení se týká komponenty spring-web

-
CVE-2014-0054
CVE-2014-0054
Střední
NEPRAVDIVÉ
Zranitelnost se týká komponenty pružiny

-
CVE-2014-0225
-
Vysoký
NEPRAVDIVÉ
Zranitelnost se týká komponenty pružiny

-
-
CVE-2014-0225
Vysoký
NEPRAVDIVÉ
Duplikát stejné zranitelnosti v spring-webu

-
CVE-2014-1904
CVE-2014-1904
Střední
NEPRAVDIVÉ
Chyba zabezpečení se týká komponenty spring-web-mvc

-
CVE-2014-3625
CVE-2014-3625
Střední
NEPRAVDIVÉ
Chyba zabezpečení se týká komponenty spring-web-mvc

-
CVE-2016-9878
CVE-2016-9878
Vysoký
NEPRAVDIVÉ
Chyba zabezpečení se týká komponenty spring-web-mvc

-
CVE-2018-1270
CVE-2018-1270
Vysoký
NEPRAVDIVÉ
Pro jarní-výraz/jarní-zprávy

-
CVE-2018-1271
CVE-2018-1271
Střední
NEPRAVDIVÉ
Chyba zabezpečení se týká komponenty spring-web-mvc

-
CVE-2018-1272
CVE-2018-1272
Vysoký
TRUE

CVE-2014-3578
CVE-2014-3578 (OSSINDEX)
CVE-2014-3578
Střední
TRUE

SONATYPE-2015-0327
-
-
Nízké
TRUE

struts2-config-browser-plugin:2.3.30
SONATYPE-2016-0104
-
-
Střední
TRUE

spring-tx: 3.0.5
-
CVE-2011-2730
-
Vysoký
NEPRAVDIVÉ
Tato chyba zabezpečení není specifická pro spring-tx

-
CVE-2011-2894
-
Vysoký
NEPRAVDIVÉ
Tato chyba zabezpečení není specifická pro spring-tx

-
CVE-2013-4152
-
Střední
NEPRAVDIVÉ
Tato chyba zabezpečení není specifická pro spring-tx

-
CVE-2013-6429
-
Střední
NEPRAVDIVÉ
Tato chyba zabezpečení není specifická pro spring-tx

-
CVE-2013-6430
-
Střední
NEPRAVDIVÉ
Tato chyba zabezpečení není specifická pro spring-tx

-
CVE-2013-7315
-
Střední
NEPRAVDIVÉ
Tato chyba zabezpečení není specifická pro spring-tx

-
CVE-2014-0054
-
Střední
NEPRAVDIVÉ
Tato chyba zabezpečení není specifická pro spring-tx

-
CVE-2014-0225
-
Vysoký
NEPRAVDIVÉ
Tato chyba zabezpečení není specifická pro spring-tx

-
CVE-2014-1904
-
Střední
NEPRAVDIVÉ
Tato chyba zabezpečení není specifická pro spring-tx

-
CVE-2014-3625
-
Střední
NEPRAVDIVÉ
Tato chyba zabezpečení není specifická pro spring-tx

-
CVE-2016-9878
-
Vysoký
NEPRAVDIVÉ
Tato chyba zabezpečení není specifická pro spring-tx

-
CVE-2018-1270
-
Vysoký
NEPRAVDIVÉ
Tato chyba zabezpečení není specifická pro spring-tx

-
CVE-2018-1271
-
Střední
NEPRAVDIVÉ
Tato chyba zabezpečení není specifická pro spring-tx

-
CVE-2018-1272
-
Střední
NEPRAVDIVÉ
Tato chyba zabezpečení není specifická pro spring-tx

jádro vzpěry:1.3.8
-
CVE-2011-5057 (OSSINDEX)

Střední
FASLE
Zranitelnost vůči Struts 2

-
CVE-2012-0391 (OSSINDEX)
CVE-2012-0391
Vysoký
NEPRAVDIVÉ
Zranitelnost vůči Struts 2

-
CVE-2014-0094 (OSSINDEX)
CVE-2014-0094
Střední
NEPRAVDIVÉ
Zranitelnost vůči Struts 2

-
CVE-2014-0113 (OSSINDEX)
CVE-2014-0113
Vysoký
NEPRAVDIVÉ
Zranitelnost vůči Struts 2

CVE-2016-1182
3VE-2016-1182
-
Vysoký
TRUE

-
-
CVE-2011-5057
Střední
NEPRAVDIVÉ
Zranitelnost vůči Struts 2

-
CVE-2012-0392 (OSSINDEX)
CVE-2012-0392
Vysoký
NEPRAVDIVÉ
Zranitelnost vůči Struts 2

-
CVE-2012-0393 (OSSINDEX)
CVE-2012-0393
Střední
NEPRAVDIVÉ
Zranitelnost vůči Struts 2

CVE-2015-0899
CVE-2015-0899
-
Vysoký
TRUE

-
CVE-2012-0394
CVE-2012-0394
Střední
NEPRAVDIVÉ
Zranitelnost vůči Struts 2

-
CVE-2012-0838 (OSSINDEX)
CVE-2012-0838
Vysoký
NEPRAVDIVÉ
Zranitelnost vůči Struts 2

-
CVE-2013-1965 (OSSINDEX)
CVE-2013-1965
Vysoký
NEPRAVDIVÉ
Zranitelnost vůči Struts 2

-
CVE-2013-1966 (OSSINDEX)
CVE-2013-1966
Vysoký
FASLE
Zranitelnost vůči Struts 2

-
CVE-2013-2115
CVE-2013-2115
Vysoký
FASLE
Zranitelnost vůči Struts 2

-
CVE-2013-2134 (OSSINDEX)
CVE-2013-2134
Vysoký
FASLE
Zranitelnost vůči Struts 2

-
CVE-2013-2135 (OSSINDEX)
CVE-2013-2135
Vysoký
FASLE
Zranitelnost vůči Struts 2

CVE-2014-0114
CVE-2014-0114
-
Vysoký
TRUE

-
CVE-2015-2992
CVE-2015-2992
Střední
NEPRAVDIVÉ
Zranitelnost vůči Struts 2

-
CVE-2016-0785 (OSSINDEX)
CVE-2016-0785
Vysoký
NEPRAVDIVÉ
Zranitelnost vůči Struts 2

CVE-2016-1181
CVE-2016-1181
-
Vysoký
TRUE

-
CVE-2016-4003 (OSSINDEX)
CVE-2016-4003
Vysoký
NEPRAVDIVÉ
Zranitelnost vůči Struts 2

xwork-core: 2.3.30
CVE-2017-9804
-
-
Vysoký
TRUE

SONATYPE-2017-0173
-
-
Vysoký
TRUE

CVE-2017-7672
-
-
Vysoký
NEPRAVDIVÉ
Duplikát CVE-2017-9804

SONATYPE-2016-0127
-
-
Vysoký
TRUE

vzpěry 2jádrové:2.3.30
-
CVE-2016-6795
CVE-2016-6795
Vysoký
TRUE

-
CVE-2017-9787
CVE-2017-9787
Vysoký
TRUE

-
CVE-2017-9791
CVE-2017-9791
Vysoký
TRUE

-
CVE-2017-9793
-
Vysoký
NEPRAVDIVÉ
Duplikát CVE-2018-1327

-
CVE-2017-9804
-
Vysoký
TRUE

-
CVE-2017-9805
CVE-2017-9805
Vysoký
TRUE

CVE-2016-4003
-
-
Střední
NEPRAVDIVÉ
Platí pro Apache Struts 2.x až 2.3.28, což je verze 2.3.30. Na základě popisu je však CVE platný pro jakoukoli verzi Struts 2, pokud se používá JRE 1.7 nebo nižší. Zřejmě se nás tady rozhodli přejistit, ale vypadá to spíš na FALŠE

-
CVE-2018-1327
CVE-2018-1327
Vysoký
TRUE

CVE-2017-5638
CVE-2017-5638
CVE-2017-5638
Vysoký
TRUE
Stejná zranitelnost, kterou hackeři Equifax zneužili v roce 2017

CVE-2017-12611
CVE-2017-12611
-
Vysoký
TRUE

CVE-2018-11776
CVE-2018-11776
CVE-2018-11776
Vysoký
TRUE

vzpěry-taglib:1.3.8
-
CVE-2012-0394
-
Střední
NEPRAVDIVÉ
Pro vzpěry 2jádrové

-
CVE-2013-2115
-
Vysoký
NEPRAVDIVÉ
Pro vzpěry 2jádrové

-
CVE-2014-0114
-
Vysoký
NEPRAVDIVÉ
Pro commons-beanutils

-
CVE-2015-0899
-
Vysoký
NEPRAVDIVÉ
Neplatí pro taglib

-
CVE-2015-2992
-
Střední
NEPRAVDIVÉ
Týká se dvoujádrových vzpěr

-
CVE-2016-1181
-
Vysoký
NEPRAVDIVÉ
Neplatí pro taglib

-
CVE-2016-1182
-
Vysoký
NEPRAVDIVÉ
Neplatí pro taglib

vzpěry-dlaždice-1.3.8
-
CVE-2012-0394
-
Střední
NEPRAVDIVÉ
Pro vzpěry 2jádrové

-
CVE-2013-2115
-
Vysoký
NEPRAVDIVÉ
Pro vzpěry 2jádrové

-
CVE-2014-0114
-
Vysoký
NEPRAVDIVÉ
Pod commons-beanutils

-
CVE-2015-0899
-
Vysoký
NEPRAVDIVÉ
Nevztahuje se na dlaždice

-
CVE-2015-2992
-
Střední
NEPRAVDIVÉ
Pro vzpěry 2jádrové

-
CVE-2016-1181
-
Vysoký
NEPRAVDIVÉ
Neplatí pro taglib

-
CVE-2016-1182
-
Vysoký
NEPRAVDIVÉ
Neplatí pro taglib

Zdroj: www.habr.com

Přidat komentář