DevSecOps: principi rada i poređenje SCA. Prvi dio

Značaj analize softverskih komponenti trećih strana (Software Composition Analysis - SCA) u procesu razvoja raste objavljivanjem godišnjih izvještaja o ranjivosti biblioteka otvorenog koda, koje objavljuju Synopsys, Sonatype, Snyk i White Source. . Prema izvještaju Stanje sigurnosnih ranjivosti otvorenog koda 2020 broj identifikovanih ranjivosti otvorenog koda u 2019. godini porastao je skoro 1.5 puta u odnosu na prethodnu godinu, dok komponente otvorenog koda koristi 60% do 80% projekata. Na nezavisnoj osnovi, SCA procesi su zasebna praksa OWASP SAMM-a i BSIMM-a kao indikatora zrelosti, a u prvoj polovini 2020. godine, OWASP je objavio novi OWASP Standard za verifikaciju softverskih komponenti (SCVS), pružajući najbolje prakse za verifikaciju treće- partijske komponente u lancu opskrbe BY.

DevSecOps: principi rada i poređenje SCA. Prvi dio

Jedan od najilustrativnijih slučajeva dogodilo sa Equifaxom u maju 2017. Nepoznati napadači su došli do podataka o 143 miliona Amerikanaca, uključujući puna imena, adrese, brojeve socijalnog osiguranja i vozačke dozvole. U 209 slučajeva dokumenti su uključivali i podatke o bankovnim karticama žrtava. Ovo curenje se dogodilo kao rezultat eksploatacije kritične ranjivosti u Apache Struts 000 (CVE-2-2017), dok je popravka objavljena još u martu 5638. Kompanija je imala dva mjeseca da instalira ažuriranje, ali se niko nije zamarao time.

U ovom članku će se raspravljati o pitanju izbora alata za provođenje SCA sa stanovišta kvaliteta rezultata analize. Također će biti pružena funkcionalna usporedba alata. Proces integracije u CI/CD i integracijske mogućnosti biće ostavljeni za naredne publikacije. OWASP je predstavio širok spektar alata na vašoj web stranici, ali u trenutnoj recenziji ćemo se dotaknuti samo najpopularnijeg open source alata Dependency Check, malo manje poznate open source platforme Dependency Track i Enterprise rješenja Sonatype Nexus IQ. Također ćemo razumjeti kako ova rješenja funkcionišu i uporediti rezultate dobijene za lažne pozitivne rezultate.

DevSecOps: principi rada i poređenje SCA. Prvi dio

Kako to radi

Provjera zavisnosti je uslužni program (CLI, maven, jenkins modul, ant) ​​koji analizira projektne datoteke, prikuplja dijelove informacija o ovisnostima (naziv paketa, groupid, naslov specifikacije, verzija...), gradi CPE (Common Platform Enumeration) liniju , URL paketa (PURL) i identifikuje ranjivosti za CPE/PURL iz baza podataka (NVD, Sonatype OSS Index, NPM Audit API...), nakon čega gradi jednokratni izvještaj u HTML, JSON, XML formatu...

Pogledajmo kako CPE izgleda:

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

  • Dio: Indikacija da se komponenta odnosi na aplikaciju (a), operativni sistem (o), hardver (h) (obavezno)
  • Prodavac: Naziv proizvođača proizvoda (obavezno)
  • proizvod: Naziv proizvoda (obavezno)
  • verzija: Verzija komponente (zastarjela stavka)
  • update: Ažuriranje paketa
  • Izdanje: Naslijeđena verzija (zastarjela stavka)
  • Jezik: Jezik definiran u RFC-5646
  • SW izdanje: Verzija softvera
  • Cilj SW: Softversko okruženje u kojem proizvod radi
  • Target HW: Hardversko okruženje u kojem proizvod radi
  • Ostalo: Informacije o dobavljaču ili proizvodu

Primjer CPE izgleda ovako:

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

Linija znači da CPE verzija 2.3 opisuje komponentu aplikacije proizvođača pivotal_software sa naslovom spring_framework verzija 3.0.0. Ako otvorimo ranjivost CVE-2014-0225 u NVD, možemo vidjeti spominjanje ovog CPE. Prvi problem na koji treba odmah obratiti pažnju je da CVE u NVD, prema CPE, prijavljuje problem u okviru, a ne u određenoj komponenti. Odnosno, ako su programeri čvrsto vezani za okvir, a identificirana ranjivost ne utječe na one module koje programeri koriste, stručnjak za sigurnost će na ovaj ili onaj način morati rastaviti ovaj CVE i razmisliti o ažuriranju.

URL također koriste SCA alati. Format URL-a paketa je sljedeći:

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

  • Šema: Uvijek će postojati 'pkg' koji označava da je ovo URL paketa (obavezno)
  • Tip: "Tip" paketa ili "protokol" paketa, kao što su maven, npm, nuget, gem, pypi, itd. (obavezna stavka)
  • Prostor imena: Neki prefiks imena, kao što je ID grupe Maven, vlasnik Docker slike, korisnik GitHub-a ili organizacija. Opciono i zavisi od vrste.
  • ime: Naziv paketa (obavezno)
  • verzija: Verzija paketa
  • kvalifikacije: Dodatni kvalifikacioni podaci za paket, kao što su OS, arhitektura, distribucija, itd. Opciono i specifično za tip.
  • Subpath: Dodatna putanja u paketu u odnosu na korijen paketa

Na primjer:

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

