DevSecOps: princípy fungovania a porovnanie SCA. Časť prvá

Význam analýzy softvérových komponentov tretích strán (Software Composition Analysis - SCA) v procese vývoja rastie s vydávaním výročných správ o zraniteľnosti open source knižníc, ktoré publikujú Synopsys, Sonatype, Snyk a White Source. . Podľa správy Stav bezpečnostných zraniteľností otvoreného zdroja 2020 počet identifikovaných open source zraniteľností v roku 2019 vzrástol v porovnaní s predchádzajúcim rokom takmer 1.5-krát, pričom open source komponenty využíva 60 % až 80 % projektov. Podľa nezávislého názoru sú procesy SCA samostatnou praxou OWASP SAMM a BSIMM ako indikátora zrelosti a v prvej polovici roku 2020 spoločnosť OWASP vydala nový štandard overovania softvérových komponentov OWASP (SCVS), ktorý poskytuje najlepšie postupy na overovanie tretích komponenty strany v dodávateľskom reťazci BY.

DevSecOps: princípy fungovania a porovnanie SCA. Časť prvá

Jeden z najnázornejších prípadov Stalo so spoločnosťou Equifax v máji 2017. Neznámi útočníci získali informácie o 143 miliónoch Američanov vrátane celých mien, adries, rodných čísel a vodičských preukazov. V 209 000 prípadoch dokumenty obsahovali aj informácie o bankových kartách obetí. K tomuto úniku došlo v dôsledku zneužitia kritickej zraniteľnosti v Apache Struts 2 (CVE-2017-5638), zatiaľ čo oprava bola vydaná v marci 2017. Na inštaláciu aktualizácie mala spoločnosť dva mesiace, no nikto si s tým nelámal hlavu.

Tento článok rozoberie problematiku výberu nástroja na vykonávanie SCA z pohľadu kvality výsledkov analýzy. Poskytne sa aj funkčné porovnanie nástrojov. Proces integrácie do CI/CD a integračné schopnosti budú ponechané na ďalšie publikácie. OWASP predstavil širokú škálu nástrojov na vašej stránke, no v aktuálnej recenzii sa dotkneme len najobľúbenejšieho open source nástroja Dependency Check, o niečo menej známej open source platformy Dependency Track a Enterprise riešenia Sonatype Nexus IQ. Tiež pochopíme, ako tieto riešenia fungujú, a porovnáme získané výsledky pre falošne pozitívne výsledky.

DevSecOps: princípy fungovania a porovnanie SCA. Časť prvá

Princíp činnosti

Kontrola závislosti je nástroj (CLI, maven, modul jenkins, ant), ktorý analyzuje súbory projektu, zhromažďuje informácie o závislostiach (názov balíka, groupid, názov špecifikácie, verzia...), vytvára riadok CPE (Common Platform Enumeration). , Package URL ( PURL) a identifikuje zraniteľnosti pre CPE/PURL z databáz (NVD, Sonatype OSS Index, NPM Audit API...), po čom vytvorí jednorazový report vo formáte HTML, JSON, XML...

Pozrime sa, ako CPE vyzerá:

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

  • časť: Označenie, že komponent sa týka aplikácie (a), operačného systému (o), hardvéru (h) (povinné)
  • Predávajúci: Názov výrobcu produktu (povinné)
  • výrobok: Názov produktu (povinné)
  • Verzia: Verzia komponentu (zastaraná položka)
  • Update: Aktualizácia balíka
  • Vydanie: Staršia verzia (zastaraná položka)
  • Jazyk: Jazyk definovaný v RFC-5646
  • Edícia SW: Verzia softvéru
  • Cieľový SW: Softvérové ​​prostredie, v ktorom produkt funguje
  • Cieľový HW: Hardvérové ​​prostredie, v ktorom produkt funguje
  • Ostatné: Informácie o dodávateľovi alebo produkte

Príklad CPE vyzerá takto:

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

Riadok znamená, že CPE verzia 2.3 popisuje aplikačný komponent od výrobcu pivotal_software s menom spring_framework verzia 3.0.0. Ak otvoríme zraniteľnosť CVE-2014 0225, v NVD môžeme vidieť zmienku o tomto CPE. Prvý problém, ktorému by ste mali okamžite venovať pozornosť, je, že CVE v NVD podľa CPE hlási problém vo frameworku a nie v konkrétnom komponente. To znamená, že ak sú vývojári pevne zviazaní s rámcom a identifikovaná zraniteľnosť neovplyvňuje moduly, ktoré vývojári používajú, bezpečnostný špecialista bude musieť tak či onak toto CVE rozobrať a porozmýšľať nad aktualizáciou.

Adresu URL používajú aj nástroje SCA. Formát adresy URL balíka je nasledujúci:

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

  • schéma: Vždy tam bude 'pkg' označujúce, že toto je adresa URL balíka (povinné)
  • Typ: „Typ“ balíka alebo „protokol“ balíka, ako napríklad maven, npm, nuget, gem, pypi atď. (Požadovaná položka)
  • Menný priestor: Nejaká predpona názvu, napríklad ID skupiny Maven, vlastník obrázka Docker, používateľ GitHub alebo organizácia. Voliteľné a závisí od typu.
  • Názov: Názov balíka (povinné)
  • Verzia: Verzia balíka
  • Kvalifikácia: Ďalšie kvalifikačné údaje pre balík, ako je OS, architektúra, distribúcia atď. Voliteľné a špecifické pre daný typ.
  • Podcesta: Ďalšia cesta v balíku vzhľadom na koreň balíka

napríklad:

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

