DevSecOps: principi delovanja in primerjava SCA. Prvi del

Pomen analize komponent programske opreme tretjih oseb (Software Composition Analysis - SCA) v razvojnem procesu narašča z objavo letnih poročil o ranljivostih odprtokodnih knjižnic, ki jih objavljajo Synopsys, Sonatype, Snyk in White Source. . Glede na poročilo Stanje odprtokodnih varnostnih ranljivosti 2020 Število ugotovljenih odprtokodnih ranljivosti se je v letu 2019 povečalo za skoraj 1.5-krat v primerjavi z letom poprej, medtem ko odprtokodne komponente uporablja od 60 do 80 % projektov. Na neodvisni osnovi so procesi SCA ločena praksa OWASP SAMM in BSIMM kot indikator zrelosti, v prvi polovici leta 2020 pa je OWASP izdal nov standard za preverjanje komponent programske opreme OWASP (SCVS), ki zagotavlja najboljše prakse za preverjanje tretjih komponent strank v dobavni verigi BY.

DevSecOps: principi delovanja in primerjava SCA. Prvi del

Eden najbolj ilustrativnih primerov zgodilo z Equifaxom maja 2017. Neznani napadalci so pridobili podatke o 143 milijonih Američanov, vključno s polnimi imeni, naslovi, številkami socialnega zavarovanja in vozniškimi dovoljenji. V 209 primerih so dokumenti vsebovali tudi podatke o bančnih karticah žrtev. Do tega puščanja je prišlo zaradi izkoriščanja kritične ranljivosti v Apache Struts 000 (CVE-2-2017), medtem ko je bil popravek izdan marca 5638. Podjetje je imelo dva meseca časa za namestitev posodobitve, vendar se nihče ni ukvarjal s tem.

Ta članek bo obravnaval vprašanje izbire orodja za izvajanje SCA z vidika kakovosti rezultatov analize. Zagotovljena bo tudi funkcionalna primerjava orodij. Postopek integracije v CI/CD in integracijske zmožnosti bodo prepuščeni naslednjim publikacijam. OWASP je predstavil široko paleto orodij na vašem spletnem mestu, vendar se bomo v tokratnem pregledu dotaknili le najbolj priljubljenega odprtokodnega orodja Dependency Check, nekoliko manj znane odprtokodne platforme Dependency Track in Enterprise rešitve Sonatype Nexus IQ. Razumeli bomo tudi, kako te rešitve delujejo, in primerjali dobljene rezultate za lažno pozitivne rezultate.

DevSecOps: principi delovanja in primerjava SCA. Prvi del

Princip delovanja

Preverjanje odvisnosti je pripomoček (CLI, maven, modul jenkins, ant), ​​ki analizira projektne datoteke, zbira informacije o odvisnostih (ime paketa, groupid, naslov specifikacije, različica ...), gradi vrstico CPE (Common Platform Enumeration). , URL paketa ( PURL) in identificira ranljivosti za CPE/PURL iz podatkovnih baz (NVD, Sonatype OSS Index, NPM Audit API...), nakar sestavi enkratno poročilo v formatu HTML, JSON, XML...

Poglejmo, kako izgleda CPE:

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

  • del: Navedba, da se komponenta nanaša na aplikacijo (a), operacijski sistem (o), strojno opremo (h) (obvezno)
  • Prodajalec: Ime proizvajalca izdelka (obvezno)
  • Izdelek: Ime izdelka (obvezno)
  • različica: Različica komponente (zastarel element)
  • Posodobitev: Posodobitev paketa
  • Edition: Podedovana različica (zastarel element)
  • Jezik: Jezik, opredeljen v RFC-5646
  • Izdaja SW: Različica programske opreme
  • Ciljni SW: Programsko okolje, v katerem izdelek deluje
  • Ciljna HW: Okolje strojne opreme, v katerem izdelek deluje
  • Drugi: Informacije o dobavitelju ali izdelku

Primer CPE izgleda takole:

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

Vrstica pomeni, da različica CPE 2.3 opisuje komponento aplikacije proizvajalca pivotal_software z naslovom spring_framework različica 3.0.0. Če odpremo ranljivost CVE-2014-0225 v NVD lahko vidimo omembo tega CPE. Prva težava, na katero morate takoj biti pozorni, je, da CVE v NVD po CPE poroča o težavi v okviru in ne v določeni komponenti. To pomeni, da če so razvijalci tesno vezani na okvir in ugotovljena ranljivost ne vpliva na tiste module, ki jih razvijalci uporabljajo, bo varnostni strokovnjak tako ali drugače moral razstaviti ta CVE in razmišljati o posodobitvi.

URL uporabljajo tudi orodja SCA. Oblika URL-ja paketa je naslednja:

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

  • Shema: Vedno bo 'pkg', ki označuje, da je to URL paketa (obvezno)
  • Vrsta: "Tip" paketa ali "protokol" paketa, kot je maven, npm, nuget, gem, pypi itd. (Obvezen element)
  • Imenski prostor: Nekatera predpona imena, kot je ID skupine Maven, lastnik slike Docker, uporabnik GitHub ali organizacija. Neobvezno in odvisno od vrste.
  • ime: Ime paketa (obvezno)
  • različica: Paketna različica
  • Kvalifikacije: Dodatni kvalifikacijski podatki za paket, kot so OS, arhitektura, distribucija itd. Izbirno in glede na vrsto.
  • Podpot: Dodatna pot v paketu glede na koren paketa

Na primer:

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