Dependency Track — on-premise web platforma koja prihvata generisanu gotovu Bill of Materials (BOM). CycloneDX и SPDX, odnosno gotove specifikacije o postojećim zavisnostima. Ovo je XML fajl koji opisuje zavisnosti - ime, heš, URL paketa, izdavač, licenca. Zatim Dependency Track analizira BOM, pregleda CVE-ove dostupne identifikovanim zavisnostima iz baze podataka ranjivosti (NVD, Sonatype OSS Index...), nakon čega gradi grafikone, izračunava metriku, redovno ažurira podatke o statusu ranjivosti komponenti. .

Primjer kako bi BOM mogao izgledati u XML formatu:

<?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>

BOM se može koristiti ne samo kao ulazni parametri za Dependency Track, već i za inventarizaciju softverskih komponenti u lancu snabdevanja, na primer, za obezbeđivanje softvera kupcu. 2014. je čak predložen zakon u Sjedinjenim Državama „Zakon o upravljanju i transparentnosti sajber lanca snabdevanja iz 2014., koji je naveo da prilikom kupovine softvera, bilo koja dr. Institucija mora zatražiti BOM kako bi spriječila korištenje ranjivih komponenti, ali zakon još nije stupio na snagu.

Vraćajući se na SCA, Dependency Track ima gotove integracije sa platformama za obaveštenja kao što je Slack, sistemima za upravljanje ranjivostima kao što je Kenna Security. Također je vrijedno reći da Dependency Track, između ostalog, identificira zastarjele verzije paketa i pruža informacije o licencama (zbog podrške za SPDX).

Ako govorimo konkretno o kvaliteti SCA, onda postoji suštinska razlika.

Dependency Track ne prihvata projekat kao ulaz, već BOM. To znači da ako želimo testirati projekat, prvo moramo generirati bom.xml, na primjer koristeći CycloneDX. Dakle, Dependency Track direktno zavisi od CycloneDX. Istovremeno, omogućava prilagođavanje. Ovo je napisao OZON tim CycloneDX modul za sastavljanje BOM fajlova za Golang projekte za dalje skeniranje kroz Dependency Track.

Nexus IQ je komercijalno SCA rješenje kompanije Sonatype, koje je dio Sonatype ekosistema, koji također uključuje Nexus Repository Manager. Nexus IQ može prihvatiti kao ulaz i ratne arhive (za java projekte) preko web sučelja ili API-ja i BOM, ako vaša organizacija još nije prešla sa CycloneDX na novo rješenje. Za razliku od rješenja otvorenog koda, IQ se ne odnosi samo na CP/PURL na identificiranu komponentu i odgovarajuću ranjivost u bazi podataka, već uzima u obzir i vlastito istraživanje, na primjer, naziv ranjive funkcije ili klase. O mehanizmima koeficijenta inteligencije biće reči kasnije u analizi rezultata.

Hajde da sumiramo neke od funkcionalnih karakteristika, a takođe razmotrimo podržane jezike za analizu:

Jezik
Nexus IQ
Provjera zavisnosti
Dependency Track

Java
+
+
+

C / C ++
+
+
-

C#
+
+
-

.Net
+
+
+

erlang
-
-
+

JavaScript (NodeJS)
+
+
+

PHP
+
+
+

piton
+
+
+

Rubin
+
+
+

Perl
-
-
-

Scala
+
+
+

Cilj C
+
+
-

brz
+
+
-

R
+
-
-

Go
+
+
+

Funkcionalnost

Funkcionalnost
Nexus IQ
Provjera zavisnosti
Dependency Track

Mogućnost da se osigura da su komponente korištene u izvornom kodu provjerene na licenciranu čistoću
+
-
+

Mogućnost skeniranja i analiziranja ranjivosti i čistoće licence za Docker slike
+ Integracija sa Clair
-
-

Mogućnost konfigurisanja sigurnosnih politika za korištenje biblioteka otvorenog koda
+
-
-

Mogućnost skeniranja spremišta otvorenog koda u potrazi za ranjivim komponentama
+ RubyGems, Maven, NPM, Nuget, Pypi, Conan, Bower, Conda, Go, p2, R, Yum, Helm, Docker, CocoaPods, Git LFS
-
+ Hex, RubyGems, Maven, NPM, Nuget, Pypi

Dostupnost specijalizirane istraživačke grupe
+
-
-

Rad u zatvorenoj petlji
+
+
+

Korištenje baza podataka trećih strana
+ Zatvorena Sonatype baza podataka
+ Sonatype OSS, NPM javni savjetnici
+ Sonatype OSS, NPM Public Advisors, RetireJS, VulnDB, podrška za vlastitu bazu podataka ranjivosti

Mogućnost filtriranja komponenti otvorenog koda pri pokušaju učitavanja u razvojnu petlju prema konfiguriranim politikama
+
-
-

Preporuke za ispravljanje ranjivosti, dostupnost linkova za popravke
+
+- (zavisi od opisa u javnim bazama podataka)
+- (zavisi od opisa u javnim bazama podataka)

Rangiranje otkrivenih ranjivosti prema ozbiljnosti
+
+
+

Model pristupa zasnovan na ulozi
+
-
+

CLI podrška
+
+
+- (samo za CycloneDX)

Uzorkovanje/sortiranje ranjivosti prema definisanim kriterijumima
+
-
+

Kontrolna tabla prema statusu aplikacije
+
-
+

Izrada izvještaja u PDF formatu
+
-
-

Generisanje izveštaja u JSONCSV formatu
+
+
-

Podrška za ruski jezik
-
-
-

Integracijske mogućnosti

Integracija
Nexus IQ
Provjera zavisnosti
Dependency Track

LDAP/Active Directory integracija
+
-
+

Integracija sa sistemom kontinuirane integracije Bamboo
+
-
-

Integracija sa sistemom kontinuirane integracije TeamCity
+
-
-

Integracija sa sistemom kontinuirane integracije GitLab
+
+- (kao dodatak za GitLab)
+