Závislosť Track — lokálna webová platforma, ktorá akceptuje vygenerovaný hotový zoznam materiálov (BOM). CycloneDX и SPDX, teda hotové špecifikácie o existujúcich závislostiach. Ide o XML súbor popisujúci závislosti – názov, hash, adresa URL balíka, vydavateľ, licencia. Ďalej Dependency Track analyzuje kusovník, pozerá sa na CVE dostupné pre identifikované závislosti z databázy zraniteľností (NVD, Sonatype OSS Index...), potom vytvára grafy, vypočítava metriky, pravidelne aktualizuje údaje o stave zraniteľnosti komponentov. .

Príklad toho, ako môže vyzerať kusovník vo formáte 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 možno použiť nielen ako vstupné parametre pre Dependency Track, ale aj na inventarizáciu softvérových komponentov v dodávateľskom reťazci, napríklad na poskytovanie softvéru zákazníkovi. V roku 2014 bol dokonca v USA navrhnutý zákon „Zákon o riadení a transparentnosti kybernetického dodávateľského reťazca z roku 2014“, ktorá uvádzala, že pri nákupe softvéru akýkoľvek štát. Inštitúcia musí požiadať o kusovník, aby zabránila použitiu zraniteľných komponentov, ale zákon ešte nenadobudol účinnosť.

Vráťme sa k SCA, Dependency Track má hotové integrácie s platformami oznámení, ako je Slack, a systémami na správu zraniteľností, ako je Kenna Security. Za zmienku tiež stojí, že Dependency Track okrem iného identifikuje zastarané verzie balíkov a poskytuje informácie o licenciách (kvôli podpore SPDX).

Ak hovoríme konkrétne o kvalite SCA, tak je tu zásadný rozdiel.

Závislosť Track neakceptuje projekt ako vstup, ale skôr kusovník. To znamená, že ak chceme projekt otestovať, musíme najskôr vygenerovať bom.xml, napríklad pomocou CycloneDX. Závislosť Track je teda priamo závislá od CycloneDX. Zároveň umožňuje prispôsobenie. Toto napísal tím OZON Modul CycloneDX na zostavenie súborov kusovníka pre projekty Golang na ďalšie skenovanie cez Dependency Track.

Nexus IQ je komerčné riešenie SCA od Sonatype, ktoré je súčasťou ekosystému Sonatype, ktorého súčasťou je aj Nexus Repository Manager. Nexus IQ môže akceptovať ako vstup vojnové archívy (pre java projekty) cez webové rozhranie alebo API a kusovník, ak vaša organizácia ešte neprešla z CycloneDX na nové riešenie. Na rozdiel od open source riešení IQ odkazuje nielen na CP/PURL na identifikovaný komponent a zodpovedajúcu zraniteľnosť v databáze, ale berie do úvahy aj vlastný prieskum, napríklad názov zraniteľnej funkcie alebo triedy. Mechanizmy IQ budú diskutované neskôr v analýze výsledkov.

Poďme zhrnúť niektoré funkčné vlastnosti a tiež zvážiť podporované jazyky na analýzu:

Jazyk
Nexus IQ
Kontrola závislosti
Závislosť Track

Jáva
+
+
+

C / C ++
+
+
-

C#
+
+
-

.net
+
+
+

Erlang
-
-
+

JavaScript (NodeJS)
+
+
+

PHP
+
+
+

Pytón
+
+
+

rubín
+
+
+

Perl
-
-
-

Scala
+
+
+

Cieľ C
+
+
-

Rýchly
+
+
-

R
+
-
-

Go
+
+
+

funkčnosť

funkčnosť
Nexus IQ
Kontrola závislosti
Závislosť Track

Schopnosť zabezpečiť, aby komponenty použité v zdrojovom kóde boli kontrolované na licencovanú čistotu
+
-
+

Schopnosť skenovať a analyzovať chyby zabezpečenia a čistotu licencií pre obrázky Docker
+ Integrácia s Clair
-
-

Schopnosť konfigurovať bezpečnostné politiky na používanie knižníc s otvoreným zdrojom
+
-
-

Schopnosť skenovať úložiská s otvoreným zdrojovým kódom na zraniteľné komponenty
+ RubyGems, Maven, NPM, Nuget, Pypi, Conan, Bower, Conda, Go, p2, R, Yum, Helm, Docker, CocoaPods, Git LFS
-
+ Hex, RubyGems, Maven, NPM, Nuget, Pypi

Dostupnosť špecializovanej výskumnej skupiny
+
-
-

Prevádzka s uzavretou slučkou
+
+
+

Používanie databáz tretích strán
+ Uzavretá databáza Sonatype
+ Sonatype OSS, Verejní poradcovia NPM
+ Sonatype OSS, NPM Public Advisors, RetireJS, VulnDB, podpora vlastnej databázy zraniteľností

Schopnosť filtrovať komponenty open source pri pokuse o načítanie do vývojovej slučky podľa nakonfigurovaných zásad
+
-
-

Odporúčania na opravu slabých miest, dostupnosť odkazov na opravy
+
+- (závisí od popisu vo verejných databázach)
+- (závisí od popisu vo verejných databázach)

Zoradenie zistených zraniteľností podľa závažnosti
+
+
+

Model prístupu založený na rolách
+
-
+

podpora CLI
+
+
+- (iba pre CycloneDX)

Vzorkovanie/triedenie zraniteľností podľa definovaných kritérií
+
-
+

Dashboard podľa stavu aplikácie
+
-
+

Generovanie reportov vo formáte PDF
+
-
-

Generovanie správ vo formáte JSONCSV
+
+
-

Podpora ruského jazyka
-
-
-

Integračné schopnosti

integrácia
Nexus IQ
Kontrola závislosti
Závislosť Track

Integrácia LDAP/Active Directory
+
-
+

Integrácia s kontinuálnym integračným systémom Bamboo
+
-
-

Integrácia s priebežným integračným systémom TeamCity
+
-
-

Integrácia s kontinuálnym integračným systémom GitLab
+
+- (ako doplnok pre GitLab)
+