Trak odvisnosti — lokalna spletna platforma, ki sprejema že ustvarjen seznam materialov (BOM). CycloneDX и SPDX, to je že pripravljene specifikacije o obstoječih odvisnostih. To je datoteka XML, ki opisuje odvisnosti - ime, zgoščene vrednosti, url paketa, založnika, licenco. Nato Dependency Track razčleni BOM, pogleda CVE-je, ki so na voljo identificiranim odvisnostim iz baze ranljivosti (NVD, Sonatype OSS Index...), nakar zgradi grafe, izračuna meritve, redno posodablja podatke o statusu ranljivosti komponent. .

Primer, kako bi lahko izgledala kosovnica v formatu 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>

BOM se lahko uporablja ne le kot vhodni parameter za Dependency Track, ampak tudi za popis komponent programske opreme v dobavni verigi, na primer za zagotavljanje programske opreme stranki. Leta 2014 so v ZDA celo predlagali zakon "Zakon o upravljanju in preglednosti kibernetske dobavne verige iz leta 2014", ki je izjavil, da pri nakupu programske opreme morebitna državna. Institucija mora zahtevati BOM, da prepreči uporabo ranljivih komponent, vendar akt še ni začel veljati.

Če se vrnemo k SCA, ima Dependency Track že pripravljene integracije s platformami za obveščanje, kot je Slack, sistemi za upravljanje ranljivosti, kot je Kenna Security. Omeniti velja tudi, da Dependency Track med drugim identificira zastarele različice paketov in zagotavlja informacije o licencah (zaradi podpore SPDX).

Če govorimo posebej o kakovosti SCA, potem obstaja temeljna razlika.

Dependency Track kot vhod ne sprejme projekta, temveč kosovnico. To pomeni, da če želimo preizkusiti projekt, moramo najprej ustvariti bom.xml, na primer z uporabo CycloneDX. Tako je Dependency Track neposredno odvisen od CycloneDX. Hkrati omogoča prilagajanje. Tako je zapisala ekipa OZON Modul CycloneDX za sestavljanje datotek BOM za projekte Golang za nadaljnje skeniranje prek Dependency Track.

Nexus IQ je komercialna rešitev SCA podjetja Sonatype, ki je del ekosistema Sonatype, ki vključuje tudi Nexus Repository Manager. Nexus IQ lahko sprejme kot vhod tako vojne arhive (za projekte java) prek spletnega vmesnika ali API-ja kot BOM, če vaša organizacija še ni prešla s CycloneDX na novo rešitev. Za razliko od odprtokodnih rešitev se IQ ne nanaša le na CP/PURL na identificirano komponento in ustrezno ranljivost v bazi podatkov, ampak upošteva tudi lastno raziskavo, na primer ime ranljive funkcije ali razreda. O mehanizmih IQ bomo razpravljali kasneje pri analizi rezultatov.

Povzemimo nekatere funkcionalne funkcije in razmislimo tudi o podprtih jezikih za analizo:

Jezik
Nexus IQ
Preverjanje odvisnosti
Trak odvisnosti

Java
+
+
+

C / C ++
+
+
-

C#
+
+
-

.Mreža
+
+
+

Erlang
-
-
+

JavaScript (NodeJS)
+
+
+

PHP
+
+
+

Python
+
+
+

Ruby
+
+
+

Perl
-
-
-

Lestvica
+
+
+

Cilj C
+
+
-

Swift
+
+
-

R
+
-
-

Go
+
+
+

Funkcionalnost

Funkcionalnost
Nexus IQ
Preverjanje odvisnosti
Trak odvisnosti

Zmožnost zagotavljanja, da so komponente, uporabljene v izvorni kodi, preverjene glede licenčne čistosti
+
-
+

Zmožnost skeniranja in analiziranja ranljivosti ter čistoče licenc za slike Docker
+ Integracija s Clair
-
-

Možnost konfiguriranja varnostnih pravilnikov za uporabo odprtokodnih knjižnic
+
-
-

Sposobnost skeniranja odprtokodnih skladišč za ranljive komponente
+ RubyGems, Maven, NPM, Nuget, Pypi, Conan, Bower, Conda, Go, p2, R, Yum, Helm, Docker, CocoaPods, Git LFS
-
+ Hex, RubyGems, Maven, NPM, Nuget, Pypi

Razpoložljivost specializirane raziskovalne skupine
+
-
-

Delovanje v zaprti zanki
+
+
+

Uporaba baz podatkov tretjih oseb
+ Zaprta zbirka podatkov Sonatype
+ Sonatype OSS, NPM javni svetovalci
+ Sonatype OSS, NPM Public Advisors, RetireJS, VulnDB, podpora za lastno bazo ranljivosti

Možnost filtriranja odprtokodnih komponent pri poskusu nalaganja v razvojno zanko v skladu s konfiguriranimi pravilniki
+
-
-

Priporočila za odpravljanje ranljivosti, razpoložljivost povezav do popravkov
+
+- (odvisno od opisa v javnih bazah)
+- (odvisno od opisa v javnih bazah)

Razvrščanje odkritih ranljivosti po resnosti
+
+
+

Model dostopa na podlagi vlog
+
-
+

CLI podpora
+
+
+- (samo za CycloneDX)

Vzorčenje/razvrščanje ranljivosti po definiranih kriterijih
+
-
+

Nadzorna plošča po statusu aplikacije
+
-
+

Izdelava poročil v formatu PDF
+
-
-

Ustvarjanje poročil v formatu JSONCSV
+
+
-

Podpora za ruski jezik
-
-
-

Zmožnosti integracije

Integracija
Nexus IQ
Preverjanje odvisnosti
Trak odvisnosti

Integracija LDAP/Active Directory
+
-
+