Integracija sa sistemom kontinuirane integracije Jenkins
+
+
+

Dostupnost dodataka za IDE
+ IntelliJ, Eclipse, Visual Studio
-
-

Podrška za prilagođenu integraciju putem web-servisa (API) alata
+
-
+

Provjera zavisnosti

Prvi početak

Pokrenimo Provjeru zavisnosti na namjerno ranjivoj aplikaciji DVJA.

Za ovo ćemo koristiti Maven dodatak za provjeru zavisnosti:

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

Kao rezultat, ovisnost-check-report.html će se pojaviti u ciljnom direktoriju.

DevSecOps: principi rada i poređenje SCA. Prvi dio

Hajde da otvorimo fajl. Nakon sažetih informacija o ukupnom broju ranjivosti, možemo vidjeti informacije o ranjivosti sa visokim nivoom ozbiljnosti i pouzdanosti, s naznakom paketa, CPE-a i broja CVE-ova.

Slede detaljnije informacije, posebno na osnovu kojih je doneta odluka (dokazi), odnosno određeni BOM.

DevSecOps: principi rada i poređenje SCA. Prvi dio

Zatim slijedi CPE, PURL i CVE opis. Inače, preporuke za korekciju nisu uključene zbog njihovog odsustva u bazi podataka NVD.

DevSecOps: principi rada i poređenje SCA. Prvi dio

Da biste sistematski pregledali rezultate skeniranja, možete konfigurirati Nginx s minimalnim postavkama ili poslati rezultirajuće nedostatke sistemu za upravljanje defektima koji podržava konektore za provjeru zavisnosti. Na primjer, Defect Dojo.

Dependency Track

postavljanje

Dependency Track je, zauzvrat, web-bazirana platforma sa prikaznim grafovima, tako da se ovdje ne pojavljuje goruće pitanje pohranjivanja defekata u rješenje treće strane.
Podržane skripte za instalaciju su: Docker, WAR, Executable WAR.

Prvi početak

Idemo na URL pokrenute usluge. Prijavljujemo se preko admin/admin, mijenjamo login i lozinku, a zatim dolazimo na Dashboard. Sljedeće što ćemo uraditi je kreirati projekat za testnu aplikaciju u Javi Početna/Projekti → Kreiraj projekat . Uzmimo DVJA kao primjer.

DevSecOps: principi rada i poređenje SCA. Prvi dio

Budući da praćenje zavisnosti može prihvatiti samo BOM kao ulaz, ovaj BOM se mora dohvatiti. Hajde da iskoristimo prednost CycloneDX Maven dodatak:

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

Dobijamo bom.xml i učitavamo fajl u kreirani projekat DVJA → Zavisnosti → Prenesi BOM.

Idemo na Administracija → Analizatori. Razumijemo da imamo samo omogućen interni analizator, koji uključuje NVD. Povežimo i Sonatype OSS Index.

DevSecOps: principi rada i poređenje SCA. Prvi dio

Tako dobijamo sledeću sliku za naš projekat:

DevSecOps: principi rada i poređenje SCA. Prvi dio

Također na listi možete pronaći jednu ranjivost primjenjivu na Sonatype OSS:

DevSecOps: principi rada i poređenje SCA. Prvi dio

Glavno razočaranje je bilo to što Dependency Track više ne prihvata xml izvještaje Provjere zavisnosti. Najnovije podržane verzije integracije Provjere zavisnosti bile su 1.0.0 - 4.0.2, dok sam ja testirao 5.3.2.

ovdje видео (i Evo) kada je to još bilo moguće.

Nexus IQ

Prvi početak

Instalacija Nexus IQ dolazi iz arhive dokumentaciju, ali smo napravili Docker sliku za ove svrhe.

Nakon što se prijavite na konzolu, morate kreirati organizaciju i aplikaciju.

DevSecOps: principi rada i poređenje SCA. Prvi dio

DevSecOps: principi rada i poređenje SCA. Prvi dio

DevSecOps: principi rada i poređenje SCA. Prvi dio

Kao što možete vidjeti, podešavanje u slučaju IQ-a je nešto složenije, jer također moramo kreirati politike koje su primjenjive za različite “faze” (dev, build, stage, release). Ovo je neophodno da bi se blokirale ranjive komponente dok se kreću kroz cevovod bliže proizvodnji ili da bi se blokirale čim uđu u Nexus Repo kada ih preuzmu programeri.

Da biste osjetili razliku između otvorenog koda i preduzeća, izvršimo isto skeniranje kroz Nexus IQ na isti način kroz Maven dodatak, nakon što je prethodno kreirao testnu aplikaciju u NexusIQ interfejsu 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>

Pratite URL do generiranog izvještaja u IQ web sučelju:

DevSecOps: principi rada i poređenje SCA. Prvi dio

Ovdje možete vidjeti sva kršenja pravila koja ukazuju na različite nivoe značaja (od informacija do kritičnih za sigurnost). Slovo D pored komponente znači da je komponenta direktna zavisnost, a slovo T pored komponente znači da je komponenta tranzitivna zavisnost, odnosno da je tranzitivna.

Usput, izvještaj Izvještaj o stanju sigurnosti otvorenog koda 2020 iz Snyk-a izvještava da je više od 70% ranjivosti otvorenog koda otkrivenih u Node.js, Javi i Rubyju u tranzitivnim ovisnostima.

Ako otvorimo jedno od kršenja Nexus IQ pravila, možemo vidjeti opis komponente, kao i Version Graph, koji prikazuje lokaciju trenutne verzije na vremenskom grafikonu, kao i u kom trenutku ranjivost prestaje da se javlja biti ranjiv. Visina svijeća na grafikonu pokazuje popularnost korištenja ove komponente.