Integrácia s kontinuálnym integračným systémom Jenkins
+
+
+

Dostupnosť pluginov pre IDE
+ IntelliJ, Eclipse, Visual Studio
-
-

Podpora vlastnej integrácie prostredníctvom webových služieb (API) nástroja
+
-
+

Kontrola závislosti

Prvý štart

Spustite kontrolu závislosti na zámerne zraniteľnej aplikácii DVJA.

Na to použijeme Doplnok Maven na kontrolu závislosti:

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

V dôsledku toho sa v cieľovom adresári zobrazí dependency-check-report.html.

DevSecOps: princípy fungovania a porovnanie SCA. Časť prvá

Otvorme súbor. Po súhrnných informáciách o celkovom počte zraniteľností môžeme vidieť informácie o zraniteľnostiach s vysokou úrovňou závažnosti a spoľahlivosti s uvedením balíka, CPE a počtu CVE.

Ďalej nasledujú podrobnejšie informácie, najmä podklad, na základe ktorého sa rozhodovalo (dôkaz), teda určitý kusovník.

DevSecOps: princípy fungovania a porovnanie SCA. Časť prvá

Ďalej nasleduje popis CPE, PURL a CVE. Mimochodom, odporúčania na opravu nie sú zahrnuté kvôli ich absencii v databáze NVD.

DevSecOps: princípy fungovania a porovnanie SCA. Časť prvá

Ak chcete systematicky zobraziť výsledky skenovania, môžete nakonfigurovať Nginx s minimálnymi nastaveniami alebo odoslať výsledné chyby do systému správy defektov, ktorý podporuje konektory na kontrolu závislostí. Napríklad Defect Dojo.

Závislosť Track

Inštalácia

Dependency Track je zase webová platforma so zobrazovanými grafmi, takže naliehavý problém ukladania defektov v riešení tretích strán tu nevzniká.
Podporované skripty na inštaláciu sú: Docker, WAR, Executable WAR.

Prvý štart

Ideme na adresu URL spustenej služby. Prihlásime sa cez admin/admin, zmeníme prihlasovacie meno a heslo a následne sa dostaneme na Dashboard. Ďalšia vec, ktorú urobíme, je vytvorenie projektu pre testovaciu aplikáciu v jazyku Java Domov/Projekty → Vytvoriť projekt . Vezmime si DVJA ako príklad.

DevSecOps: princípy fungovania a porovnanie SCA. Časť prvá

Keďže sledovanie závislosti môže akceptovať iba kusovník ako vstup, tento kusovník sa musí získať. Využime to Doplnok CycloneDX Maven:

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

Získame bom.xml a načítame súbor vo vytvorenom projekte DVJA → Závislosti → Nahrať kusovník.

Poďme do Administrácie → Analyzátory. Chápeme, že máme povolený iba interný analyzátor, ktorý zahŕňa NVD. Pripojme tiež Sonatype OSS Index.

DevSecOps: princípy fungovania a porovnanie SCA. Časť prvá

Takto získame nasledujúci obrázok pre náš projekt:

DevSecOps: princípy fungovania a porovnanie SCA. Časť prvá

V zozname môžete nájsť aj jednu zraniteľnosť vzťahujúcu sa na Sonatype OSS:

DevSecOps: princípy fungovania a porovnanie SCA. Časť prvá

Hlavným sklamaním bolo, že Dependency Track už neakceptuje XML správy Dependency Check. Najnovšie podporované verzie integrácie Kontrola závislosti boli 1.0.0 - 4.0.2, zatiaľ čo ja som testoval 5.3.2.

Tu video (a tu), keď to ešte bolo možné.

Nexus IQ

Prvý štart

Inštalácia Nexus IQ pochádza z archívov dokumentáciu, ale na tieto účely sme vytvorili obraz Docker.

Po prihlásení do konzoly je potrebné vytvoriť organizáciu a aplikáciu.

DevSecOps: princípy fungovania a porovnanie SCA. Časť prvá

DevSecOps: princípy fungovania a porovnanie SCA. Časť prvá

DevSecOps: princípy fungovania a porovnanie SCA. Časť prvá

Ako vidíte, nastavenie v prípade IQ je o niečo komplikovanejšie, pretože potrebujeme vytvoriť aj politiky, ktoré sú použiteľné pre rôzne „fázy“ (dev, build, stage, release). Je to potrebné na zablokovanie zraniteľných komponentov, keď sa pohybujú potrubím bližšie k výrobe, alebo na ich zablokovanie hneď, ako sa dostanú do zariadenia Nexus Repo po stiahnutí vývojármi.

Aby sme pocítili rozdiel medzi otvoreným zdrojom a podnikom, vykonajte rovnaké skenovanie cez Nexus IQ rovnakým spôsobom Doplnok Maven, ktorý predtým vytvoril testovaciu aplikáciu 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>

Nasledujte URL na vygenerovaný prehľad vo webovom rozhraní IQ:

DevSecOps: princípy fungovania a porovnanie SCA. Časť prvá

Tu môžete vidieť všetky porušenia pravidiel, ktoré označujú rôzne úrovne významnosti (od informácií po kritické z hľadiska bezpečnosti). Písmeno D vedľa komponentu znamená, že komponent je priama závislosť a písmeno T vedľa komponentu znamená, že komponent je tranzitívna závislosť, to znamená, že je tranzitívny.

Mimochodom, správa Správa o stave zabezpečenia otvoreného zdroja za rok 2020 od Snyk uvádza, že viac ako 70 % zraniteľností s otvoreným zdrojom objavených v Node.js, Java a Ruby je v prechodných závislostiach.

