DevSecOps: principi rada i usporedba SCA. Prvi dio

Važnost analize softverskih komponenti trećih strana (Software Composition Analysis - SCA) u procesu razvoja raste s objavom godišnjih izvješća o ranjivostima open source biblioteka koje objavljuju Synopsys, Sonatype, Snyk i White Source . Prema izvješću Stanje sigurnosnih ranjivosti otvorenog koda 2020 broj identificiranih ranjivosti otvorenog koda u 2019. porastao je gotovo 1.5 puta u odnosu na prethodnu godinu, dok komponente otvorenog koda koristi 60% do 80% projekata. Na neovisnoj osnovi, SCA procesi su zasebna praksa OWASP SAMM-a i BSIMM-a kao pokazatelj zrelosti, a u prvoj polovici 2020. OWASP je objavio novi OWASP standard za provjeru softverskih komponenti (SCVS), pružajući najbolju praksu za provjeru trećih partijske komponente u opskrbnom lancu BY.

DevSecOps: principi rada i usporedba SCA. Prvi dio

Jedan od najilustrativnijih slučajeva dogodilo s Equifaxom u svibnju 2017. Nepoznati napadači došli su do informacija o 143 milijuna 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. Do ovog curenja je došlo kao rezultat iskorištavanja kritične ranjivosti u Apache Struts 000 (CVE-2-2017), dok je popravak objavljen još u ožujku 5638. Tvrtka je imala dva mjeseca da instalira ažuriranje, ali nitko se nije zamarao time.

Ovaj članak će raspravljati o pitanju odabira alata za provođenje SCA sa stajališta kvalitete rezultata analize. Također će biti pružena funkcionalna usporedba alata. Proces integracije u CI/CD i mogućnosti integracije bit će ostavljeni za sljedeće publikacije. OWASP je predstavio široku paletu alata na vašoj web stranici, no u aktualnoj recenziji dotaknut ćemo se samo najpopularnijeg open source alata Dependency Check, nešto manje poznate open source platforme Dependency Track te Enterprise rješenja Sonatype Nexus IQ. Također ćemo razumjeti kako ova rješenja rade i usporediti rezultate dobivene za lažno pozitivne rezultate.

DevSecOps: principi rada i usporedba SCA. Prvi dio

Princip rada

Provjera ovisnosti 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 identificira ranjivosti za CPE/PURL iz baza podataka (NVD, Sonatype OSS Index, NPM Audit API...), nakon čega gradi jednokratno izvješće 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: Naznaka da se komponenta odnosi na aplikaciju (a), operativni sustav (o), hardver (h) (obavezno)
  • Prodavač: Ime proizvođača proizvoda (obavezno)
  • Proizvod: Naziv proizvoda (obavezno)
  • Verzija: Verzija komponente (zastarjela stavka)
  • Update: Ažuriranje paketa
  • Izdanje: Stara verzija (zastarjela stavka)
  • Jezik: Jezik definiran u RFC-5646
  • SW izdanje: Verzija softvera
  • Ciljani SW: Softversko okruženje u kojem proizvod radi
  • Ciljani HW: Hardversko okruženje u kojem proizvod radi
  • Ostalo: Podaci o dobavljaču ili proizvodu

Primjer CPE-a izgleda ovako:

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

Redak znači da CPE verzija 2.3 opisuje aplikacijsku komponentu proizvođača pivotal_software s naslovom spring_framework verzija 3.0.0. Ako otvorimo ranjivost CVE-2014-0225 u NVD-u možemo vidjeti spominjanje ovog CPE-a. Prvi problem na koji odmah trebate obratiti pozornost je da CVE u NVD-u, prema CPE-u, prijavljuje problem u okviru, a ne u određenoj komponenti. To jest, ako su programeri čvrsto vezani za okvir, a identificirana ranjivost ne utječe na one module koje programeri koriste, sigurnosni stručnjak ć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

  • Shema: 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: Neki prefiks imena, kao što je ID Maven grupe, vlasnik Docker slike, GitHub korisnik ili organizacija. Opcionalno i ovisi o vrsti.
  • Ime: Naziv paketa (obavezno)
  • Verzija: Verzija paketa
  • Kvalifikacije: Dodatni podaci o kvalifikaciji za paket, kao što su OS, arhitektura, distribucija, itd. Neobavezni i specifični za vrstu.
  • Podput: Dodatna staza 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]