Integracija s sistemom kontinuirane integracije Bamboo
+
-
-

Integracija s sistemom kontinuirane integracije TeamCity
+
-
-

Integracija s sistemom kontinuirane integracije GitLab
+
+- (kot vtičnik za GitLab)
+

Integracija s sistemom kontinuirane integracije Jenkins
+
+
+

Razpoložljivost vtičnikov za IDE
+ IntelliJ, Eclipse, Visual Studio
-
-

Podpora za integracijo po meri prek spletnih storitev (API) orodja
+
-
+

Preverjanje odvisnosti

Prvi začetek

Zaženimo preverjanje odvisnosti na namenoma ranljivi aplikaciji DVJA.

Za to bomo uporabili Vtičnik Maven za preverjanje odvisnosti:

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

Posledično bo dependency-check-report.html prikazan v ciljnem imeniku.

DevSecOps: principi delovanja in primerjava SCA. Prvi del

Odprimo datoteko. Po povzetku informacij o skupnem številu ranljivosti lahko vidimo informacije o ranljivostih z visoko stopnjo resnosti in zaupanja, ki označujejo paket, CPE in število CVE.

Sledi podrobnejši podatek, predvsem podlaga, na kateri je bila odločitev sprejeta (dokazilo), torej določena kosovnica.

DevSecOps: principi delovanja in primerjava SCA. Prvi del

Sledi opis CPE, PURL in CVE. Mimogrede, priporočila za popravek niso vključena, ker jih ni v bazi podatkov NVD.

DevSecOps: principi delovanja in primerjava SCA. Prvi del

Za sistematičen ogled rezultatov skeniranja lahko konfigurirate Nginx z minimalnimi nastavitvami ali pošljete nastale napake v sistem za upravljanje napak, ki podpira priključke za preverjanje odvisnosti. Na primer Defect Dojo.

Trak odvisnosti

Namestitev

Dependency Track pa je spletna platforma s prikaznimi grafi, tako da pereče vprašanje shranjevanja napak v rešitvi tretje osebe tukaj ne nastane.
Podprti skripti za namestitev so: Docker, WAR, Executable WAR.

Prvi začetek

Gremo na URL delujoče storitve. Prijavimo se prek admin/admin, spremenimo prijavo in geslo ter pridemo do nadzorne plošče. Naslednja stvar, ki jo bomo naredili, je izdelava projekta za testno aplikacijo v Javi v Domov/Projekti → Ustvari projekt . Vzemimo za primer DVJA.

DevSecOps: principi delovanja in primerjava SCA. Prvi del

Ker lahko Dependency Track kot vhod sprejme samo BOM, je treba to BOM pridobiti. Izkoristimo Vtičnik CycloneDX Maven:

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

Dobimo bom.xml in datoteko naložimo v ustvarjen projekt DVJA → Odvisnosti → Naloži BOM.

Pojdimo v Administracija → Analizatorji. Razumemo, da imamo omogočen samo notranji analizator, ki vključuje NVD. Povežimo še Sonatype OSS Index.

DevSecOps: principi delovanja in primerjava SCA. Prvi del

Tako dobimo naslednjo sliko za naš projekt:

DevSecOps: principi delovanja in primerjava SCA. Prvi del

Na seznamu lahko najdete tudi eno ranljivost, ki velja za Sonatype OSS:

DevSecOps: principi delovanja in primerjava SCA. Prvi del

Glavno razočaranje je bilo, da Dependency Track ne sprejema več poročil xml za preverjanje odvisnosti. Najnovejše podprte različice integracije preverjanja odvisnosti so bile 1.0.0 - 4.0.2, medtem ko sem preizkusil 5.3.2.

Tu Video (in glej), ko je bilo še mogoče.

Nexus IQ

Prvi začetek

Namestitev Nexusa IQ je iz arhiva dokumentacijo, vendar smo za te namene zgradili sliko Dockerja.

Ko se prijavite v konzolo, morate ustvariti organizacijo in aplikacijo.

DevSecOps: principi delovanja in primerjava SCA. Prvi del

DevSecOps: principi delovanja in primerjava SCA. Prvi del

DevSecOps: principi delovanja in primerjava SCA. Prvi del

Kot lahko vidite, je nastavitev v primeru IQ nekoliko bolj zapletena, saj moramo ustvariti tudi politike, ki so uporabne za različne »stopnje« (dev, build, stage, release). To je potrebno za blokiranje ranljivih komponent, ko se premikajo po cevovodu bližje proizvodnji, ali za blokiranje takoj, ko pridejo v Nexus Repo, ko jih prenesejo razvijalci.

Da bi občutili razliko med odprtokodnim in poslovnim, izvedimo isto skeniranje prek Nexusa IQ na enak način prek Vtičnik Maven, ki je predhodno ustvaril testno aplikacijo v vmesniku 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>

Sledite URL-ju do ustvarjenega poročila v spletnem vmesniku IQ:

DevSecOps: principi delovanja in primerjava SCA. Prvi del

Tukaj si lahko ogledate vse kršitve pravilnika, ki označujejo različne stopnje pomembnosti (od informacij do varnostno kritičnih). Črka D ob komponenti pomeni, da je komponenta Direct Dependency, črka T ob komponenti pa pomeni, da je komponenta Transitive Dependency, torej prehodna.

Mimogrede, poročilo Poročilo o stanju odprtokodne varnosti 2020 iz Snyka poroča, da je več kot 70 % odprtokodnih ranljivosti, odkritih v Node.js, Javi in ​​Rubyju, v prehodnih odvisnostih.