Ak otvoríme jedno z porušení pravidiel Nexus IQ, môžeme vidieť popis komponentu, ako aj graf verzií, ktorý ukazuje umiestnenie aktuálnej verzie v časovom grafe, ako aj to, kedy sa zraniteľnosť prestane zobrazovať. byť zraniteľný. Výška sviečok na grafe ukazuje obľúbenosť používania tohto komponentu.

DevSecOps: princípy fungovania a porovnanie SCA. Časť prvá

Ak prejdete do sekcie zraniteľnosti a rozbalíte CVE, môžete si prečítať popis tejto zraniteľnosti, odporúčania na odstránenie, ako aj dôvod, prečo bol tento komponent narušený, teda prítomnosť triedy DiskFileitem.class.

DevSecOps: princípy fungovania a porovnanie SCA. Časť prvá

DevSecOps: princípy fungovania a porovnanie SCA. Časť prvá

Zhrňme len tie, ktoré súvisia s komponentmi Java tretích strán, pričom odstránime komponenty js. V zátvorkách uvádzame počet zraniteľností, ktoré boli nájdené mimo NVD.

Celkové IQ zariadenia Nexus:

  • Naskenované závislosti: 62
  • Zraniteľné závislosti: 16
  • Nájdené chyby zabezpečenia: 42 (8 sonatype db)

Kontrola celkovej závislosti:

  • Naskenované závislosti: 47
  • Zraniteľné závislosti: 13
  • Nájdené slabé miesta: 91 (14 sonatype oss)

Celková stopa závislosti:

  • Naskenované závislosti: 59
  • Zraniteľné závislosti: 10
  • Nájdené slabé miesta: 51 (1 sonatype oss)

V ďalších krokoch analyzujeme získané výsledky a zistíme, ktorá z týchto zraniteľností je skutočným defektom a ktorá je falošne pozitívna.

Vylúčenie zodpovednosti

Táto recenzia nie je nespornou pravdou. Autor nemal za cieľ vyzdvihnúť samostatný nástroj na pozadí iných. Účelom prehľadu bolo ukázať mechanizmy fungovania nástrojov SCA a spôsoby kontroly ich výsledkov.

Porovnanie výsledkov

Podmienky:

Falošne pozitívny pre chyby zabezpečenia komponentov tretích strán je:

  • CVE nesúlad s identifikovaným komponentom
  • Ak je napríklad identifikovaná zraniteľnosť v rámci struts2 a nástroj ukazuje na komponent rámca struts-tiles, na ktorý sa táto zraniteľnosť nevzťahuje, ide o falošne pozitívny
  • Nezhoda CVE s identifikovanou verziou komponentu
  • Napríklad zraniteľnosť je viazaná na verziu pythonu > 3.5 a nástroj označuje verziu 2.7 ako zraniteľnú – ide o falošne pozitívny výsledok, pretože v skutočnosti sa zraniteľnosť vzťahuje iba na vetvu produktu 3.x.
  • Duplicitné CVE
  • Napríklad, ak SCA špecifikuje CVE, ktorý umožňuje RCE, potom SCA špecifikuje CVE pre ten istý komponent, ktorý platí pre produkty Cisco ovplyvnené týmto RCE. V tomto prípade bude falošne pozitívny.
  • Napríklad CVE bol nájdený v komponente spring-web, po ktorom SCA ukazuje na rovnaký CVE v iných komponentoch Spring Framework, zatiaľ čo CVE nemá nič spoločné s inými komponentmi. V tomto prípade bude falošne pozitívny.

Predmetom štúdie bol Open Source projekt DVJA. Štúdia zahŕňala iba komponenty java (bez js).

Súhrnné výsledky

Poďme rovno k výsledkom manuálnej kontroly identifikovaných zraniteľností. Úplnú správu pre každý CVE nájdete v prílohe.

Súhrnné výsledky pre všetky chyby zabezpečenia:

Parameter
Nexus IQ
Kontrola závislosti
Závislosť Track

Celková zistená zraniteľnosť
42
91
51

Nesprávne identifikované slabé miesta (falošne pozitívne)
2 (4.76%)
62 (68,13%)
29 (56.86%)

Nenašli sa žiadne relevantné chyby zabezpečenia (falošne negatívne)
10
20
27

Súhrnné výsledky podľa komponentov:

Parameter
Nexus IQ
Kontrola závislosti
Závislosť Track

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

Celkom zraniteľné komponenty
16
13
10

Nesprávne identifikované zraniteľné komponenty (falošne pozitívne)
1
5
0

Nesprávne identifikované zraniteľné komponenty (falošne pozitívne)
0
6
6

Zostavme vizuálne grafy na vyhodnotenie pomeru falošne pozitívnych a falošne negatívnych k celkovému počtu zraniteľností. Komponenty sú označené horizontálne a zraniteľné miesta v nich identifikované sú označené vertikálne.

DevSecOps: princípy fungovania a porovnanie SCA. Časť prvá

DevSecOps: princípy fungovania a porovnanie SCA. Časť prvá

DevSecOps: princípy fungovania a porovnanie SCA. Časť prvá

Pre porovnanie, podobnú štúdiu vykonal tím Sonatype, ktorý testoval projekt 1531 komponentov pomocou OWASP Dependency Check. Ako vidíme, pomer šumu k správnym odozvám je porovnateľný s našimi výsledkami.

DevSecOps: princípy fungovania a porovnanie SCA. Časť prvá
Zdroj: www.sonatype.com/why-precision-matters-ebook

Pozrime sa na niektoré CVE z našich výsledkov skenovania, aby sme pochopili dôvod týchto výsledkov.

viac

№ 1

Najprv sa pozrime na niekoľko zaujímavých bodov o Sonatype Nexus IQ.