Staza ovisnosti — lokalna web platforma koja prihvaća generiran gotov Bill of Materials (BOM). CycloneDX и SPDX, odnosno gotove specifikacije o postojećim ovisnostima. Ovo je XML datoteka koja opisuje ovisnosti - naziv, hash, url paketa, izdavač, licenca. Zatim Dependency Track analizira BOM, gleda CVE-ove dostupne identificiranim ovisnostima iz baze podataka ranjivosti (NVD, Sonatype OSS Index...), nakon čega gradi grafikone, izračunava metriku, redovito ažurira podatke o statusu ranjivosti komponenti. .

Primjer kako bi sastavnica mogla 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 popis komponenti softvera u opskrbnom lancu, na primjer, za pružanje softvera kupcu. U 2014. čak je predložen zakon u Sjedinjenim Državama "Zakon o upravljanju lancem cyber opskrbe i transparentnosti iz 2014.", koji je naveo da pri kupnji softvera svaka država. Institucija mora zatražiti BOM kako bi spriječila upotrebu ranjivih komponenti, ali akt još nije stupio na snagu.

Vraćajući se na SCA, Dependency Track ima gotove integracije s platformama za obavijesti kao što je Slack, sustavima 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 daje informacije o licencama (zbog SPDX podrške).

Ako govorimo konkretno o kvaliteti SCA, onda postoji temeljna razlika.

Dependency Track ne prihvaća projekt kao ulaz, već BOM. To znači da ako želimo testirati projekt, prvo moramo generirati bom.xml, na primjer pomoću CycloneDX-a. Stoga je Dependency Track izravno ovisan o CycloneDX-u. Istodobno omogućuje prilagodbu. Ovo piše OZON tim CycloneDX modul za sastavljanje BOM datoteka za Golang projekte za daljnje skeniranje kroz Dependency Track.

Nexus IQ je komercijalno SCA rješenje tvrtke Sonatype, koje je dio ekosustava Sonatype, koji također uključuje Nexus Repository Manager. Nexus IQ može prihvatiti kao ulazne podatke i ratne arhive (za java projekte) putem web sučelja ili API-ja, i BOM, ako vaša organizacija nije imala vremena prijeći s 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ć također uzima u obzir vlastito istraživanje, na primjer, naziv ranjive funkcije ili klase. O mehanizmima IQ-a bit će riječi kasnije u analizi rezultata.

Sažmimo neke od funkcionalnih značajki, a također razmotrimo podržane jezike za analizu:

Jezik
Nexus IQ
Provjera ovisnosti
Staza ovisnosti

Java
+
+
+

C / C ++
+
+
-

C#
+
+
-

.Neto
+
+
+

erlang
-
-
+

JavaScript (NodeJS)
+
+
+

PHP
+
+
+

Piton
+
+
+

Rubin
+
+
+

Perl
-
-
-

Skala
+
+
+

Cilj C
+
+
-

Brz
+
+
-

R
+
-
-

Go
+
+
+

funkcionalnost

funkcionalnost
Nexus IQ
Provjera ovisnosti
Staza ovisnosti

Sposobnost da se osigura da komponente korištene u izvornom kodu budu provjerene za licenciranu čistoću
+
-
+

Sposobnost skeniranja i analiziranja ranjivosti i čistoće licence za Docker slike
+ Integracija s Clairom
-
-

Mogućnost konfiguriranja sigurnosnih pravila za korištenje biblioteka otvorenog koda
+
-
-

Sposobnost skeniranja repozitorija otvorenog koda za ranjive komponente
+ 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 baza podataka Sonatype
+ Sonatype OSS, NPM javni savjetnici
+ Sonatype OSS, NPM javni savjetnici, 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 pravilima
+
-
-

Preporuke za popravljanje ranjivosti, dostupnost poveznica na popravke
+
+- (ovisi o opisu u javnim bazama podataka)
+- (ovisi o opisu u javnim bazama podataka)