DevSecOps: principi rada i poređenje SCA. Prvi dio

Ako odete u sekciju ranjivosti i proširite CVE, možete pročitati opis ove ranjivosti, preporuke za eliminaciju, kao i razlog zašto je ova komponenta prekršena, odnosno prisustvo klase DiskFileitem.class.

DevSecOps: principi rada i poređenje SCA. Prvi dio

DevSecOps: principi rada i poređenje SCA. Prvi dio

Hajde da sumiramo samo one koje se odnose na Java komponente treće strane, uklanjajući js komponente. U zagradama navodimo broj ranjivosti koje su pronađene izvan NVD-a.

Ukupan Nexus IQ:

  • Skenirane ovisnosti: 62
  • Ranjive zavisnosti: 16
  • Pronađene ranjivosti: 42 (8 sonatype db)

Potpuna provjera ovisnosti:

  • Skenirane ovisnosti: 47
  • Ranjive zavisnosti: 13
  • Pronađene ranjivosti: 91 (14 sonatype oss)

Totalna evidencija zavisnosti:

  • Skenirane ovisnosti: 59
  • Ranjive zavisnosti: 10
  • Pronađene ranjivosti: 51 (1 sonatype oss)

U narednim koracima analiziraćemo dobijene rezultate i utvrditi koja od ovih ranjivosti je pravi nedostatak, a koja lažno pozitivna.

Odricanje od odgovornosti

Ova recenzija nije neosporna istina. Autor nije imao za cilj da izdvoji poseban instrument na pozadini drugih. Poenta pregleda je bila da se pokažu mehanizmi rada SCA alata i načini provjere njihovih rezultata.

Poređenje rezultata

Uslovi:

Lažno pozitivan za ranjivost komponenti treće strane je:

  • CVE neusklađenost sa identifikovanom komponentom
  • Na primjer, ako je ranjivost identificirana u okviru struts2, a alat ukazuje na komponentu okvira struts-tiles, na koju se ova ranjivost ne odnosi, onda je to lažno pozitivno
  • CVE neusklađenost sa identifikovanom verzijom komponente
  • Na primjer, ranjivost je vezana za Python verziju > 3.5 i alat označava verziju 2.7 kao ranjivu - ovo je lažno pozitivno, budući da se ranjivost u stvari odnosi samo na granu proizvoda 3.x
  • Duplikat CVE
  • Na primjer, ako SCA specificira CVE koji omogućava RCE, tada SCA specificira CVE za istu komponentu koja se primjenjuje na Cisco proizvode na koje utiče taj RCE. U ovom slučaju će biti lažno pozitivan.
  • Na primjer, CVE je pronađen u komponenti spring-web, nakon čega SCA ukazuje na isti CVE u drugim komponentama Spring Frameworka, dok CVE nema nikakve veze sa drugim komponentama. U ovom slučaju će biti lažno pozitivan.

Predmet istraživanja bio je Open Source projekat DVJA. Studija je uključivala samo java komponente (bez js-a).

Rezime rezultata

Idemo direktno na rezultate ručnog pregleda identifikovanih ranjivosti. Kompletan izvještaj za svaki CVE može se naći u Dodatku.

Rezime rezultata za sve ranjivosti:

Parametar
Nexus IQ
Provjera zavisnosti
Dependency Track

Ukupne identifikovane ranjivosti
42
91
51

Pogrešno identifikovane ranjivosti (lažno pozitivne)
2 (4.76%)
62 (68,13%)
29 (56.86%)

Nisu pronađene relevantne ranjivosti (lažno negativno)
10
20
27

Rezime rezultata po komponentama:

Parametar
Nexus IQ
Provjera zavisnosti
Dependency Track

Ukupno identifikovane komponente
62
47
59

Ukupno ranjive komponente
16
13
10

Pogrešno identificirane ranjive komponente (lažno pozitivno)
1
5
0

Pogrešno identificirane ranjive komponente (lažno pozitivno)
0
6
6

Napravimo vizuelne grafikone za procjenu omjera lažno pozitivnih i lažno negativnih prema ukupnom broju ranjivosti. Komponente su označene horizontalno, a ranjivosti identifikovane u njima su označene vertikalno.

DevSecOps: principi rada i poređenje SCA. Prvi dio

DevSecOps: principi rada i poređenje SCA. Prvi dio

DevSecOps: principi rada i poređenje SCA. Prvi dio

Poređenja radi, sličnu studiju proveo je tim Sonatype testirajući projekat od 1531 komponente koristeći OWASP Dependency Check. Kao što vidimo, odnos buke i tačnih odgovora je uporediv sa našim rezultatima.

DevSecOps: principi rada i poređenje SCA. Prvi dio
izvor: www.sonatype.com/why-precision-matters-ebook

Pogledajmo neke CVE-ove iz naših rezultata skeniranja da bismo razumjeli razlog za ove rezultate.

Pročitajte više

No.1

Hajde da prvo pogledamo neke zanimljive tačke o Sonatype Nexus IQ.

Nexus IQ ukazuje na problem sa deserijalizacijom sa mogućnošću izvođenja RCE-a u Spring Framework-u više puta. CVE-2016-1000027 u spring-web:3.0.5 prvi put, i CVE-2011-2894 u spring-context:3.0.5 i spring-core:3.0.5. U početku se čini da postoji dupliciranje ranjivosti u više CVE-ova. Jer, ako pogledate CVE-2016-1000027 i CVE-2011-2894 u bazi podataka NVD-a, čini se da je sve očigledno

Komponenta
Ranjivost

spring-web:3.0.5
CVE-2016-1000027

spring-context:3.0.5
CVE-2011-2894

spring-core:3.0.5
CVE-2011-2894