Nexus IQ poukazuje na problém s deserializáciou so schopnosťou vykonávať RCE v rámci Spring Framework viackrát. CVE-2016-1000027 v jarnom webe: 3.0.5 prvýkrát a CVE-2011-2894 v jarnom kontexte: 3.0.5 a jarnom jadre: 3.0.5. Najprv sa zdá, že existuje duplicita zraniteľnosti vo viacerých CVE. Pretože, ak sa pozriete na CVE-2016-1000027 a CVE-2011-2894 v databáze NVD, zdá sa, že všetko je zrejmé

komponentov
Zraniteľnosť

spring-web:3.0.5
CVE-2016 1000027,

jarný kontext:3.0.5
CVE-2011 2894,

jadro pružiny: 3.0.5
CVE-2011 2894,

Popis CVE-2011 2894, od NVD:
DevSecOps: princípy fungovania a porovnanie SCA. Časť prvá

Popis CVE-2016 1000027, od NVD:
DevSecOps: princípy fungovania a porovnanie SCA. Časť prvá

Samotný CVE-2011-2894 je celkom známy. V správe White Source 2011 tento CVE bol uznaný ako jeden z najbežnejších. Popisov pre CVE-2016-100027 je v zásade v NVD málo a zdá sa, že sú použiteľné iba pre Spring Framework 4.1.4. Poďme sa na to pozrieť odkaz a tu je všetko viac-menej jasné. Od Udržateľné články Chápeme, že okrem zraniteľnosti v RemoteInvocationSerializingExporter v CVE-2011-2894 je zraniteľnosť pozorovaná v HttpInvokerServiceExporter. Toto nám hovorí Nexus IQ:

DevSecOps: princípy fungovania a porovnanie SCA. Časť prvá

V NVD však nič také neexistuje, a preto je kontrola závislosti a sledovanie závislosti falošne negatívne.

Z popisu CVE-2011-2894 je tiež zrejmé, že zraniteľnosť je skutočne prítomná v kontexte spring-context:3.0.5 a spring-core:3.0.5. Potvrdenie o tom možno nájsť v článku od osoby, ktorá túto chybu zabezpečenia našla.

№ 2

komponentov
Zraniteľnosť
Výsledok

vzpery2-jadro:2.3.30
CVE-2016 4003,
FALSE

Ak si preštudujeme zraniteľnosť CVE-2016-4003, pochopíme, že bola opravená vo verzii 2.3.28, Nexus IQ nám ju však hlási. V popise zraniteľnosti je poznámka:

DevSecOps: princípy fungovania a porovnanie SCA. Časť prvá

To znamená, že zraniteľnosť existuje iba v spojení so zastaranou verziou JRE, na ktorú sa nás rozhodli varovať. Napriek tomu to považujeme za falošne pozitívne, aj keď nie za najhoršie.

Nie. 3

komponentov
Zraniteľnosť
Výsledok

xwork-core: 2.3.30
CVE-2017 9804,
TRUE

xwork-core: 2.3.30
CVE-2017 7672,
FALSE

Ak sa pozrieme na popisy CVE-2017-9804 a CVE-2017-7672, pochopíme, že problém je URLValidator class, pričom CVE-2017-9804 pochádza z CVE-2017-7672. Prítomnosť druhej zraniteľnosti nenesie žiadnu užitočnú záťaž okrem toho, že jej závažnosť sa zvýšila na High, takže ju môžeme považovať za zbytočný hluk.

Celkovo sa pre Nexus IQ nenašli žiadne ďalšie falošne pozitívne výsledky.

№ 4

Existuje niekoľko vecí, vďaka ktorým sa IQ odlišuje od iných riešení.

komponentov
Zraniteľnosť
Výsledok

spring-web:3.0.5
CVE-2020 5398,
TRUE

CVE v NVD uvádza, že sa vzťahuje iba na verzie 5.2.x pred 5.2.3, 5.1.x pred 5.1.13 a verzie 5.0.x pred 5.0.16, ak sa však pozrieme na popis CVE v Nexus IQ , potom uvidíme nasledovné:
Upozornenie na odchýlku: Bezpečnostný výskumný tím Sonatype zistil, že táto chyba zabezpečenia bola zavedená vo verzii 3.0.2.RELEASE a nie vo verzii 5.0.x, ako je uvedené v odporúčaní.

Potom nasleduje PoC pre túto chybu zabezpečenia, v ktorom sa uvádza, že je prítomná vo verzii 3.0.5.

Falošne negatívne sa odošle do kontroly závislosti a sledovania závislosti.

№ 5

Pozrime sa na falošne pozitívne výsledky kontroly závislosti a sledovania závislosti.

Kontrola závislosti vyniká tým, že odráža tie CVE, ktoré sa vzťahujú na celý rámec v NVD, na tie komponenty, na ktoré sa tieto CVE nevzťahujú. Týka sa to CVE-2012-0394, CVE-2013-2115, CVE-2014-0114, CVE-2015-0899, CVE-2015-2992, CVE-2016-1181, CVE-2016-1182, ktorá spôsobila kontrolu závislosti ” na struts-taglib:1.3.8 a struts-tiles-1.3.8. Tieto komponenty nemajú nič spoločné s tým, čo je popísané v CVE – spracovanie požiadaviek, validácia stránky atď. Je to spôsobené tým, že to, čo majú tieto CVE a komponenty spoločné, je iba rámec, a preto to Dependency Check považovala za zraniteľnosť.

Rovnaká situácia je s pružinou-tx:3.0.5 a podobná situácia s jadrom vzpery:1.3.8. Pre struts-core, Dependency Check a Dependency Track našli veľa zraniteľností, ktoré sú skutočne aplikovateľné na struts2-core, čo je v podstate samostatný rámec. V tomto prípade Nexus IQ správne pochopil obrázok a v CVE, ktoré vydal, uviedol, že struts-core dosiahlo koniec životnosti a je potrebné prejsť na struts2-core.

№ 6