Rangiranje otkrivenih ranjivosti prema ozbiljnosti
+
+
+

Model pristupa temeljen na ulogama
+
-
+

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

Uzorkovanje/sortiranje ranjivosti prema definiranim kriterijima
+
-
+

Kontrolna ploča prema statusu aplikacije
+
-
+

Generiranje izvješća u PDF formatu
+
-
-

Generiranje izvješća u JSONCSV formatu
+
+
-

Podrška za ruski jezik
-
-
-

Mogućnosti integracije

integracija
Nexus IQ
Provjera ovisnosti
Staza ovisnosti

LDAP/Active Directory integracija
+
-
+

Integracija sa sustavom kontinuirane integracije Bamboo
+
-
-

Integracija sa sustavom kontinuirane integracije TeamCity
+
-
-

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

Integracija sa sustavom kontinuirane integracije Jenkins
+
+
+

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

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

Provjera ovisnosti

Prvi početak

Pokrenimo Provjeru ovisnosti na namjerno ranjivoj aplikaciji DVJA.

Za ovo ćemo koristiti Maven dodatak za provjeru ovisnosti:

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

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

DevSecOps: principi rada i usporedba SCA. Prvi dio

Otvorimo datoteku. Nakon sažetih informacija o ukupnom broju ranjivosti, možemo vidjeti informacije o ranjivostima s visokom razinom ozbiljnosti i pouzdanosti, s naznakom paketa, CPE-a i broja CVE-ova.

Slijede detaljnije informacije, posebice temelj na kojem je odluka donesena (dokaz), odnosno određeni BOM.

DevSecOps: principi rada i usporedba SCA. Prvi dio

Slijedi opis CPE, PURL i CVE. Usput, preporuke za ispravak nisu uključene jer ih nema u bazi podataka NVD-a.

DevSecOps: principi rada i usporedba SCA. Prvi dio

Za sustavni pregled rezultata skeniranja, možete konfigurirati Nginx s minimalnim postavkama ili poslati nastale nedostatke sustavu za upravljanje nedostacima koji podržava konektore za provjeru ovisnosti. Na primjer, Defect Dojo.

Staza ovisnosti

Instalacija

Dependency Track je pak platforma temeljena na webu s prikaznim grafikonima, tako da se ovdje ne pojavljuje gorući problem pohranjivanja nedostataka u rješenju 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 prijavu i lozinku, a zatim dolazimo do nadzorne ploče. Sljedeća stvar koju ćemo učiniti jest izraditi projekt za testnu aplikaciju u Javi Početna/Projekti → Stvori projekt . Uzmimo DVJA kao primjer.

DevSecOps: principi rada i usporedba SCA. Prvi dio

Budući da Dependency Track može prihvatiti samo BOM kao unos, ovaj se BOM mora dohvatiti. Iskoristimo CycloneDX Maven dodatak:

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

Dobivamo bom.xml i učitavamo datoteku u kreirani projekt DVJA → Zavisnosti → Upload BOM.

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

DevSecOps: principi rada i usporedba SCA. Prvi dio

Dakle, dobili smo sljedeću sliku za naš projekt:

DevSecOps: principi rada i usporedba SCA. Prvi dio

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

DevSecOps: principi rada i usporedba SCA. Prvi dio

Glavno razočarenje bilo je to što Dependency Track više ne prihvaća xml izvješća Dependency Check. Najnovije podržane verzije integracije Provjere ovisnosti bile su 1.0.0 - 4.0.2, dok sam ja testirao 5.3.2.

ovdje je video (i ovdje) kada je to još bilo moguće.

Nexus IQ

Prvi početak

Instalacija Nexusa IQ dolazi iz arhive dokumentacija, ali za te smo potrebe izgradili Docker sliku.

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

DevSecOps: principi rada i usporedba SCA. Prvi dio

DevSecOps: principi rada i usporedba SCA. Prvi dio

DevSecOps: principi rada i usporedba SCA. Prvi dio