Če odpremo eno od kršitev pravilnika Nexus IQ, lahko vidimo opis komponente in graf različic, ki prikazuje lokacijo trenutne različice v časovnem grafu in na kateri točki ranljivost preneha delovati. biti ranljiv. Višina sveč na grafu prikazuje priljubljenost uporabe te komponente.

DevSecOps: principi delovanja in primerjava SCA. Prvi del

Če greste v razdelek o ranljivostih in razširite CVE, lahko preberete opis te ranljivosti, priporočila za odpravo, pa tudi razlog, zakaj je bila ta komponenta kršena, to je prisotnost razreda DiskFileitem.class.

DevSecOps: principi delovanja in primerjava SCA. Prvi del

DevSecOps: principi delovanja in primerjava SCA. Prvi del

Povzemimo le tiste, ki so povezani s komponentami Java tretjih oseb, pri čemer odstranimo komponente js. V oklepajih je navedeno število ranljivosti, ki so bile najdene zunaj NVD.

Total Nexus IQ:

  • Pregledane odvisnosti: 62
  • Ranljive odvisnosti: 16
  • Najdene ranljivosti: 42 (8 sonatype db)

Preverjanje popolne odvisnosti:

  • Pregledane odvisnosti: 47
  • Ranljive odvisnosti: 13
  • Najdene ranljivosti: 91 (14 sonatype oss)

Trak skupne odvisnosti:

  • Pregledane odvisnosti: 59
  • Ranljive odvisnosti: 10
  • Najdene ranljivosti: 51 (1 sonatype oss)

V naslednjih korakih bomo analizirali dobljene rezultate in ugotovili, katera od teh ranljivosti je resnična napaka in katera je lažno pozitivna.

Izjava o omejitvi odgovornosti

Ta pregled ni nesporna resnica. Avtor ni imel cilja izpostaviti ločen instrument v ozadju drugih. Namen pregleda je bil prikazati mehanizme delovanja orodij SCA in načine preverjanja njihovih rezultatov.

Primerjava rezultatov

Pravila in pogoji:

Lažno pozitiven rezultat za ranljivosti komponent tretjih oseb je:

  • Neujemanje CVE z identificirano komponento
  • Na primer, če je v ogrodju struts2 identificirana ranljivost in orodje kaže na komponento ogrodja struts-tiles, za katero ta ranljivost ne velja, potem je to lažno pozitivno
  • CVE se ne ujema z identificirano različico komponente
  • Ranljivost je na primer povezana z različico python > 3.5, orodje pa različico 2.7 označi kot ranljivo – to je lažno pozitivno, saj dejansko ranljivost velja samo za vejo izdelka 3.x
  • Podvojen CVE
  • Na primer, če SCA določa CVE, ki omogoča RCE, potem SCA določa CVE za isto komponento, ki velja za izdelke Cisco, na katere vpliva ta RCE. V tem primeru bo lažno pozitiven.
  • Na primer, CVE je bil najden v komponenti spring-web, nato pa SCA kaže na isti CVE v drugih komponentah Spring Framework, medtem ko CVE nima nobene zveze z drugimi komponentami. V tem primeru bo lažno pozitiven.

Predmet študije je bil odprtokodni projekt DVJA. Študija je vključevala samo komponente java (brez js).

Povzetek rezultatov

Pojdimo takoj k rezultatom ročnega pregleda ugotovljenih ranljivosti. Celotno poročilo za vsak CVE je na voljo v dodatku.

Povzetek rezultatov za vse ranljivosti:

Parameter
Nexus IQ
Preverjanje odvisnosti
Trak odvisnosti

Skupne ugotovljene ranljivosti
42
91
51

Nepravilno ugotovljene ranljivosti (lažno pozitivno)
2 (4.76%)
62 (68,13%)
29 (56.86%)

Najdena ni bila nobena pomembna ranljivost (lažno negativno)
10
20
27

Povzetek rezultatov po komponentah:

Parameter
Nexus IQ
Preverjanje odvisnosti
Trak odvisnosti

Skupaj identificirane komponente
62
47
59

Skupaj ranljive komponente
16
13
10

Nepravilno identificirane ranljive komponente (lažno pozitivno)
1
5
0

Nepravilno identificirane ranljive komponente (lažno pozitivno)
0
6
6

Zgradimo vizualne grafe, da ocenimo razmerje med lažno pozitivnimi in lažno negativnimi glede na skupno število ranljivosti. Komponente so označene vodoravno, v njih ugotovljene ranljivosti pa navpično.

DevSecOps: principi delovanja in primerjava SCA. Prvi del

DevSecOps: principi delovanja in primerjava SCA. Prvi del

DevSecOps: principi delovanja in primerjava SCA. Prvi del

Za primerjavo je podobno študijo izvedla ekipa Sonatype, ki je testirala projekt 1531 komponent z uporabo OWASP Dependency Check. Kot lahko vidimo, je razmerje med šumom in pravilnimi odzivi primerljivo z našimi rezultati.

DevSecOps: principi delovanja in primerjava SCA. Prvi del
Vir: www.sonatype.com/why-precision-matters-ebook

Oglejmo si nekaj CVE iz rezultatov skeniranja, da bomo razumeli razlog za te rezultate.

več

№ 1

Najprej si poglejmo nekaj zanimivih točk o Sonatype Nexus IQ.

Nexus IQ opozarja na težavo z deserializacijo z možnostjo večkratne izvedbe RCE v Spring Framework. CVE-2016-1000027 v spring-web:3.0.5 prvič in CVE-2011-2894 v spring-context:3.0.5 in spring-core:3.0.5. Sprva se zdi, da obstaja podvajanje ranljivosti v več CVE. Ker, če pogledate CVE-2016-1000027 in CVE-2011-2894 v bazi podatkov NVD, se zdi, da je vse očitno