V niektorých situáciách je nespravodlivé interpretovať zjavnú chybu kontroly závislosti a sledovania závislosti. Najmä CVE-2013-4152, CVE-2013-6429, CVE-2013-6430, CVE-2013-7315, CVE-2014-0054, CVE-2014-0225, CVE-2014-0225, ktoré Kontrola závislosti pripisovaný spring-core:3.0.5 v skutočnosti patrí spring-web:3.0.5. Niektoré z týchto CVE boli zároveň nájdené aj Nexus IQ, avšak IQ ich správne identifikovalo s iným komponentom. Pretože tieto zraniteľnosti neboli nájdené v spring-core, nemožno tvrdiť, že v princípe nie sú v frameworku a open source nástroje na tieto zraniteľnosti správne poukázali (len im trochu chýbalo).

Závery

Ako vidíme, určenie spoľahlivosti identifikovaných zraniteľností manuálnou kontrolou nedáva jednoznačné výsledky, a preto vznikajú kontroverzné otázky. Výsledkom je, že riešenie Nexus IQ má najnižší počet falošných pozitívnych nálezov a najvyššiu presnosť.

V prvom rade je to spôsobené tým, že tím Sonatype rozšíril popis každej zraniteľnosti CVE z NVD vo svojich databázach, pričom uviedol zraniteľnosti pre konkrétnu verziu komponentov až po triedu alebo funkciu, pričom vykonal ďalší výskum (napr. , kontrola zraniteľností na starších verziách softvéru).

Dôležitý vplyv na výsledky majú aj tie zraniteľnosti, ktoré neboli zahrnuté v NVD, no napriek tomu sú prítomné v databáze Sonatype s označením SONATYPE. Podľa správy Stav bezpečnostných zraniteľností otvoreného zdroja 2020 45 % odhalených zraniteľností s otvoreným zdrojom nie je hlásených spoločnosti NVD. Podľa databázy WhiteSource len 29% všetkých zraniteľností s otvoreným zdrojom nahlásených mimo NVD skončí tam, kde je zverejnených, a preto je dôležité hľadať zraniteľnosti aj v iných zdrojoch.

Výsledkom je, že kontrola závislosti produkuje veľa hluku a chýbajú niektoré zraniteľné komponenty. Dependency Track produkuje menej hluku a detekuje veľké množstvo komponentov, z čoho vo webovom rozhraní vizuálne nebolí oči.

Prax však ukazuje, že open source by sa mal stať prvými krokmi k vyspelým DevSecOps. Prvá vec, na ktorú by ste mali myslieť pri integrácii SCA do vývoja, sú procesy, teda premýšľať spolu s manažmentom a súvisiacimi oddeleniami o tom, ako by mali vyzerať ideálne procesy vo vašej organizácii. Môže sa ukázať, že pre vašu organizáciu najskôr Dependency Check alebo Dependency Track pokryje všetky obchodné potreby a Enterprise riešenia budú logickým pokračovaním vzhľadom na rastúcu komplexnosť vyvíjaných aplikácií.

Príloha A: Výsledky komponentov
Symboly:

  • Vysoká – vysoká a kritická úroveň zraniteľnosti v komponente
  • Stredná — Slabé miesta so strednou kritickou úrovňou v komponente
  • TRUE — Skutočne pozitívny problém
  • FALSE — Falošne pozitívny problém

komponentov
Nexus IQ
Kontrola závislosti
Závislosť Track
Výsledok

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
stredná
-
-
TRUE

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

pružina-výraz:3.0.5
vysoký
komponent sa nenašiel

TRUE

spring-web:3.0.5
vysoký
komponent sa nenašiel
vysoký
TRUE

jarný kontext:3.0.5
stredná
komponent sa nenašiel
-
TRUE

jadro pružiny: 3.0.5
stredná
vysoký
vysoký
TRUE

struts2-config-browser-plugin:2.3.30
stredná
-
-
TRUE

spring-tx: 3.0.5
-
vysoký
-
FALSE

vzpery-jadro:1.3.8
vysoký
vysoký
vysoký
TRUE

xwork-core: 2.3.30
vysoký
-
-
TRUE

vzpery2-jadro: 2.3.30
vysoký
vysoký
vysoký
TRUE

vzpery-taglib:1.3.8
-
vysoký
-
FALSE

vzpery-dlaždice-1.3.8
-
vysoký
-
FALSE

Príloha B: Výsledky zraniteľnosti
Symboly:

  • Vysoká – vysoká a kritická úroveň zraniteľnosti v komponente
  • Stredná — Slabé miesta so strednou kritickou úrovňou v komponente
  • TRUE — Skutočne pozitívny problém
  • FALSE — Falošne pozitívny problém

komponentov
Nexus IQ
Kontrola závislosti
Závislosť Track
Prísnosť
Výsledok
Komentár

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ízky
TRUE

log4j: 1.2.14
CVE-2019 17571,
CVE-2019 17571,
-
vysoký
TRUE

-
CVE-2020 9488,
-
Nízky
TRUE

SONATYPE-2010-0053
-
-
vysoký
TRUE

commons-collections:3.1
-
CVE-2015 6420,
CVE-2015 6420,
vysoký
FALSE
Duplikáty RCE(OSSINDEX)

-
CVE-2017 15708,
CVE-2017 15708,
vysoký
FALSE
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
-
-
stredná
TRUE

commons-beanutils:1.7.0
CVE-2014 0114,
CVE-2014 0114,
CVE-2014 0114,
vysoký
TRUE

-
CVE-2019 10086,
CVE-2019 10086,
vysoký
FALSE
Táto chyba zabezpečenia sa týka iba verzií 1.9.2+

commons-kodek:1:10
SONATYPE-2012-0050
-
-
stredná
TRUE

mysql-connector-java: 5.1.42
CVE-2018 3258,
CVE-2018 3258,
CVE-2018 3258,
vysoký
TRUE