Opis CVE-2011-2894 od NVD:
DevSecOps: principi rada i poređenje SCA. Prvi dio

Opis CVE-2016-1000027 od NVD:
DevSecOps: principi rada i poređenje SCA. Prvi dio

Sam CVE-2011-2894 je prilično poznat. U izvještaju Bijeli izvor 2011 ovaj CVE je prepoznat kao jedan od najčešćih. Opisa za CVE-2016-100027, u principu, ima malo u NVD-u, i čini se da je primenljiv samo za Spring Framework 4.1.4. Hajde da pogledamo upućivanje i tu sve postaje manje-više jasno. Od Održivi članci Razumijemo da pored ranjivosti u RemoteInvocationSerializingExporter u CVE-2011-2894, ranjivost je uočena u HttpInvokerServiceExporter. Evo šta nam Nexus IQ kaže:

DevSecOps: principi rada i poređenje SCA. Prvi dio

Međutim, u NVD-u ne postoji ništa slično, zbog čega Provjera zavisnosti i Praćenje zavisnosti dobijaju lažno negativne.

Takođe iz opisa CVE-2011-2894 može se shvatiti da je ranjivost zaista prisutna iu spring-context:3.0.5 i spring-core:3.0.5. Potvrdu za to možete pronaći u članku osobe koja je pronašla ovu ranjivost.

No.2

Komponenta
Ranjivost
rezultat

struts2-core:2.3.30
CVE-2016-4003
FALSE

Ako proučimo ranjivost CVE-2016-4003, shvatit ćemo da je popravljena u verziji 2.3.28, međutim, Nexus IQ nam to prijavljuje. U opisu ranjivosti postoji napomena:

DevSecOps: principi rada i poređenje SCA. Prvi dio

Odnosno, ranjivost postoji samo u kombinaciji sa zastarjelom verzijom JRE-a, na koju su nas odlučili upozoriti. Ipak, ovo smatramo lažno pozitivnim, iako ne najgorim.

3

Komponenta
Ranjivost
rezultat

xwork-core:2.3.30
CVE-2017-9804
ISTINITO

xwork-core:2.3.30
CVE-2017-7672
FALSE

Ako pogledamo opise CVE-2017-9804 i CVE-2017-7672, shvatit ćemo da je problem URLValidator class, sa CVE-2017-9804 koji potiče iz CVE-2017-7672. Prisustvo druge ranjivosti ne nosi nikakvo korisno opterećenje osim činjenice da je njena ozbiljnost porasla na Visoku, tako da je možemo smatrati nepotrebnom bukom.

Sve u svemu, nisu pronađeni drugi lažno pozitivni rezultati za Nexus IQ.

No.4

Postoji nekoliko stvari koje IQ izdvajaju od ostalih rješenja.

Komponenta
Ranjivost
rezultat

spring-web:3.0.5
CVE-2020-5398
ISTINITO

CVE u NVD navodi da se odnosi samo na verzije 5.2.x prije 5.2.3, 5.1.x prije 5.1.13 i verzije 5.0.x prije 5.0.16, međutim, ako pogledamo CVE opis u Nexus IQ , tada ćemo vidjeti sljedeće:
Savjetodavna obavijest o odstupanju: Tim za istraživanje sigurnosti Sonatype otkrio je da je ova ranjivost uvedena u verziji 3.0.2.RELEASE, a ne u 5.0.x kao što je navedeno u upozorenju.

Nakon toga slijedi PoC za ovu ranjivost, u kojoj se navodi da je prisutna u verziji 3.0.5.

Lažno negativan se šalje u provjeru zavisnosti i praćenje zavisnosti.

No.5

Pogledajmo lažno pozitivan rezultat za provjeru zavisnosti i praćenje zavisnosti.

Provjera zavisnosti ističe se po tome što odražava one CVE-ove koji se primjenjuju na cijeli okvir u NVD-u na one komponente na koje se ovi CVE-i ne odnose. Ovo se odnosi na CVE-2012-0394, CVE-2013-2115, CVE-2014-0114, CVE-2015-0899, CVE-2015-2992, CVE-2016-1181, CVE-2016-1182, što je Dewpendency up ” na struts-taglib:1.3.8 i struts-tiles-1.3.8. Ove komponente nemaju nikakve veze s onim što je opisano u CVE-u - obrada zahtjeva, provjera valjanosti stranice i tako dalje. Ovo je zbog činjenice da je ono što je zajedničko ovim CVE-ovima i komponentama samo okvir, zbog čega je Dependency Check to smatrao ranjivom.

Ista situacija je sa spring-tx:3.0.5, a slična situacija sa struts-core:1.3.8. Za struts-core, Dependency Check i Dependency Track su pronašli mnogo ranjivosti koje su zapravo primjenjive na struts2-core, što je u suštini zaseban okvir. U ovom slučaju, Nexus IQ je ispravno shvatio sliku iu CVE-ovima koje je izdao je naznačilo da je struts-core došao do kraja života i da je potrebno preći na struts2-core.

No.6

U nekim situacijama, nepravedno je tumačiti očiglednu grešku Provjere zavisnosti i Praćenja zavisnosti. Konkretno, CVE-2013-4152, CVE-2013-6429, CVE-2013-6430, CVE-2013-7315, CVE-2014-0054, CVE-2014-0225, CVE-2014-0225 i Provjera ovisnosti pripisano spring-core:3.0.5 zapravo pripada spring-web:3.0.5. U isto vrijeme, neke od ovih CVE-ova je također pronašao Nexus IQ, međutim, IQ ih je ispravno identificirao u drugoj komponenti. Budući da ove ranjivosti nisu pronađene u spring jezgru, ne može se tvrditi da one nisu u okvirima u principu i open source alati su s pravom ukazali na ove ranjivosti (samo im je malo nedostajalo).