Komponenta
Ranljivost

spring-web:3.0.5
CVE-2016-1000027

pomladni kontekst:3.0.5
CVE-2011-2894

vzmetno jedro:3.0.5
CVE-2011-2894

Opis CVE-2011-2894 iz NVD:
DevSecOps: principi delovanja in primerjava SCA. Prvi del

Opis CVE-2016-1000027 iz NVD:
DevSecOps: principi delovanja in primerjava SCA. Prvi del

Sam CVE-2011-2894 je precej znan. V poročilu Beli vir 2011 ta CVE je bil priznan kot eden najpogostejših. Opisov za CVE-2016-100027 je v NVD načeloma malo in zdi se, da je uporaben samo za Spring Framework 4.1.4. Poglejmo si reference in tukaj postane vse bolj ali manj jasno. Od Vzdržljivi članki Zavedamo se, da poleg ranljivosti v RemoteInvocationSerializingExporter v CVE-2011-2894 je ranljivost opažena v HttpInvokerServiceExporter. To nam pove Nexus IQ:

DevSecOps: principi delovanja in primerjava SCA. Prvi del

Vendar v NVD ni nič takega, zato prejmeta preverjanje odvisnosti in sledenje odvisnosti lažno negativno.

Tudi iz opisa CVE-2011-2894 je mogoče razumeti, da je ranljivost res prisotna v spring-context:3.0.5 in spring-core:3.0.5. Potrditev tega je v članku osebe, ki je odkrila to ranljivost.

№ 2

Komponenta
Ranljivost
Rezultat

oporniki2-jedro:2.3.30
CVE-2016-4003
FALSE

Če preučimo ranljivost CVE-2016-4003, bomo razumeli, da je bila odpravljena v različici 2.3.28, vendar nam jo Nexus IQ sporoči. V opisu ranljivosti je opomba:

DevSecOps: principi delovanja in primerjava SCA. Prvi del

To pomeni, da ranljivost obstaja samo v povezavi z zastarelo različico JRE, na katero so se odločili, da nas opozorijo. Kljub temu menimo, da je to lažno pozitivno, čeprav ne najslabše.

Ne. 3

Komponenta
Ranljivost
Rezultat

xwork-core:2.3.30
CVE-2017-9804
TRUE

xwork-core:2.3.30
CVE-2017-7672
FALSE

Če pogledamo opise CVE-2017-9804 in CVE-2017-7672, bomo razumeli, da je težava URLValidator class, pri čemer CVE-2017-9804 izhaja iz CVE-2017-7672. Prisotnost druge ranljivosti ne nosi nobene koristne obremenitve, razen dejstva, da se je njena resnost povečala na visoko, zato jo lahko štejemo za nepotreben šum.

Na splošno za Nexus IQ niso našli nobenih drugih lažno pozitivnih rezultatov.

№ 4

Obstaja več stvari, zaradi katerih IQ izstopa od drugih rešitev.

Komponenta
Ranljivost
Rezultat

spring-web:3.0.5
CVE-2020-5398
TRUE

CVE v NVD navaja, da velja le za različice 5.2.x pred 5.2.3, 5.1.x pred 5.1.13 in različice 5.0.x pred 5.0.16, vendar če pogledamo opis CVE v Nexusu IQ , potem bomo videli naslednje:
Svetovalno obvestilo o odstopanju: varnostna raziskovalna skupina Sonatype je odkrila, da je bila ta ranljivost predstavljena v različici 3.0.2.RELEASE in ne 5.0.x, kot je navedeno v svetovanju.

Temu sledi PoC za to ranljivost, ki navaja, da je prisotna v različici 3.0.5.

Napačno negativno se pošlje preverjanju odvisnosti in sledi odvisnosti.

№ 5

Poglejmo lažne pozitivne rezultate za preverjanje odvisnosti in sledenje odvisnosti.

Preverjanje odvisnosti izstopa po tem, da odraža tiste CVE-je, ki veljajo za celotno ogrodje v NVD, na tiste komponente, za katere ti CVE-ji ne veljajo. To zadeva CVE-2012-0394, CVE-2013-2115, CVE-2014-0114, CVE-2015-0899, CVE-2015-2992, CVE-2016-1181, CVE-2016-1182, ki jih je preverjanje odvisnosti »zajebalo«. ” v struts-taglib:1.3.8 in struts-tiles-1.3.8. Te komponente nimajo nobene zveze s tem, kar je opisano v CVE – obdelava zahtev, preverjanje strani itd. To je posledica dejstva, da je tem CVE-jem in komponentam skupno samo ogrodje, zato je Dependency Check menil, da je to ranljivost.

Ista situacija je s spring-tx:3.0.5 in podobna situacija s struts-core:1.3.8. Za struts-core sta Dependency Check in Dependency Track odkrila veliko ranljivosti, ki so dejansko uporabne za struts2-core, ki je v bistvu ločen okvir. V tem primeru je Nexus IQ pravilno razumel sliko in v CVE-jih, ki jih je izdal, je nakazal, da je struts-core dosegel konec življenjske dobe in je treba preiti na struts2-core.

№ 6

V nekaterih situacijah ni pošteno razlagati očitne napake preverjanja odvisnosti in sledenja odvisnosti. Zlasti CVE-2013-4152, CVE-2013-6429, CVE-2013-6430, CVE-2013-7315, CVE-2014-0054, CVE-2014-0225, CVE-2014-0225, ki preverjanje odvisnosti in sledenje odvisnosti pripisano spring-core:3.0.5 dejansko pripada spring-web:3.0.5. Hkrati je nekatere od teh CVE našel tudi Nexus IQ, vendar jih je IQ pravilno identificiral z drugo komponento. Ker te ranljivosti niso bile najdene v spring-core-u, ni mogoče trditi, da načeloma niso v okviru in odprtokodna orodja so na te ranljivosti upravičeno opozorila (samo malo so zgrešila).