Kao što vidite, postavljanje u slučaju IQ-a je nešto kompliciranije, jer također moramo kreirati pravila koja su primjenjiva za različite "faze" (dev, build, stage, release). Ovo je neophodno za blokiranje ranjivih komponenti dok se kreću kroz cjevovod bliže proizvodnji ili za njihovo blokiranje čim uđu u Nexus Repo kada ih programeri preuzmu.

Da bismo osjetili razliku između otvorenog koda i poduzeća, izvedimo isto skeniranje kroz Nexus IQ na isti način kroz Dodatak Maven, prethodno izradivši testnu aplikaciju u NexusIQ sučelju 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>

Slijedite URL do generiranog izvješća u IQ web sučelju:

DevSecOps: principi rada i usporedba SCA. Prvi dio

Ovdje možete vidjeti sva kršenja pravila koja označavaju različite razine važnosti (od informacija do sigurnosno kritičnih). Slovo D pored komponente znači da je komponenta Direct Dependency, a slovo T pored komponente znači da je komponenta Transitive Dependency, odnosno da je tranzitivna.

Usput, izvješće Izvješće o stanju sigurnosti otvorenog koda za 2020 iz Snyka 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 pravila Nexus IQ-a, možemo vidjeti opis komponente, kao i Grafikon verzija, koji pokazuje lokaciju trenutne verzije na vremenskom grafikonu, kao i u kojem trenutku ranjivost prestaje biti ranjiv. Visina svijeća na grafikonu pokazuje popularnost korištenja ove komponente.

DevSecOps: principi rada i usporedba SCA. Prvi dio

Ako odete na odjeljak ranjivosti i proširite CVE, možete pročitati opis ove ranjivosti, preporuke za uklanjanje, kao i razlog zašto je ova komponenta prekršena, odnosno prisutnost klase DiskFileitem.class.

DevSecOps: principi rada i usporedba SCA. Prvi dio

DevSecOps: principi rada i usporedba SCA. Prvi dio

Sažejmo samo one koji se odnose na Java komponente trećih strana, uklanjajući js komponente. U zagradama navodimo broj ranjivosti koje su pronađene izvan NVD-a.

Ukupni Nexus IQ:

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

Ukupna provjera ovisnosti:

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

Trag ukupne ovisnosti:

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

U sljedećim koracima ćemo analizirati dobivene rezultate i otkriti koja je od ovih ranjivosti pravi nedostatak, a koja je lažno pozitivna.

Odricanje

Ova recenzija nije nepobitna istina. Autor nije imao cilj istaknuti poseban instrument na pozadini drugih. Svrha pregleda bila je pokazati mehanizme rada SCA alata i načine provjere njihovih rezultata.

Usporedba rezultata

Uvjeti:

Lažno pozitivno za ranjivosti komponente treće strane je:

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

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

Zbirni rezultati

Idemo odmah na rezultate ručnog pregleda identificiranih ranjivosti. Cijelo izvješće za svaki CVE može se pronaći u Dodatku.

Sažeti rezultati za sve ranjivosti:

Parametar
Nexus IQ
Provjera ovisnosti
Staza ovisnosti

Utvrđene su ukupne ranjivosti
42
91
51

Netočno identificirane ranjivosti (lažno pozitivno)
2 (4.76%)
62 (68,13%)
29 (56.86%)

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

Zbirni rezultati po komponentama:

Parametar
Nexus IQ
Provjera ovisnosti
Staza ovisnosti

Ukupno identificirane komponente
62
47
59

Ukupno ranjive komponente
16
13
10

Netočno identificirane ranjive komponente (lažno pozitivno)
1
5
0

Netočno identificirane ranjive komponente (lažno pozitivno)
0
6
6

Izgradimo vizualne grafikone za procjenu omjera lažno pozitivnih i lažno negativnih u ukupnom broju ranjivosti. Komponente su označene vodoravno, a ranjivosti identificirane u njima su označene okomito.

DevSecOps: principi rada i usporedba SCA. Prvi dio

DevSecOps: principi rada i usporedba SCA. Prvi dio

DevSecOps: principi rada i usporedba SCA. Prvi dio