nalazi

Kao što vidimo, određivanje pouzdanosti identifikovanih ranjivosti ručnim pregledom ne daje jednoznačne rezultate, zbog čega se javljaju kontroverzna pitanja. Rezultati su da Nexus IQ rješenje ima najmanju stopu lažnih pozitivnih rezultata i najveću preciznost.

Prije svega, to je zbog činjenice da je Sonatype tim proširio opis svake CVE ranjivosti iz NVD-a u svojim bazama podataka, navodeći ranjivosti za određenu verziju komponenti sve do klase ili funkcije, provodeći dodatna istraživanja (npr. , provjeravanje ranjivosti na starijim verzijama softvera).

Važan uticaj na rezultate imaju i one ranjivosti koje nisu bile uključene u NVD, ali su ipak prisutne u bazi podataka Sonatype sa oznakom SONATYPE. Prema izvještaju Stanje sigurnosnih ranjivosti otvorenog koda 2020 45% otkrivenih ranjivosti otvorenog koda nije prijavljeno NVD-u. Prema bazi podataka WhiteSource, samo 29% svih ranjivosti otvorenog koda prijavljenih izvan NVD-a završi tamo objavljeno, zbog čega je važno tražiti ranjivosti iu drugim izvorima.

Kao rezultat toga, Dependency Check proizvodi mnogo buke, propuštajući neke ranjive komponente. Dependency Track proizvodi manje šuma i detektuje veliki broj komponenti, što vizuelno ne šteti očima u web interfejsu.

Međutim, praksa pokazuje da bi open source trebao postati prvi korak ka zrelom DevSecOps-u. Prva stvar o kojoj biste trebali razmišljati kada integrirate SCA u razvoj su procesi, odnosno razmišljanje zajedno sa menadžmentom i srodnim odjelima o tome kako bi idealni procesi trebali izgledati u vašoj organizaciji. Može se ispostaviti da će za vašu organizaciju na početku Dependency Check ili Dependency Track pokriti sve poslovne potrebe, a Enterprise rješenja će biti logičan nastavak zbog sve veće složenosti aplikacija koje se razvijaju.

Dodatak A: Rezultati komponenti
Legenda:

  • Visoki—visoki i kritični nivoi ranjivosti u komponenti
  • Srednji — Ranjivosti srednjeg nivoa kritičnosti u komponenti
  • TAČNO — Istina pozitivno pitanje
  • FALSE — Lažno pozitivno pitanje

Komponenta
Nexus IQ
Provjera zavisnosti
Dependency Track
rezultat

dom4j: 1.6.1
visok
visok
visok
ISTINITO

log4j-core: 2.3
visok
visok
visok
ISTINITO

log4j: 1.2.14
visok
visok
-
ISTINITO

Zajedničke kolekcije:3.1
visok
visok
visok
ISTINITO

commons-fileupload:1.3.2
visok
visok
visok
ISTINITO

commons-beanutils:1.7.0
visok
visok
visok
ISTINITO

commons-codec:1:10
srednji
-
-
ISTINITO

mysql-konektor-java:5.1.42
visok
visok
visok
ISTINITO

spring-expression:3.0.5
visok
komponenta nije pronađena

ISTINITO

spring-web:3.0.5
visok
komponenta nije pronađena
visok
ISTINITO

spring-context:3.0.5
srednji
komponenta nije pronađena
-
ISTINITO

spring-core:3.0.5
srednji
visok
visok
ISTINITO

struts2-config-browser-plugin:2.3.30
srednji
-
-
ISTINITO

spring-tx:3.0.5
-
visok
-
FALSE

struts-core:1.3.8
visok
visok
visok
ISTINITO

xwork-core: 2.3.30
visok
-
-
ISTINITO

struts2-core: 2.3.30
visok
visok
visok
ISTINITO

struts-taglib:1.3.8
-
visok
-
FALSE

podupirači-pločice-1.3.8
-
visok
-
FALSE

Dodatak B: Rezultati ranjivosti
Legenda:

  • Visoki—visoki i kritični nivoi ranjivosti u komponenti
  • Srednji — Ranjivosti srednjeg nivoa kritičnosti u komponenti
  • TAČNO — Istina pozitivno pitanje
  • FALSE — Lažno pozitivno pitanje

Komponenta
Nexus IQ
Provjera zavisnosti
Dependency Track
Težina
rezultat
komentar

dom4j: 1.6.1
CVE-2018-1000632
CVE-2018-1000632
CVE-2018-1000632
visok
ISTINITO

CVE-2020-10683
CVE-2020-10683
CVE-2020-10683
visok
ISTINITO

log4j-core: 2.3
CVE-2017-5645
CVE-2017-5645
CVE-2017-5645
visok
ISTINITO

CVE-2020-9488
CVE-2020-9488
CVE-2020-9488
nizak
ISTINITO

log4j: 1.2.14
CVE-2019-17571
CVE-2019-17571
-
visok
ISTINITO

-
CVE-2020-9488
-
nizak
ISTINITO

SONATYPE-2010-0053
-
-
visok
ISTINITO

Zajedničke kolekcije:3.1
-
CVE-2015-6420
CVE-2015-6420
visok
FALSE
Duplikati RCE(OSSINDEX)

-
CVE-2017-15708
CVE-2017-15708
visok
FALSE
Duplikati RCE(OSSINDEX)

SONATYPE-2015-0002
RCE (OSSINDEX)
RCE(OSSINDEX)
visok
ISTINITO

commons-fileupload:1.3.2
CVE-2016-1000031
CVE-2016-1000031
CVE-2016-1000031
visok
ISTINITO