Ugotovitve

Kot lahko vidimo, ugotavljanje zanesljivosti ugotovljenih ranljivosti z ročnim pregledom ne daje nedvoumnih rezultatov, zato se pojavljajo sporna vprašanja. Rezultati so, da ima rešitev Nexus IQ najnižjo stopnjo lažno pozitivnih rezultatov in najvišjo natančnost.

Prvič, to je posledica dejstva, da je ekipa Sonatype razširila opis za vsako ranljivost CVE iz NVD v svojih zbirkah podatkov, pri čemer je navedla ranljivosti za določeno različico komponent vse do razreda ali funkcije in izvedla dodatne raziskave (npr. , preverjanje ranljivosti na starejših različicah programske opreme).

Pomemben vpliv na rezultate imajo tudi tiste ranljivosti, ki niso bile vključene v NVD, a so kljub temu prisotne v bazi Sonatype z oznako SONATYPE. Glede na poročilo Stanje odprtokodnih varnostnih ranljivosti 2020 45 % odkritih odprtokodnih ranljivosti ni prijavljenih NVD. Glede na bazo podatkov WhiteSource je le 29 % vseh odprtokodnih ranljivosti, prijavljenih zunaj NVD, objavljenih tam, zato je pomembno, da ranljivosti poiščete tudi v drugih virih.

Posledica tega je, da preverjanje odvisnosti povzroči veliko hrupa, pri čemer manjka nekaj ranljivih komponent. Dependency Track proizvaja manj šuma in zaznava veliko število komponent, kar vizualno ne boli oči v spletnem vmesniku.

Vendar praksa kaže, da bi morala odprtokodnost postati prvi korak k zrelemu DevSecOps. Prva stvar, o kateri morate razmišljati pri vključevanju SCA v razvoj, so procesi, in sicer, da skupaj z vodstvom in povezanimi oddelki razmišljate o tem, kako naj bi izgledali idealni procesi v vaši organizaciji. Lahko se izkaže, da bo za vašo organizacijo najprej Dependency Check ali Dependency Track pokril vse poslovne potrebe, Enterprise rešitve pa bodo logično nadaljevanje zaradi vse večje kompleksnosti aplikacij, ki se razvijajo.

Dodatek A: Rezultati komponente
Simboli:

  • Visoka—visoka in kritična raven ranljivosti v komponenti
  • Srednje — Ranljivosti srednje stopnje kritičnosti v komponenti
  • TRUE — Resnično pozitivno vprašanje
  • FALSE — Lažno pozitivna težava

Komponenta
Nexus IQ
Preverjanje odvisnosti
Trak odvisnosti
Rezultat

dom4j: 1.6.1
visoka
visoka
visoka
TRUE

log4j-jedro: 2.3
visoka
visoka
visoka
TRUE

log4j: 1.2.14
visoka
visoka
-
TRUE

skupne-zbirke:3.1
visoka
visoka
visoka
TRUE

skupna-fileupload:1.3.2
visoka
visoka
visoka
TRUE

commons-beanutils:1.7.0
visoka
visoka
visoka
TRUE

skupni kodek: 1:10
srednje
-
-
TRUE

mysql-connector-java:5.1.42
visoka
visoka
visoka
TRUE

vzmetni izraz:3.0.5
visoka
komponente ni mogoče najti

TRUE

spring-web:3.0.5
visoka
komponente ni mogoče najti
visoka
TRUE

pomladni kontekst:3.0.5
srednje
komponente ni mogoče najti
-
TRUE

vzmetno jedro:3.0.5
srednje
visoka
visoka
TRUE

struts2-config-brskalnik-plugin:2.3.30
srednje
-
-
TRUE

spring-tx:3.0.5
-
visoka
-
FALSE

oporno jedro:1.3.8
visoka
visoka
visoka
TRUE

xwork-core: 2.3.30
visoka
-
-
TRUE

oporniki2-jedro: 2.3.30
visoka
visoka
visoka
TRUE

struts-taglib:1.3.8
-
visoka
-
FALSE

oporniki-strešniki-1.3.8
-
visoka
-
FALSE

Dodatek B: Rezultati ranljivosti
Simboli:

  • Visoka—visoka in kritična raven ranljivosti v komponenti
  • Srednje — Ranljivosti srednje stopnje kritičnosti v komponenti
  • TRUE — Resnično pozitivno vprašanje
  • FALSE — Lažno pozitivna težava

Komponenta
Nexus IQ
Preverjanje odvisnosti
Trak odvisnosti
Resnost
Rezultat
Komentar

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

CVE-2020-10683
CVE-2020-10683
CVE-2020-10683
visoka
TRUE

log4j-jedro: 2.3
CVE-2017-5645
CVE-2017-5645
CVE-2017-5645
visoka
TRUE

CVE-2020-9488
CVE-2020-9488
CVE-2020-9488
nizka
TRUE

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

-
CVE-2020-9488
-
nizka
TRUE

SONATYPE-2010-0053
-
-
visoka
TRUE

skupne-zbirke:3.1
-
CVE-2015-6420
CVE-2015-6420
visoka
FALSE
Dvojniki RCE(OSSINDEX)

-
CVE-2017-15708
CVE-2017-15708
visoka
FALSE
Dvojniki RCE(OSSINDEX)