CVE-2019 2692,
CVE-2019 2692,
-
stredná
TRUE

-
CVE-2020 2875,
-
stredná
FALSE
Rovnaká zraniteľnosť ako CVE-2019-2692, ale s poznámkou „útoky môžu výrazne ovplyvniť ďalšie produkty“

-
CVE-2017 15945,
-
vysoký
FALSE
Netýka sa to mysql-connector-java

-
CVE-2020 2933,
-
Nízky
FALSE
Duplikát CVE-2020-2934

CVE-2020 2934,
CVE-2020 2934,
-
stredná
TRUE

pružina-výraz:3.0.5
CVE-2018 1270,
komponent sa nenašiel
-
vysoký
TRUE

CVE-2018 1257,
-
-
stredná
TRUE

spring-web:3.0.5
CVE-2016 1000027,
komponent sa nenašiel
-
vysoký
TRUE

CVE-2014 0225,
-
CVE-2014 0225,
vysoký
TRUE

CVE-2011 2730,
-
-
vysoký
TRUE

-
-
CVE-2013 4152,
stredná
TRUE

CVE-2018 1272,
-
-
vysoký
TRUE

CVE-2020 5398,
-
-
vysoký
TRUE
Názorný príklad v prospech IQ: „Bezpečnostný výskumný tím Sonatype zistil, že táto zraniteľnosť bola zavedená vo verzii 3.0.2.RELEASE a nie vo verzii 5.0.x, ako sa uvádza v odporúčaní.“

CVE-2013 6429,
-
-
stredná
TRUE

CVE-2014 0054,
-
CVE-2014 0054,
stredná
TRUE

CVE-2013 6430,
-
-
stredná
TRUE

jarný kontext:3.0.5
CVE-2011 2894,
komponent sa nenašiel
-
stredná
TRUE

jadro pružiny: 3.0.5
-
CVE-2011 2730,
CVE-2011 2730,
vysoký
TRUE

CVE-2011 2894,
CVE-2011 2894,
CVE-2011 2894,
stredná
TRUE

-
-
CVE-2013 4152,
stredná
FALSE
Duplikát rovnakej zraniteľnosti v spring-webe

-
CVE-2013 4152,
-
stredná
FALSE
Zraniteľnosť sa týka komponentu pružiny

-
CVE-2013 6429,
CVE-2013 6429,
stredná
FALSE
Zraniteľnosť sa týka komponentu pružiny

-
CVE-2013 6430,
-
stredná
FALSE
Zraniteľnosť sa týka komponentu pružiny

-
CVE-2013 7315,
CVE-2013 7315,
stredná
FALSE
SPLIT z CVE-2013-4152. + Zraniteľnosť sa týka komponentu spring-web

-
CVE-2014 0054,
CVE-2014 0054,
stredná
FALSE
Zraniteľnosť sa týka komponentu pružiny

-
CVE-2014 0225,
-
vysoký
FALSE
Zraniteľnosť sa týka komponentu pružiny

-
-
CVE-2014 0225,
vysoký
FALSE
Duplikát rovnakej zraniteľnosti v spring-webe

-
CVE-2014 1904,
CVE-2014 1904,
stredná
FALSE
Zraniteľnosť sa týka komponentu spring-web-mvc

-
CVE-2014 3625,
CVE-2014 3625,
stredná
FALSE
Zraniteľnosť sa týka komponentu spring-web-mvc

-
CVE-2016 9878,
CVE-2016 9878,
vysoký
FALSE
Zraniteľnosť sa týka komponentu spring-web-mvc

-
CVE-2018 1270,
CVE-2018 1270,
vysoký
FALSE
Pre jarné výrazy/jarné správy

-
CVE-2018 1271,
CVE-2018 1271,
stredná
FALSE
Zraniteľnosť sa týka komponentu spring-web-mvc

-
CVE-2018 1272,
CVE-2018 1272,
vysoký
TRUE

CVE-2014 3578,
CVE-2014-3578 (OSSINDEX)
CVE-2014 3578,
stredná
TRUE

SONATYPE-2015-0327
-
-
Nízky
TRUE

struts2-config-browser-plugin:2.3.30
SONATYPE-2016-0104
-
-
stredná
TRUE

spring-tx: 3.0.5
-
CVE-2011 2730,
-
vysoký
FALSE
Zraniteľnosť nie je špecifická pre spring-tx

-
CVE-2011 2894,
-
vysoký
FALSE
Zraniteľnosť nie je špecifická pre spring-tx

-
CVE-2013 4152,
-
stredná
FALSE
Zraniteľnosť nie je špecifická pre spring-tx

-
CVE-2013 6429,
-
stredná
FALSE
Zraniteľnosť nie je špecifická pre spring-tx

-
CVE-2013 6430,
-
stredná
FALSE
Zraniteľnosť nie je špecifická pre spring-tx

-
CVE-2013 7315,
-
stredná
FALSE
Zraniteľnosť nie je špecifická pre spring-tx

-
CVE-2014 0054,
-
stredná
FALSE
Zraniteľnosť nie je špecifická pre spring-tx

-
CVE-2014 0225,
-
vysoký
FALSE
Zraniteľnosť nie je špecifická pre spring-tx

-
CVE-2014 1904,
-
stredná
FALSE
Zraniteľnosť nie je špecifická pre spring-tx

-
CVE-2014 3625,
-
stredná
FALSE
Zraniteľnosť nie je špecifická pre spring-tx

-
CVE-2016 9878,
-
vysoký
FALSE
Zraniteľnosť nie je špecifická pre spring-tx

-
CVE-2018 1270,
-
vysoký
FALSE
Zraniteľnosť nie je špecifická pre spring-tx

-
CVE-2018 1271,
-
stredná
FALSE
Zraniteľnosť nie je špecifická pre spring-tx