SONATYPE-2014-0173
-
-
srednji
ISTINITO

commons-beanutils:1.7.0
CVE-2014-0114
CVE-2014-0114
CVE-2014-0114
visok
ISTINITO

-
CVE-2019-10086
CVE-2019-10086
visok
FALSE
Ranjivost se odnosi samo na verzije 1.9.2+

commons-codec:1:10
SONATYPE-2012-0050
-
-
srednji
ISTINITO

mysql-konektor-java:5.1.42
CVE-2018-3258
CVE-2018-3258
CVE-2018-3258
visok
ISTINITO

CVE-2019-2692
CVE-2019-2692
-
srednji
ISTINITO

-
CVE-2020-2875
-
srednji
FALSE
Ista ranjivost kao CVE-2019-2692, ali sa napomenom "napadi mogu značajno uticati na dodatne proizvode"

-
CVE-2017-15945
-
visok
FALSE
Nije relevantno za mysql-connector-java

-
CVE-2020-2933
-
nizak
FALSE
Duplikat CVE-2020-2934

CVE-2020-2934
CVE-2020-2934
-
srednji
ISTINITO

spring-expression:3.0.5
CVE-2018-1270
komponenta nije pronađena
-
visok
ISTINITO

CVE-2018-1257
-
-
srednji
ISTINITO

spring-web:3.0.5
CVE-2016-1000027
komponenta nije pronađena
-
visok
ISTINITO

CVE-2014-0225
-
CVE-2014-0225
visok
ISTINITO

CVE-2011-2730
-
-
visok
ISTINITO

-
-
CVE-2013-4152
srednji
ISTINITO

CVE-2018-1272
-
-
visok
ISTINITO

CVE-2020-5398
-
-
visok
ISTINITO
Ilustrativan primjer u korist IQ-a: „Sonatype istraživački tim za sigurnost otkrio je da je ova ranjivost uvedena u verziji 3.0.2.RELEASE, a ne u 5.0.x kako je navedeno u savjetu.“

CVE-2013-6429
-
-
srednji
ISTINITO

CVE-2014-0054
-
CVE-2014-0054
srednji
ISTINITO

CVE-2013-6430
-
-
srednji
ISTINITO

spring-context:3.0.5
CVE-2011-2894
komponenta nije pronađena
-
srednji
ISTINITO

spring-core:3.0.5
-
CVE-2011-2730
CVE-2011-2730
visok
ISTINITO

CVE-2011-2894
CVE-2011-2894
CVE-2011-2894
srednji
ISTINITO

-
-
CVE-2013-4152
srednji
FALSE
Duplikat iste ranjivosti u spring-web

-
CVE-2013-4152
-
srednji
FALSE
Ranjivost se odnosi na komponentu spring-web

-
CVE-2013-6429
CVE-2013-6429
srednji
FALSE
Ranjivost se odnosi na komponentu spring-web

-
CVE-2013-6430
-
srednji
FALSE
Ranjivost se odnosi na komponentu spring-web

-
CVE-2013-7315
CVE-2013-7315
srednji
FALSE
SPLIT iz CVE-2013-4152. + Ranjivost se odnosi na komponentu spring-web

-
CVE-2014-0054
CVE-2014-0054
srednji
FALSE
Ranjivost se odnosi na komponentu spring-web

-
CVE-2014-0225
-
visok
FALSE
Ranjivost se odnosi na komponentu spring-web

-
-
CVE-2014-0225
visok
FALSE
Duplikat iste ranjivosti u spring-web

-
CVE-2014-1904
CVE-2014-1904
srednji
FALSE
Ranjivost se odnosi na komponentu spring-web-mvc

-
CVE-2014-3625
CVE-2014-3625
srednji
FALSE
Ranjivost se odnosi na komponentu spring-web-mvc

-
CVE-2016-9878
CVE-2016-9878
visok
FALSE
Ranjivost se odnosi na komponentu spring-web-mvc

-
CVE-2018-1270
CVE-2018-1270
visok
FALSE
Za prolećni izraz/prolećne poruke

-
CVE-2018-1271
CVE-2018-1271
srednji
FALSE
Ranjivost se odnosi na komponentu spring-web-mvc

-
CVE-2018-1272
CVE-2018-1272
visok
ISTINITO

CVE-2014-3578
CVE-2014-3578 (OSSINDEX)
CVE-2014-3578
srednji
ISTINITO

SONATYPE-2015-0327
-
-
nizak
ISTINITO

struts2-config-browser-plugin:2.3.30
SONATYPE-2016-0104
-
-
srednji
ISTINITO

spring-tx:3.0.5
-
CVE-2011-2730
-
visok
FALSE
Ranjivost nije specifična za spring-tx

-
CVE-2011-2894
-
visok
FALSE
Ranjivost nije specifična za spring-tx

-
CVE-2013-4152
-
srednji
FALSE
Ranjivost nije specifična za spring-tx

-
CVE-2013-6429
-
srednji
FALSE
Ranjivost nije specifična za spring-tx

-
CVE-2013-6430
-
srednji
FALSE
Ranjivost nije specifična za spring-tx

-
CVE-2013-7315
-
srednji
FALSE
Ranjivost nije specifična za spring-tx

-
CVE-2014-0054
-
srednji
FALSE
Ranjivost nije specifična za spring-tx

-
CVE-2014-0225
-
visok
FALSE
Ranjivost nije specifična za spring-tx

-
CVE-2014-1904
-
srednji
FALSE
Ranjivost nije specifična za spring-tx

-
CVE-2014-3625
-
srednji
FALSE
Ranjivost nije specifična za spring-tx

-
CVE-2016-9878
-
visok
FALSE
Ranjivost nije specifična za spring-tx