Za usporedbu, sličnu studiju proveo je tim Sonatype testirajući projekt od 1531 komponente koristeći OWASP Dependency Check. Kao što vidimo, omjer šuma i točnih odgovora usporediv je s našim rezultatima.

DevSecOps: principi rada i usporedba SCA. Prvi dio
Izvor: www.sonatype.com/why-precision-matters-ebook

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

Više

№ 1

Prvo pogledajmo neke zanimljive točke o Sonatype Nexus IQ.

Nexus IQ ukazuje na problem deserijalizacije s mogućnošću izvođenja RCE-a u Spring Frameworku 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. Isprva se čini da postoji dupliciranje ranjivosti u više CVE-ova. Jer, ako pogledate CVE-2016-1000027 i CVE-2011-2894 u NVD bazi, čini se da je sve očito

sastavni dio
Ranjivost

proljeće-web:3.0.5
CVE-2016-1000027

proljeće-kontekst:3.0.5
CVE-2011-2894

opruga-jezgra:3.0.5
CVE-2011-2894

Opis CVE-2011-2894 iz NVD-a:
DevSecOps: principi rada i usporedba SCA. Prvi dio

Opis CVE-2016-1000027 iz NVD-a:
DevSecOps: principi rada i usporedba SCA. Prvi dio

Sam CVE-2011-2894 prilično je poznat. U izvješću Bijeli izvor 2011 ovaj CVE je prepoznat kao jedan od najčešćih. Opisa za CVE-2016-100027 u načelu ima malo u NVD-u i čini se da je primjenjiv samo za Spring Framework 4.1.4. Pogledajmo upućivanje i tu sve postaje više-manje jasno. Iz Održivi članci Razumijemo da osim ranjivosti u RemoteInvocationSerializingExporter u CVE-2011-2894, ranjivost je uočena u HttpInvokerServiceExporter. Evo što nam Nexus IQ govori:

DevSecOps: principi rada i usporedba SCA. Prvi dio

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

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

№ 2

sastavni dio
Ranjivost
Rezultirati

podupirači2-jezgra: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 je prijavljuje. Postoji napomena u opisu ranjivosti:

DevSecOps: principi rada i usporedba 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 i najgorim.

Ne. 3

sastavni dio
Ranjivost
Rezultirati

xwork-core:2.3.30
CVE-2017-9804
TRUE

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, s CVE-2017-9804 koji proizlazi iz CVE-2017-7672. Prisutnost druge ranjivosti ne nosi nikakvo korisno opterećenje osim činjenice da je njezina ozbiljnost povećana na Visoku, pa je možemo smatrati nepotrebnom bukom.

Općenito, nisu pronađeni drugi lažno pozitivni rezultati za Nexus IQ.

№ 4

Nekoliko je stvari po kojima se IQ izdvaja od ostalih rješenja.

sastavni dio
Ranjivost
Rezultirati

proljeće-web:3.0.5
CVE-2020-5398
TRUE

CVE u NVD-u 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 opis CVE-a u Nexusu IQ , tada ćemo vidjeti sljedeće:
Savjetodavna obavijest o odstupanju: Sonatype sigurnosni istraživački tim je otkrio da je ova ranjivost uvedena u verziji 3.0.2.RELEASE, a ne 5.0.x kako je navedeno u upozorenju.

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

Lažno negativan se šalje u Provjeru ovisnosti i Praćenje ovisnosti.

№ 5

Pogledajmo lažno pozitivno za Provjeru ovisnosti i Praćenje ovisnosti.

Provjera ovisnosti 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 ti CVE-ovi ne primjenjuju. 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, koja je Provjera ovisnosti “zeznula ” 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. To je zbog činjenice da je ono što je zajedničko tim CVE-ovima i komponentama samo okvir, zbog čega ga je Dependency Check smatrao ranjivošću.

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 pronašli su puno ranjivosti koje su zapravo primjenjive na struts2-core, koji je u biti zaseban okvir. U ovom slučaju, Nexus IQ je ispravno shvatio sliku i u CVE-ovima koje je izdao, naznačio je da je struts-core došao do kraja životnog vijeka i da je potrebno prijeći na struts2-core.

№ 6