-
CVE-2018 1272,
-
stredná
FALSE
Zraniteľnosť nie je špecifická pre spring-tx

vzpery-jadro:1.3.8
-
CVE-2011-5057 (OSSINDEX)

stredná
FASLE
Zraniteľnosť voči Struts 2

-
CVE-2012-0391 (OSSINDEX)
CVE-2012 0391,
vysoký
FALSE
Zraniteľnosť voči Struts 2

-
CVE-2014-0094 (OSSINDEX)
CVE-2014 0094,
stredná
FALSE
Zraniteľnosť voči Struts 2

-
CVE-2014-0113 (OSSINDEX)
CVE-2014 0113,
vysoký
FALSE
Zraniteľnosť voči Struts 2

CVE-2016 1182,
3VE-2016-1182
-
vysoký
TRUE

-
-
CVE-2011 5057,
stredná
FALSE
Zraniteľnosť voči Struts 2

-
CVE-2012-0392 (OSSINDEX)
CVE-2012 0392,
vysoký
FALSE
Zraniteľnosť voči Struts 2

-
CVE-2012-0393 (OSSINDEX)
CVE-2012 0393,
stredná
FALSE
Zraniteľnosť voči Struts 2

CVE-2015 0899,
CVE-2015 0899,
-
vysoký
TRUE

-
CVE-2012 0394,
CVE-2012 0394,
stredná
FALSE
Zraniteľnosť voči Struts 2

-
CVE-2012-0838 (OSSINDEX)
CVE-2012 0838,
vysoký
FALSE
Zraniteľnosť voči Struts 2

-
CVE-2013-1965 (OSSINDEX)
CVE-2013 1965,
vysoký
FALSE
Zraniteľnosť voči Struts 2

-
CVE-2013-1966 (OSSINDEX)
CVE-2013 1966,
vysoký
FASLE
Zraniteľnosť voči Struts 2

-
CVE-2013 2115,
CVE-2013 2115,
vysoký
FASLE
Zraniteľnosť voči Struts 2

-
CVE-2013-2134 (OSSINDEX)
CVE-2013 2134,
vysoký
FASLE
Zraniteľnosť voči Struts 2

-
CVE-2013-2135 (OSSINDEX)
CVE-2013 2135,
vysoký
FASLE
Zraniteľnosť voči Struts 2

CVE-2014 0114,
CVE-2014 0114,
-
vysoký
TRUE

-
CVE-2015 2992,
CVE-2015 2992,
stredná
FALSE
Zraniteľnosť voči Struts 2

-
CVE-2016-0785 (OSSINDEX)
CVE-2016 0785,
vysoký
FALSE
Zraniteľnosť voči Struts 2

CVE-2016 1181,
CVE-2016 1181,
-
vysoký
TRUE

-
CVE-2016-4003 (OSSINDEX)
CVE-2016 4003,
vysoký
FALSE
Zraniteľnosť voči Struts 2

xwork-core: 2.3.30
CVE-2017 9804,
-
-
vysoký
TRUE

SONATYPE-2017-0173
-
-
vysoký
TRUE

CVE-2017 7672,
-
-
vysoký
FALSE
Duplikát CVE-2017-9804

SONATYPE-2016-0127
-
-
vysoký
TRUE

vzpery2-jadro: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ý
FALSE
Duplikát CVE-2018-1327

-
CVE-2017 9804,
-
vysoký
TRUE

-
CVE-2017 9805,
CVE-2017 9805,
vysoký
TRUE

CVE-2016 4003,
-
-
stredná
FALSE
Použiteľné pre Apache Struts 2.x až 2.3.28, čo je verzia 2.3.30. Avšak na základe popisu je CVE platný pre akúkoľvek verziu Struts 2, ak sa používa JRE 1.7 alebo menej. Zrejme sa nás tu rozhodli prepoistiť, ale vyzerá to skôr na FALSE

-
CVE-2018 1327,
CVE-2018 1327,
vysoký
TRUE

CVE-2017 5638,
CVE-2017 5638,
CVE-2017 5638,
vysoký
TRUE
Rovnaká zraniteľnosť, ktorú hackeri Equifax využili v roku 2017

CVE-2017 12611,
CVE-2017 12611,
-
vysoký
TRUE

CVE-2018 11776,
CVE-2018 11776,
CVE-2018 11776,
vysoký
TRUE

vzpery-taglib:1.3.8
-
CVE-2012 0394,
-
stredná
FALSE
Pre vzpery 2-jadrové

-
CVE-2013 2115,
-
vysoký
FALSE
Pre vzpery 2-jadrové

-
CVE-2014 0114,
-
vysoký
FALSE
Pre commons-beanutils

-
CVE-2015 0899,
-
vysoký
FALSE
Nevzťahuje sa na taglib

-
CVE-2015 2992,
-
stredná
FALSE
Vzťahuje sa na vzpery s 2 jadrami

-
CVE-2016 1181,
-
vysoký
FALSE
Nevzťahuje sa na taglib

-
CVE-2016 1182,
-
vysoký
FALSE
Nevzťahuje sa na taglib

vzpery-dlaždice-1.3.8
-
CVE-2012 0394,
-
stredná
FALSE
Pre vzpery 2-jadrové

-
CVE-2013 2115,
-
vysoký
FALSE
Pre vzpery 2-jadrové

-
CVE-2014 0114,
-
vysoký
FALSE
Pod commons-beanutils

-
CVE-2015 0899,
-
vysoký
FALSE
Neplatí pre dlaždice

-
CVE-2015 2992,
-
stredná
FALSE
Pre vzpery 2-jadrové

-
CVE-2016 1181,
-
vysoký
FALSE
Nevzťahuje sa na taglib

-
CVE-2016 1182,
-
vysoký
FALSE
Nevzťahuje sa na taglib

Zdroj: hab.com

Pridať komentár