SONATYPE-2015-0002
RCE (OSSINDEX)
RCE(OSSINDEX)
visoka
TRUE

skupna-fileupload:1.3.2
CVE-2016-1000031
CVE-2016-1000031
CVE-2016-1000031
visoka
TRUE

SONATYPE-2014-0173
-
-
srednje
TRUE

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

-
CVE-2019-10086
CVE-2019-10086
visoka
FALSE
Ranljivost se nanaša samo na različice 1.9.2+

skupni kodek: 1:10
SONATYPE-2012-0050
-
-
srednje
TRUE

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

CVE-2019-2692
CVE-2019-2692
-
srednje
TRUE

-
CVE-2020-2875
-
srednje
FALSE
Ista ranljivost kot CVE-2019-2692, vendar z opombo »napadi lahko znatno vplivajo na dodatne izdelke«

-
CVE-2017-15945
-
visoka
FALSE
Ni pomembno za mysql-connector-java

-
CVE-2020-2933
-
nizka
FALSE
Dvojnik CVE-2020-2934

CVE-2020-2934
CVE-2020-2934
-
srednje
TRUE

vzmetni izraz:3.0.5
CVE-2018-1270
komponente ni mogoče najti
-
visoka
TRUE

CVE-2018-1257
-
-
srednje
TRUE

spring-web:3.0.5
CVE-2016-1000027
komponente ni mogoče najti
-
visoka
TRUE

CVE-2014-0225
-
CVE-2014-0225
visoka
TRUE

CVE-2011-2730
-
-
visoka
TRUE

-
-
CVE-2013-4152
srednje
TRUE

CVE-2018-1272
-
-
visoka
TRUE

CVE-2020-5398
-
-
visoka
TRUE
Ilustrativen primer v prid IQ: "Skupina varnostnih raziskav Sonatype je odkrila, da je bila ta ranljivost predstavljena v različici 3.0.2.RELEASE in ne 5.0.x, kot je navedeno v svetovanju."

CVE-2013-6429
-
-
srednje
TRUE

CVE-2014-0054
-
CVE-2014-0054
srednje
TRUE

CVE-2013-6430
-
-
srednje
TRUE

pomladni kontekst:3.0.5
CVE-2011-2894
komponente ni mogoče najti
-
srednje
TRUE

vzmetno jedro:3.0.5
-
CVE-2011-2730
CVE-2011-2730
visoka
TRUE

CVE-2011-2894
CVE-2011-2894
CVE-2011-2894
srednje
TRUE

-
-
CVE-2013-4152
srednje
FALSE
Dvojnik iste ranljivosti v spring-webu

-
CVE-2013-4152
-
srednje
FALSE
Ranljivost se nanaša na komponento spring-web

-
CVE-2013-6429
CVE-2013-6429
srednje
FALSE
Ranljivost se nanaša na komponento spring-web

-
CVE-2013-6430
-
srednje
FALSE
Ranljivost se nanaša na komponento spring-web

-
CVE-2013-7315
CVE-2013-7315
srednje
FALSE
SPLIT iz CVE-2013-4152. + Ranljivost se nanaša na komponento spring-web

-
CVE-2014-0054
CVE-2014-0054
srednje
FALSE
Ranljivost se nanaša na komponento spring-web

-
CVE-2014-0225
-
visoka
FALSE
Ranljivost se nanaša na komponento spring-web

-
-
CVE-2014-0225
visoka
FALSE
Dvojnik iste ranljivosti v spring-webu

-
CVE-2014-1904
CVE-2014-1904
srednje
FALSE
Ranljivost se nanaša na komponento spring-web-mvc

-
CVE-2014-3625
CVE-2014-3625
srednje
FALSE
Ranljivost se nanaša na komponento spring-web-mvc

-
CVE-2016-9878
CVE-2016-9878
visoka
FALSE
Ranljivost se nanaša na komponento spring-web-mvc

-
CVE-2018-1270
CVE-2018-1270
visoka
FALSE
Za pomladni-izraz/pomladna-sporočila

-
CVE-2018-1271
CVE-2018-1271
srednje
FALSE
Ranljivost se nanaša na komponento spring-web-mvc

-
CVE-2018-1272
CVE-2018-1272
visoka
TRUE

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

SONATYPE-2015-0327
-
-
nizka
TRUE

struts2-config-brskalnik-plugin:2.3.30
SONATYPE-2016-0104
-
-
srednje
TRUE

spring-tx:3.0.5
-
CVE-2011-2730
-
visoka
FALSE
Ranljivost ni specifična za spring-tx

-
CVE-2011-2894
-
visoka
FALSE
Ranljivost ni specifična za spring-tx

-
CVE-2013-4152
-
srednje
FALSE
Ranljivost ni specifična za spring-tx

-
CVE-2013-6429
-
srednje
FALSE
Ranljivost ni specifična za spring-tx

-
CVE-2013-6430
-
srednje
FALSE
Ranljivost ni specifična za spring-tx

-
CVE-2013-7315
-
srednje
FALSE
Ranljivost ni specifična za spring-tx

-
CVE-2014-0054
-
srednje
FALSE
Ranljivost ni specifična za spring-tx

-
CVE-2014-0225
-
visoka
FALSE
Ranljivost ni specifična za spring-tx

-
CVE-2014-1904
-
srednje
FALSE
Ranljivost ni specifična za spring-tx

-
CVE-2014-3625
-
srednje
FALSE
Ranljivost ni specifična za spring-tx

-
CVE-2016-9878
-
visoka
FALSE
Ranljivost ni specifična za spring-tx