U nekim situacijama nije pošteno tumačiti očitu pogrešku Provjera ovisnosti i Praćenja ovisnosti. Konkretno CVE-2013-4152, CVE-2013-6429, CVE-2013-6430, CVE-2013-7315, CVE-2014-0054, CVE-2014-0225, CVE-2014-0225, koja provjera ovisnosti i praćenje ovisnosti pripisano spring-core:3.0.5 zapravo pripada spring-web:3.0.5. U isto vrijeme, neke od tih CVE-ova također je pronašao Nexus IQ, međutim, IQ ih je ispravno identificirao s drugom komponentom. Budući da ove ranjivosti nisu pronađene u spring-core-u, ne može se tvrditi da one nisu u okviru u načelu, a alati otvorenog koda s pravom su ukazali na te ranjivosti (samo su malo promašili).

Zaključci

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

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

Važan utjecaj na rezultate imaju i one ranjivosti koje nisu bile uključene u NVD, ali su ipak prisutne u bazi podataka Sonatype s oznakom SONATYPE. Prema izvješću 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 potražiti ranjivosti i u drugim izvorima.

Kao rezultat toga, Provjera ovisnosti proizvodi mnogo buke, nedostajući neke ranjive komponente. Dependency Track proizvodi manje buke i detektira veliki broj komponenti, što vizualno ne boli oči u web sučelju.

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

Dodatak A: Rezultati komponente
Simboli:

  • Visoka—ranjivosti visoke i kritične razine u komponenti
  • Srednje — Ranjivosti srednje razine kritičnosti u komponenti
  • TRUE — Istinski pozitivan problem
  • FALSE — Lažno pozitivan problem

sastavni dio
Nexus IQ
Provjera ovisnosti
Staza ovisnosti
Rezultirati

dom4j: 1.6.1
visok
visok
visok
TRUE

log4j-jezgra: 2.3
visok
visok
visok
TRUE

log4j: 1.2.14
visok
visok
-
TRUE

zajedničke zbirke: 3.1
visok
visok
visok
TRUE

commons-fileupload:1.3.2
visok
visok
visok
TRUE

commons-beanutils:1.7.0
visok
visok
visok
TRUE

commons-codec:1:10
Srednji
-
-
TRUE

mysql-connector-java:5.1.42
visok
visok
visok
TRUE

proljeće-izraz:3.0.5
visok
komponenta nije pronađena

TRUE

proljeće-web:3.0.5
visok
komponenta nije pronađena
visok
TRUE

proljeće-kontekst:3.0.5
Srednji
komponenta nije pronađena
-
TRUE

opruga-jezgra:3.0.5
Srednji
visok
visok
TRUE

struts2-config-browser-plugin:2.3.30
Srednji
-
-
TRUE

proljeće-tx:3.0.5
-
visok
-
FALSE

podupirači-jezgra:1.3.8
visok
visok
visok
TRUE

xwork-core: 2.3.30
visok
-
-
TRUE

podupirači2-jezgra: 2.3.30
visok
visok
visok
TRUE

struts-taglib:1.3.8
-
visok
-
FALSE

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

Dodatak B: Rezultati ranjivosti
Simboli:

  • Visoka—ranjivosti visoke i kritične razine u komponenti
  • Srednje — Ranjivosti srednje razine kritičnosti u komponenti
  • TRUE — Istinski pozitivan problem
  • FALSE — Lažno pozitivan problem

sastavni dio
Nexus IQ
Provjera ovisnosti
Staza ovisnosti
Ozbiljnost
Rezultirati
Komentirati

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

CVE-2020-10683
CVE-2020-10683
CVE-2020-10683
visok
TRUE

log4j-jezgra: 2.3
CVE-2017-5645
CVE-2017-5645
CVE-2017-5645
visok
TRUE

CVE-2020-9488
CVE-2020-9488
CVE-2020-9488
Nizak
TRUE

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

-
CVE-2020-9488
-
Nizak
TRUE

SONATYPE-2010-0053
-
-
visok
TRUE

zajedničke zbirke: 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
TRUE

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

SONATYPE-2014-0173
-
-
Srednji
TRUE

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

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