-
CVE-2018-1270
-
visok
FALSE
Ranjivost nije specifična za spring-tx

-
CVE-2018-1271
-
srednji
FALSE
Ranjivost nije specifična za spring-tx

-
CVE-2018-1272
-
srednji
FALSE
Ranjivost nije specifična za spring-tx

struts-core:1.3.8
-
CVE-2011-5057 (OSSINDEX)

srednji
FASLE
Ranjivost na Struts 2

-
CVE-2012-0391 (OSSINDEX)
CVE-2012-0391
visok
FALSE
Ranjivost na Struts 2

-
CVE-2014-0094 (OSSINDEX)
CVE-2014-0094
srednji
FALSE
Ranjivost na Struts 2

-
CVE-2014-0113 (OSSINDEX)
CVE-2014-0113
visok
FALSE
Ranjivost na Struts 2

CVE-2016-1182
3VE-2016-1182
-
visok
ISTINITO

-
-
CVE-2011-5057
srednji
FALSE
Ranjivost na Struts 2

-
CVE-2012-0392 (OSSINDEX)
CVE-2012-0392
visok
FALSE
Ranjivost na Struts 2

-
CVE-2012-0393 (OSSINDEX)
CVE-2012-0393
srednji
FALSE
Ranjivost na Struts 2

CVE-2015-0899
CVE-2015-0899
-
visok
ISTINITO

-
CVE-2012-0394
CVE-2012-0394
srednji
FALSE
Ranjivost na Struts 2

-
CVE-2012-0838 (OSSINDEX)
CVE-2012-0838
visok
FALSE
Ranjivost na Struts 2

-
CVE-2013-1965 (OSSINDEX)
CVE-2013-1965
visok
FALSE
Ranjivost na Struts 2

-
CVE-2013-1966 (OSSINDEX)
CVE-2013-1966
visok
FASLE
Ranjivost na Struts 2

-
CVE-2013-2115
CVE-2013-2115
visok
FASLE
Ranjivost na Struts 2

-
CVE-2013-2134 (OSSINDEX)
CVE-2013-2134
visok
FASLE
Ranjivost na Struts 2

-
CVE-2013-2135 (OSSINDEX)
CVE-2013-2135
visok
FASLE
Ranjivost na Struts 2

CVE-2014-0114
CVE-2014-0114
-
visok
ISTINITO

-
CVE-2015-2992
CVE-2015-2992
srednji
FALSE
Ranjivost na Struts 2

-
CVE-2016-0785 (OSSINDEX)
CVE-2016-0785
visok
FALSE
Ranjivost na Struts 2

CVE-2016-1181
CVE-2016-1181
-
visok
ISTINITO

-
CVE-2016-4003 (OSSINDEX)
CVE-2016-4003
visok
FALSE
Ranjivost na Struts 2

xwork-core:2.3.30
CVE-2017-9804
-
-
visok
ISTINITO

SONATYPE-2017-0173
-
-
visok
ISTINITO

CVE-2017-7672
-
-
visok
FALSE
Duplikat CVE-2017-9804

SONATYPE-2016-0127
-
-
visok
ISTINITO

struts2-core:2.3.30
-
CVE-2016-6795
CVE-2016-6795
visok
ISTINITO

-
CVE-2017-9787
CVE-2017-9787
visok
ISTINITO

-
CVE-2017-9791
CVE-2017-9791
visok
ISTINITO

-
CVE-2017-9793
-
visok
FALSE
Duplikat CVE-2018-1327

-
CVE-2017-9804
-
visok
ISTINITO

-
CVE-2017-9805
CVE-2017-9805
visok
ISTINITO

CVE-2016-4003
-
-
srednji
FALSE
Primjenjivo na Apache Struts 2.x do 2.3.28, što je verzija 2.3.30. Međutim, na osnovu opisa, CVE važi za bilo koju verziju Struts 2 ako se koristi JRE 1.7 ili manje. Navodno su nas ovdje odlučili preosigurati, ali više liči na LAŽ

-
CVE-2018-1327
CVE-2018-1327
visok
ISTINITO

CVE-2017-5638
CVE-2017-5638
CVE-2017-5638
visok
ISTINITO
Ista ranjivost koju su Equifax hakeri iskoristili 2017

CVE-2017-12611
CVE-2017-12611
-
visok
ISTINITO

CVE-2018-11776
CVE-2018-11776
CVE-2018-11776
visok
ISTINITO

struts-taglib:1.3.8
-
CVE-2012-0394
-
srednji
FALSE
Za struts2-core

-
CVE-2013-2115
-
visok
FALSE
Za struts2-core

-
CVE-2014-0114
-
visok
FALSE
Za commons-beanutils

-
CVE-2015-0899
-
visok
FALSE
Ne odnosi se na taglib

-
CVE-2015-2992
-
srednji
FALSE
Odnosi se na struts2-core

-
CVE-2016-1181
-
visok
FALSE
Ne odnosi se na taglib

-
CVE-2016-1182
-
visok
FALSE
Ne odnosi se na taglib

podupirači-pločice-1.3.8
-
CVE-2012-0394
-
srednji
FALSE
Za struts2-core

-
CVE-2013-2115
-
visok
FALSE
Za struts2-core

-
CVE-2014-0114
-
visok
FALSE
Pod commons-beanutils

-
CVE-2015-0899
-
visok
FALSE
Ne odnosi se na pločice

-
CVE-2015-2992
-
srednji
FALSE
Za struts2-core

-
CVE-2016-1181
-
visok
FALSE
Ne odnosi se na taglib

-
CVE-2016-1182
-
visok
FALSE
Ne odnosi se na taglib

izvor: www.habr.com

Dodajte komentar