-
CVE-2018-1270
-
visoka
FALSE
Ranljivost ni specifična za spring-tx

-
CVE-2018-1271
-
srednje
FALSE
Ranljivost ni specifična za spring-tx

-
CVE-2018-1272
-
srednje
FALSE
Ranljivost ni specifična za spring-tx

oporno jedro:1.3.8
-
CVE-2011-5057 (OSSINDEX)

srednje
FASLE
Ranljivost za Struts 2

-
CVE-2012-0391 (OSSINDEX)
CVE-2012-0391
visoka
FALSE
Ranljivost za Struts 2

-
CVE-2014-0094 (OSSINDEX)
CVE-2014-0094
srednje
FALSE
Ranljivost za Struts 2

-
CVE-2014-0113 (OSSINDEX)
CVE-2014-0113
visoka
FALSE
Ranljivost za Struts 2

CVE-2016-1182
3VE-2016-1182
-
visoka
TRUE

-
-
CVE-2011-5057
srednje
FALSE
Ranljivost za Struts 2

-
CVE-2012-0392 (OSSINDEX)
CVE-2012-0392
visoka
FALSE
Ranljivost za Struts 2

-
CVE-2012-0393 (OSSINDEX)
CVE-2012-0393
srednje
FALSE
Ranljivost za Struts 2

CVE-2015-0899
CVE-2015-0899
-
visoka
TRUE

-
CVE-2012-0394
CVE-2012-0394
srednje
FALSE
Ranljivost za Struts 2

-
CVE-2012-0838 (OSSINDEX)
CVE-2012-0838
visoka
FALSE
Ranljivost za Struts 2

-
CVE-2013-1965 (OSSINDEX)
CVE-2013-1965
visoka
FALSE
Ranljivost za Struts 2

-
CVE-2013-1966 (OSSINDEX)
CVE-2013-1966
visoka
FASLE
Ranljivost za Struts 2

-
CVE-2013-2115
CVE-2013-2115
visoka
FASLE
Ranljivost za Struts 2

-
CVE-2013-2134 (OSSINDEX)
CVE-2013-2134
visoka
FASLE
Ranljivost za Struts 2

-
CVE-2013-2135 (OSSINDEX)
CVE-2013-2135
visoka
FASLE
Ranljivost za Struts 2

CVE-2014-0114
CVE-2014-0114
-
visoka
TRUE

-
CVE-2015-2992
CVE-2015-2992
srednje
FALSE
Ranljivost za Struts 2

-
CVE-2016-0785 (OSSINDEX)
CVE-2016-0785
visoka
FALSE
Ranljivost za Struts 2

CVE-2016-1181
CVE-2016-1181
-
visoka
TRUE

-
CVE-2016-4003 (OSSINDEX)
CVE-2016-4003
visoka
FALSE
Ranljivost za Struts 2

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

SONATYPE-2017-0173
-
-
visoka
TRUE

CVE-2017-7672
-
-
visoka
FALSE
Dvojnik CVE-2017-9804

SONATYPE-2016-0127
-
-
visoka
TRUE

oporniki2-jedro:2.3.30
-
CVE-2016-6795
CVE-2016-6795
visoka
TRUE

-
CVE-2017-9787
CVE-2017-9787
visoka
TRUE

-
CVE-2017-9791
CVE-2017-9791
visoka
TRUE

-
CVE-2017-9793
-
visoka
FALSE
Dvojnik CVE-2018-1327

-
CVE-2017-9804
-
visoka
TRUE

-
CVE-2017-9805
CVE-2017-9805
visoka
TRUE

CVE-2016-4003
-
-
srednje
FALSE
Velja za Apache Struts 2.x do 2.3.28, kar je različica 2.3.30. Vendar je glede na opis CVE veljaven za katero koli različico Struts 2, če se uporablja JRE 1.7 ali manj. Očitno so se tukaj odločili, da nas bodo pozavarovali, a izgleda bolj kot LAŽ

-
CVE-2018-1327
CVE-2018-1327
visoka
TRUE

CVE-2017-5638
CVE-2017-5638
CVE-2017-5638
visoka
TRUE
Ista ranljivost, ki so jo leta 2017 izkoristili hekerji Equifax

CVE-2017-12611
CVE-2017-12611
-
visoka
TRUE

CVE-2018-11776
CVE-2018-11776
CVE-2018-11776
visoka
TRUE

struts-taglib:1.3.8
-
CVE-2012-0394
-
srednje
FALSE
Za opornike2-jedro

-
CVE-2013-2115
-
visoka
FALSE
Za opornike2-jedro

-
CVE-2014-0114
-
visoka
FALSE
Za Commons-beanutils

-
CVE-2015-0899
-
visoka
FALSE
Ne velja za taglib

-
CVE-2015-2992
-
srednje
FALSE
Nanaša se na struts2-core

-
CVE-2016-1181
-
visoka
FALSE
Ne velja za taglib

-
CVE-2016-1182
-
visoka
FALSE
Ne velja za taglib

oporniki-strešniki-1.3.8
-
CVE-2012-0394
-
srednje
FALSE
Za opornike2-jedro

-
CVE-2013-2115
-
visoka
FALSE
Za opornike2-jedro

-
CVE-2014-0114
-
visoka
FALSE
Pod Commons-beanutils

-
CVE-2015-0899
-
visoka
FALSE
Ne velja za ploščice

-
CVE-2015-2992
-
srednje
FALSE
Za opornike2-jedro

-
CVE-2016-1181
-
visoka
FALSE
Ne velja za taglib

-
CVE-2016-1182
-
visoka
FALSE
Ne velja za taglib

Vir: www.habr.com

Dodaj komentar