mysql-connector-java:5.1.42
CVE-2018-3258
CVE-2018-3258
CVE-2018-3258
visok
TRUE

CVE-2019-2692
CVE-2019-2692
-
Srednji
TRUE

-
CVE-2020-2875
-
Srednji
FALSE
Ista ranjivost kao CVE-2019-2692, ali s napomenom "napadi mogu značajno utjecati 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
TRUE

proljeće-izraz:3.0.5
CVE-2018-1270
komponenta nije pronađena
-
visok
TRUE

CVE-2018-1257
-
-
Srednji
TRUE

proljeće-web:3.0.5
CVE-2016-1000027
komponenta nije pronađena
-
visok
TRUE

CVE-2014-0225
-
CVE-2014-0225
visok
TRUE

CVE-2011-2730
-
-
visok
TRUE

-
-
CVE-2013-4152
Srednji
TRUE

CVE-2018-1272
-
-
visok
TRUE

CVE-2020-5398
-
-
visok
TRUE
Ilustrativan primjer u korist IQ-a: "Tim za istraživanje sigurnosti Sonatype otkrio je da je ova ranjivost uvedena u verziji 3.0.2.RELEASE, a ne 5.0.x kako je navedeno u uputama."

CVE-2013-6429
-
-
Srednji
TRUE

CVE-2014-0054
-
CVE-2014-0054
Srednji
TRUE

CVE-2013-6430
-
-
Srednji
TRUE

proljeće-kontekst:3.0.5
CVE-2011-2894
komponenta nije pronađena
-
Srednji
TRUE

opruga-jezgra:3.0.5
-
CVE-2011-2730
CVE-2011-2730
visok
TRUE

CVE-2011-2894
CVE-2011-2894
CVE-2011-2894
Srednji
TRUE

-
-
CVE-2013-4152
Srednji
FALSE
Duplikat iste ranjivosti u spring-webu

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

-
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 proljetni izraz/proljetne poruke

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

-
CVE-2018-1272
CVE-2018-1272
visok
TRUE

CVE-2014-3578
CVE-2014-3578 (OSSINDEX)
CVE-2014-3578
Srednji
TRUE

SONATYPE-2015-0327
-
-
Nizak
TRUE

struts2-config-browser-plugin:2.3.30
SONATYPE-2016-0104
-
-
Srednji
TRUE

proljeće-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

podupirači-jezgra: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
TRUE

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

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

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

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

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

SONATYPE-2017-0173
-
-
visok
TRUE

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

SONATYPE-2016-0127
-
-
visok
TRUE

podupirači2-jezgra:2.3.30
-
CVE-2016-6795
CVE-2016-6795
visok
TRUE

-
CVE-2017-9787
CVE-2017-9787
visok
TRUE

-
CVE-2017-9791
CVE-2017-9791
visok
TRUE

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

-
CVE-2017-9804
-
visok
TRUE

-
CVE-2017-9805
CVE-2017-9805
visok
TRUE

CVE-2016-4003
-
-
Srednji
FALSE
Primjenjivo na Apache Struts 2.x do 2.3.28, što je verzija 2.3.30. Međutim, na temelju opisa, CVE je valjan za bilo koju verziju Strutsa 2 ako se koristi JRE 1.7 ili stariji. Očito su nas ovdje odlučili reosigurati, ali više izgleda kao LAŽ

-
CVE-2018-1327
CVE-2018-1327
visok
TRUE

CVE-2017-5638
CVE-2017-5638
CVE-2017-5638
visok
TRUE
Ista ranjivost koju su hakeri Equifaxa iskoristili 2017

CVE-2017-12611
CVE-2017-12611
-
visok
TRUE

CVE-2018-11776
CVE-2018-11776
CVE-2018-11776
visok
TRUE

struts-taglib:1.3.8
-
CVE-2012-0394
-
Srednji
FALSE
Za podupirače2-jezgre

-
CVE-2013-2115
-
visok
FALSE
Za podupirače2-jezgre

-
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 podupirače2-jezgre

-
CVE-2013-2115
-
visok
FALSE
Za podupirače2-jezgre

-
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 podupirače2-jezgre

-
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