DevSecOps: SCA tööpõhimõtted ja võrdlus. Esimene osa

Kolmandate osapoolte tarkvarakomponentide (Software Composition Analysis – SCA) analüüsi tähtsus arendusprotsessis kasvab koos avatud lähtekoodiga teekide haavatavuste aastaaruannete avaldamisega, mida avaldavad Synopsys, Sonatype, Snyk ja White Source. . Aruande kohaselt Avatud lähtekoodiga turvahaavatavuste olukord 2020 tuvastatud avatud lähtekoodiga haavatavuste arv kasvas 2019. aastal aasta varasemaga võrreldes ligi 1.5 korda, samas kui avatud lähtekoodiga komponente kasutab 60–80% projektidest. Sõltumatult on SCA protsessid OWASP SAMM-i ja BSIMM-i kui küpsusnäitaja eraldi praktika ning 2020. aasta esimesel poolel andis OWASP välja uue OWASP tarkvarakomponentide kontrollistandardi (SCVS), mis pakub parimaid tavasid kolmandate osapoolte komponendid tarneahelas BY.

DevSecOps: SCA tööpõhimõtted ja võrdlus. Esimene osa

Üks illustreerivamaid juhtumeid juhtus Equifaxiga 2017. aasta mais. Tundmatud ründajad said teavet 143 miljoni ameeriklase kohta, sealhulgas täisnimed, aadressid, sotsiaalkindlustuse numbrid ja juhiload. 209 000 juhul sisaldas dokumente ka teavet ohvrite pangakaartide kohta. See leke tekkis Apache Struts 2 (CVE-2017-5638) kriitilise haavatavuse ärakasutamise tulemusena, samas kui parandus avaldati 2017. aasta märtsis. Ettevõttel oli värskenduse installimiseks aega kaks kuud, kuid keegi ei hakanud sellega vaeva nägema.

Selles artiklis käsitletakse SCA läbiviimise tööriista valimise küsimust analüüsitulemuste kvaliteedi seisukohast. Samuti esitatakse tööriistade funktsionaalne võrdlus. CI/CD-sse integreerimise protsess ja integreerimisvõimalused jäetakse järgmistele väljaannetele. OWASP esitles laia valikut tööriistu teie veebisaidil, kuid käesolevas ülevaates puudutame vaid kõige populaarsemat avatud lähtekoodiga tööriista Dependency Check, veidi vähem tuntud avatud lähtekoodiga platvormi Dependency Track ja Enterprise'i lahendust Sonatype Nexus IQ. Samuti mõistame, kuidas need lahendused töötavad, ja võrdleme valepositiivsete tulemustega saadud tulemusi.

DevSecOps: SCA tööpõhimõtted ja võrdlus. Esimene osa

Tööpõhimõte

Sõltuvuskontroll on utiliit (CLI, maven, jenkinsi moodul, ant), mis analüüsib projektifaile, kogub teavet sõltuvuste kohta (paketi nimi, grupitunnus, spetsifikatsiooni pealkiri, versioon...), loob CPE (Common Platform Enumeration) rea. , paketi URL ( PURL) ja tuvastab CPE/PURL-i haavatavused andmebaasidest (NVD, Sonatype OSS Index, NPM Audit API...), misjärel koostab ühekordse aruande HTML-, JSON-, XML-vormingus...

Vaatame, kuidas CPE välja näeb:

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

  • osa: Märge, et komponent on seotud rakendusega (a), operatsioonisüsteemiga (o), riistvaraga (h) (nõutav)
  • Müüja: Toote tootja nimi (nõutav)
  • toode: Toote nimi (nõutav)
  • Versioon: Komponendi versioon (vananenud üksus)
  • Värskenda: Paketi värskendus
  • väljaanne: Pärandversioon (aegunud üksus)
  • Keel: RFC-5646 määratletud keel
  • SW väljaanne: Tarkvara versioon
  • Siht-SW: Tarkvarakeskkond, milles toode töötab
  • Siht-HW: Riistvarakeskkond, milles toode töötab
  • Muud: Tarnija või tooteteave

CPE näide näeb välja selline:

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

Rida tähendab, et CPE versioon 2.3 kirjeldab rakenduse komponenti tootjalt pivotal_software pealkirjaga spring_framework versioon 3.0.0. Kui avame haavatavuse CVE-2014-0225 NVD-s näeme selle CPE mainimist. Esimene probleem, millele peaksite kohe tähelepanu pöörama, on see, et NVD-s olev CVE teatab CPE järgi probleemist raamistikus, mitte konkreetses komponendis. See tähendab, et kui arendajad on raamistikuga tihedalt seotud ja tuvastatud haavatavus ei mõjuta neid mooduleid, mida arendajad kasutavad, peab turvaspetsialist ühel või teisel viisil selle CVE lahti võtma ja mõtlema värskendamisele.

URL-i kasutavad ka SCA tööriistad. Paketi URL-i vorming on järgmine:

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

  • Skeem: Alati on 'pkg', mis näitab, et see on paketi URL (nõutav)
  • Type: Pakendi "tüüp" või paki "protokoll", nt maven, npm, nuget, gem, pypi jne. (Nõutav üksus)
  • Nimeruum: Mõni nime eesliide, näiteks Maveni rühma ID, Dockeri pildi omanik, GitHubi kasutaja või organisatsioon. Valikuline ja oleneb tüübist.
  • Nimi: Paketi nimi (nõutav)
  • Versioon: Paketi versioon
  • Qualifiers: Paketi täiendavad kvalifikatsiooniandmed, nagu OS, arhitektuur, levitamine jne. Valikuline ja tüübispetsiifiline.
  • Alamtee: Täiendav tee paketis paketi juure suhtes

Näiteks:

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

Sõltuvusrada — kohapealne veebiplatvorm, mis aktsepteerib loodud valmismaterjalide loetelu (BOM). CycloneDX и SPDXst valmis spetsifikatsioonid olemasolevate sõltuvuste kohta. See on XML-fail, mis kirjeldab sõltuvusi – nimi, räsid, paketi URL, väljaandja, litsents. Järgmisena sõelub Dependency Track BOM-i, vaatab haavatavuse andmebaasist (NVD, Sonatype OSS Index...) tuvastatud sõltuvustele saadaolevaid CVE-sid, misjärel koostab graafikud, arvutab mõõdikuid, värskendades regulaarselt andmeid komponentide haavatavuse oleku kohta. .

Näide selle kohta, kuidas BOM XML-vormingus välja näeb:

<?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-i saab kasutada mitte ainult Dependency Tracki sisendparameetritena, vaid ka tarneahelas tarkvarakomponentide inventeerimiseks, näiteks kliendile tarkvara pakkumiseks. 2014. aastal tehti USA-s isegi seadus ettepanek "2014. aasta kübertarneahela juhtimise ja läbipaistvuse seadus", kus oli kirjas, et tarkvara ostmisel mis tahes riik. Asutus peab haavatavate komponentide kasutamise vältimiseks taotlema BOM-i, kuid seadus ei ole veel jõustunud.

Naastes SCA juurde, on Dependency Trackil valmis integratsioonid teavitusplatvormidega, nagu Slack, ja haavatavuse haldussüsteemidega, nagu Kenna Security. Samuti tasub öelda, et Dependency Track tuvastab muuhulgas pakettide aegunud versioonid ja annab teavet litsentside kohta (tänu SPDX-i toele).

Kui me räägime konkreetselt SCA kvaliteedist, siis siin on põhimõtteline erinevus.

Dependency Track ei aktsepteeri projekti sisendina, vaid pigem BOM-i. See tähendab, et kui tahame projekti testida, peame esmalt genereerima bom.xml, näiteks kasutades CycloneDX. Seega sõltub Dependency Track otseselt CycloneDX-ist. Samal ajal võimaldab see kohandamist. Nii kirjutas OZONi meeskond CycloneDX moodul Golangi projektide BOM-failide kokkupanemiseks edasiseks skannimiseks Dependency Tracki kaudu.

Nexuse IQ on Sonatype'i kaubanduslik SCA-lahendus, mis on osa Sonatype'i ökosüsteemist, mis hõlmab ka Nexuse hoidlahaldurit. Nexus IQ saab sisendiks aktsepteerida nii sõjaarhiive (Java projektide jaoks) veebiliidese või API kaudu kui ka BOM-i, kui teie organisatsioon pole veel CycloneDX-ilt uuele lahendusele üle läinud. Erinevalt avatud lähtekoodiga lahendustest viitab IQ mitte ainult CP/PURL-ile tuvastatud komponendile ja vastavale haavatavusele andmebaasis, vaid võtab arvesse ka enda uuringuid, näiteks haavatava funktsiooni või klassi nime. IQ mehhanismidest tuleb juttu hiljem tulemuste analüüsis.

Võtame kokku mõned funktsionaalsed funktsioonid ja kaalume analüüsimiseks ka toetatud keeli:

Keel
Nexuse IQ
Sõltuvuskontroll
Sõltuvusrada

Java
+
+
+

C / C ++
+
+
-

C#
+
+
-

.Net
+
+
+

erlang
-
-
+

JavaScript (NodeJS)
+
+
+

PHP
+
+
+

Python
+
+
+

rubiin
+
+
+

Perl
-
-
-

Scala
+
+
+

Eesmärk C
+
+
-

Kiire
+
+
-

R
+
-
-

Go
+
+
+

Funktsionaalsus

Funktsionaalsus
Nexuse IQ
Sõltuvuskontroll
Sõltuvusrada

Võimalus tagada lähtekoodis kasutatud komponentide litsentsitud puhtuse kontrollimine
+
-
+

Võimalus skannida ja analüüsida haavatavusi ning litsentsida Dockeri piltide puhtust
+ Integratsioon Clairiga
-
-

Võimalus konfigureerida turvapoliitikat avatud lähtekoodiga teekide kasutamiseks
+
-
-

Võimalus skannida avatud lähtekoodiga hoidlaid haavatavate komponentide leidmiseks
+ RubyGems, Maven, NPM, Nuget, Pypi, Conan, Bower, Conda, Go, p2, R, Yum, Helm, Docker, CocoaPods, Git LFS
-
+ Hex, RubyGems, Maven, NPM, Nuget, Pypi

Spetsialiseerunud uurimisrühma olemasolu
+
-
-

Suletud ahelaga töö
+
+
+

Kolmandate osapoolte andmebaaside kasutamine
+ Suletud Sonatype andmebaas
+ Sonatype OSS, NPM avalikud nõustajad
+ Sonatype OSS, NPM Public Advisors, RetireJS, VulnDB, tugi oma haavatavuse andmebaasile

Võimalus filtreerida avatud lähtekoodiga komponente, kui proovite laadida arendusahelasse vastavalt konfigureeritud poliitikatele
+
-
-

Soovitused haavatavuste parandamiseks, paranduste linkide kättesaadavus
+
+- (sõltub avalikes andmebaasides olevast kirjeldusest)
+- (sõltub avalikes andmebaasides olevast kirjeldusest)

Avastatud haavatavuste järjestamine raskusastme järgi
+
+
+

Rollipõhine juurdepääsumudel
+
-
+

CLI tugi
+
+
+- (ainult CycloneDX jaoks)

Haavatavustest valimi võtmine/sorteerimine vastavalt määratletud kriteeriumidele
+
-
+

Armatuurlaud rakenduse oleku järgi
+
-
+

Aruannete genereerimine PDF-vormingus
+
-
-

Aruannete genereerimine JSONCSV-vormingus
+
+
-

vene keele tugi
-
-
-

Integreerimisvõimalused

Integratsioon
Nexuse IQ
Sõltuvuskontroll
Sõltuvusrada

LDAP/Active Directory integreerimine
+
-
+

Integratsioon pideva integratsioonisüsteemiga Bamboo
+
-
-

Integratsioon pideva integratsioonisüsteemiga TeamCity
+
-
-

Integratsioon pideva integratsioonisüsteemiga GitLab
+
+- (GitLabi pistikprogrammina)
+

Integratsioon pideva integratsioonisüsteemiga Jenkins
+
+
+

IDE pistikprogrammide saadavus
+ IntelliJ, Eclipse, Visual Studio
-
-

Tööriista kohandatud integreerimise tugi veebiteenuste (API) kaudu
+
-
+

Sõltuvuskontroll

Esimene algus

Käivitame tahtlikult haavatavas rakenduses sõltuvuskontrolli DVJA.

Selleks kasutame Sõltuvuskontrolli Maveni pistikprogramm:

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

Selle tulemusena kuvatakse sihtkataloogis dependency-check-report.html.

DevSecOps: SCA tööpõhimõtted ja võrdlus. Esimene osa

Avame faili. Pärast kokkuvõtlikku teavet haavatavuste koguarvu kohta näeme teavet kõrge raskusastme ja usaldusväärsusega turvaaukude kohta, mis näitab paketti, CPE-d ja CVE-de arvu.

Edasi tuleb üksikasjalikum teave, eelkõige otsuse tegemise alus (tõendid), see tähendab teatud BOM.

DevSecOps: SCA tööpõhimõtted ja võrdlus. Esimene osa

Järgmisena tuleb CPE, PURL ja CVE kirjeldus. Muide, parandussoovitusi pole lisatud nende puudumise tõttu NVD andmebaasis.

DevSecOps: SCA tööpõhimõtted ja võrdlus. Esimene osa

Skannimistulemuste süstemaatiliseks vaatamiseks saate konfigureerida Nginxi minimaalsete sätetega või saata tekkinud vead veahaldussüsteemi, mis toetab konnektoreid sõltuvuse kontrollimiseks. Näiteks Defect Dojo.

Sõltuvusrada

Paigaldamine

Dependency Track on omakorda veebipõhine kuvagraafikutega platvorm, mistõttu ei teki siinkohal teravat probleemi, mis puudutab defektide talletamist kolmanda osapoole lahenduses.
Installimiseks toetatavad skriptid on: Docker, WAR, Executable WAR.

Esimene algus

Me läheme töötava teenuse URL-ile. Logime sisse admin/admin kaudu, muudame sisselogimise ja parooli ning jõuame seejärel armatuurlauale. Järgmisena loome Java testrakenduse projekti Avaleht/Projektid → Loo projekt . Võtame näiteks DVJA.

DevSecOps: SCA tööpõhimõtted ja võrdlus. Esimene osa

Kuna Dependency Track saab sisendina aktsepteerida ainult BOM-i, tuleb see BOM tuua. Kasutame ära CycloneDX Maveni pistikprogramm:

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

Saame bom.xml ja laadime faili loodud projekti DVJA → Sõltuvused → Laadi BOM üles.

Läheme jaotisse Administreerimine → Analüsaatorid. Mõistame, et meil on lubatud ainult sisemine analüsaator, mis hõlmab ka NVD-d. Ühendame ka Sonatype OSS Indexi.

DevSecOps: SCA tööpõhimõtted ja võrdlus. Esimene osa

Seega saame oma projekti kohta järgmise pildi:

DevSecOps: SCA tööpõhimõtted ja võrdlus. Esimene osa

Loendist leiate ka ühe Sonatype OSS-i jaoks kohaldatava haavatavuse:

DevSecOps: SCA tööpõhimõtted ja võrdlus. Esimene osa

Peamine pettumus oli see, et Dependency Track ei aktsepteeri enam Dependency Check xml aruandeid. Sõltuvuskontrolli integratsiooni uusimad toetatud versioonid olid 1.0.0–4.0.2, samas kui ma testisin versiooni 5.3.2.

siin on video (ja siin), kui see veel võimalik oli.

Nexuse IQ

Esimene algus

Nexus IQ installimine pärineb arhiivist dokumentatsioon, kuid ehitasime nendel eesmärkidel Dockeri kujutise.

Pärast konsooli sisselogimist peate looma organisatsiooni ja rakenduse.

DevSecOps: SCA tööpõhimõtted ja võrdlus. Esimene osa

DevSecOps: SCA tööpõhimõtted ja võrdlus. Esimene osa

DevSecOps: SCA tööpõhimõtted ja võrdlus. Esimene osa

Nagu näha, on seadistamine IQ puhul mõnevõrra keerulisem, kuna peame looma ka erinevatele “etappidele” (dev, build, stage, release) rakendatavad poliitikad. See on vajalik haavatavate komponentide blokeerimiseks, kui need liiguvad läbi torujuhtme tootmisele lähemale, või blokeerimiseks niipea, kui arendajad on need alla laadinud Nexus Reposse.

Et tunda erinevust avatud lähtekoodiga ja ettevõtte vahel, tehkem sama skannimist Nexus IQ kaudu samal viisil Maven pistikprogramm, olles eelnevalt loonud NexusIQ liideses testrakenduse 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>

Järgige IQ veebiliideses loodud aruande URL-i:

DevSecOps: SCA tööpõhimõtted ja võrdlus. Esimene osa

Siin näete kõiki eeskirjade rikkumisi, mis viitavad erinevatele olulisuse tasemetele (alates teabest kuni turvalisuse kriitiliseni). Komponendi kõrval olev täht D tähendab, et komponent on Otsesõltuvus ja T-täht komponendi kõrval, et komponent on Transitive Dependency ehk see on transitiivne.

Muide, aruanne Avatud lähtekoodiga turvalisuse aruanne 2020 Snyk teatab, et enam kui 70% Node.js-i, Java ja Ruby avatud lähtekoodiga turvaaukudest on transitiivsetes sõltuvustes.

Kui avame mõne Nexus IQ eeskirjade rikkumise, näeme komponendi kirjeldust ja versioonigraafikut, mis näitab praeguse versiooni asukohta ajagraafikul ja seda, millal haavatavus lakkab. olla haavatav. Küünalde kõrgus graafikul näitab selle komponendi kasutamise populaarsust.

DevSecOps: SCA tööpõhimõtted ja võrdlus. Esimene osa

Kui lähete turvaaukude jaotisse ja laiendate CVE-d, saate lugeda selle haavatavuse kirjeldust, soovitusi selle kõrvaldamiseks, samuti põhjust, miks seda komponenti rikuti, st klassi olemasolu. DiskFileitem.class.

DevSecOps: SCA tööpõhimõtted ja võrdlus. Esimene osa

DevSecOps: SCA tööpõhimõtted ja võrdlus. Esimene osa

Võtame kokku ainult need, mis on seotud kolmanda osapoole Java komponentidega, eemaldades js komponendid. Sulgudes märgime väljaspool NVD-d leitud haavatavuste arvu.

Nexuse IQ kokku:

  • Skaneeritud sõltuvused: 62
  • Haavatavad sõltuvused: 16
  • Leitud haavatavused: 42 (8 sonatype db)

Kogu sõltuvuskontroll:

  • Skaneeritud sõltuvused: 47
  • Haavatavad sõltuvused: 13
  • Leitud haavatavused: 91 (14 sonatype oss)

Kogu sõltuvusrada:

  • Skaneeritud sõltuvused: 59
  • Haavatavad sõltuvused: 10
  • Leitud haavatavused: 51 (1 sonatype oss)

Järgmiste sammude käigus analüüsime saadud tulemusi ja selgitame välja, milline neist haavatavustest on tõeline defekt ja milline valepositiivne.

Vastutusest loobumine

See ülevaade ei ole vaieldamatu tõde. Autoril ei olnud eesmärki teiste taustal eraldi pilli esile tõsta. Ülevaate eesmärk oli näidata SCA tööriistade töömehhanisme ja võimalusi nende tulemuste kontrollimiseks.

Tulemuste võrdlus

Tingimused:

Kolmanda osapoole komponentide haavatavuste valepositiivne tulemus on:

  • CVE mittevastavus tuvastatud komponendiga
  • Näiteks kui raamistikus struts2 tuvastatakse haavatavus ja tööriist osutab tugipostide raamistiku komponendile, mille puhul see haavatavus ei kehti, on see valepositiivne.
  • CVE mittevastavus komponendi tuvastatud versiooniga
  • Näiteks on haavatavus seotud Pythoni versiooniga > 3.5 ja tööriist märgib haavatavaks versiooni 2.7 – see on valepositiivne, kuna tegelikult puudutab haavatavus ainult 3.x tooteharu
  • CVE duplikaat
  • Näiteks kui SCA määrab CVE, mis võimaldab RCE-d, siis SCA määrab sama komponendi jaoks CVE, mis kehtib Cisco toodetele, mida see RCE mõjutab. Sel juhul on see valepositiivne.
  • Näiteks leiti vedruveebi komponendist CVE, mille järel SCA osutab samale CVE-le Spring Frameworki teistes komponentides, samas kui CVE-l pole teiste komponentidega midagi pistmist. Sel juhul on see valepositiivne.

Uuringu objektiks oli avatud lähtekoodiga projekt DVJA. Uuring hõlmas ainult Java komponente (ilma js-ita).

Kokkuvõtlikud tulemused

Liigume otse tuvastatud haavatavuste käsitsi ülevaatamise tulemuste juurde. Iga CVE täieliku aruande leiate lisast.

Kokkuvõtlikud tulemused kõigi haavatavuste kohta:

Parameeter
Nexuse IQ
Sõltuvuskontroll
Sõltuvusrada

Tuvastatud haavatavused kokku
42
91
51

Valesti tuvastatud haavatavused (valepositiivne)
2 (4.76%)
62 (68,13%)
29 (56.86%)

Asjakohaseid turvaauke ei leitud (valenegatiivne)
10
20
27

Tulemuste kokkuvõte komponentide kaupa:

Parameeter
Nexuse IQ
Sõltuvuskontroll
Sõltuvusrada

Tuvastatud komponendid kokku
62
47
59

Kokku haavatavad komponendid
16
13
10

Valesti tuvastatud haavatavad komponendid (valepositiivne)
1
5
0

Valesti tuvastatud haavatavad komponendid (valepositiivne)
0
6
6

Koostame visuaalsed graafikud, et hinnata valepositiivsete ja valenegatiivsete suhet turvaaukude koguarvusse. Komponendid on tähistatud horisontaalselt ja neis tuvastatud haavatavused vertikaalselt.

DevSecOps: SCA tööpõhimõtted ja võrdlus. Esimene osa

DevSecOps: SCA tööpõhimõtted ja võrdlus. Esimene osa

DevSecOps: SCA tööpõhimõtted ja võrdlus. Esimene osa

Võrdluseks, Sonatype'i meeskond viis läbi sarnase uuringu, testides OWASP-i sõltuvuskontrolli abil 1531 komponendist koosnevat projekti. Nagu näeme, on müra ja õigete vastuste suhe võrreldav meie tulemustega.

DevSecOps: SCA tööpõhimõtted ja võrdlus. Esimene osa
Allikas: www.sonatype.com/why-precision-matters-ebook

Vaatame mõningaid meie skannimistulemuste CVE-sid, et mõista nende tulemuste põhjust.

Rohkem

№ 1

Vaatame kõigepealt mõnda huvitavat punkti Sonatype Nexus IQ kohta.

Nexus IQ juhib tähelepanu deserialiseerimise probleemile, mis on seotud võimalusega teha kevadraamistikus mitu korda RCE-d. CVE-2016-1000027 kevadel-veebis: 3.0.5 esimest korda ja CVE-2011-2894 kevadkontekstis: 3.0.5 ja vedrutuum: 3.0.5. Esialgu näib, et haavatavus on mitme CVE vahel dubleeritud. Sest kui vaadata NVD andmebaasis CVE-2016-1000027 ja CVE-2011-2894, tundub, et kõik on ilmne

Komponent
Haavatavus

kevad-veeb:3.0.5
CVE-2016-1000027

kevad-kontekst:3.0.5
CVE-2011-2894

vedru südamik: 3.0.5
CVE-2011-2894

Kirjeldus CVE-2011-2894 NVD-st:
DevSecOps: SCA tööpõhimõtted ja võrdlus. Esimene osa

Kirjeldus CVE-2016-1000027 NVD-st:
DevSecOps: SCA tööpõhimõtted ja võrdlus. Esimene osa

CVE-2011-2894 ise on üsna kuulus. Aruandes Valge allikas 2011 see CVE tunnistati üheks levinumaks. CVE-2016-100027 kirjeldusi on NVD-s põhimõtteliselt vähe ja see näib olevat rakendatav ainult Spring Framework 4.1.4 jaoks. Heidame pilgu peale viide ja siin saab kõik enam-vähem selgeks. Alates Vastuvõetavad artiklid Mõistame, et lisaks haavatavusele RemoteInvocationSerializingExporter CVE-2011-2894-s on haavatavust täheldatud HttpInvokerServiceExporter. Seda ütleb meile Nexus IQ:

DevSecOps: SCA tööpõhimõtted ja võrdlus. Esimene osa

NVD-s aga midagi sellist pole, mistõttu saavad sõltuvuskontrolli ja sõltuvusjälgi mõlemad valenegatiivsed tulemused.

Ka CVE-2011-2894 kirjeldusest võib aru saada, et haavatavus on tõepoolest olemas nii vedrukontekstis:3.0.5 kui ka vedrutuum:3.0.5. Kinnituse selle kohta leiate selle haavatavuse avastaja artiklist.

№ 2

Komponent
Haavatavus
Tulemus

toed2-tuumalised: 2.3.30
CVE-2016-4003
FALSE

Kui uurime haavatavust CVE-2016-4003, saame aru, et see parandati versioonis 2.3.28, kuid Nexus IQ teatab sellest meile. Haavatavuse kirjelduses on märge:

DevSecOps: SCA tööpõhimõtted ja võrdlus. Esimene osa

See tähendab, et haavatavus eksisteerib ainult koos JRE vananenud versiooniga, mille eest nad otsustasid meid hoiatada. Sellegipoolest peame seda valepositiivseks, kuigi mitte kõige halvemaks.

№ 3

Komponent
Haavatavus
Tulemus

xwork-core: 2.3.30
CVE-2017-9804
TRUE

xwork-core: 2.3.30
CVE-2017-7672
FALSE

Kui vaatame CVE-2017-9804 ja CVE-2017-7672 kirjeldusi, saame aru, et probleem on URLValidator class, mille CVE-2017-9804 tuleneb CVE-2017-7672. Teise haavatavuse olemasolu ei kanna muud kasulikku koormust peale selle, et selle raskusaste on kõrge, seega võime seda pidada tarbetuks müraks.

Üldiselt ei leitud Nexus IQ puhul muid valepositiivseid tulemusi.

№ 4

On mitmeid asju, mis tõstavad IQ teiste lahenduste seast esile.

Komponent
Haavatavus
Tulemus

kevad-veeb:3.0.5
CVE-2020-5398
TRUE

NVD-s sisalduv CVE väidab, et see kehtib ainult versioonide 5.2.x enne 5.2.3, 5.1.x enne 5.1.13 ja versioonide 5.0.x enne 5.0.16 kohta, kui vaatame Nexus IQ CVE kirjeldust , siis näeme järgmist:
Nõuandev kõrvalekaldeteade: Sonatype'i turbeuuringute meeskond avastas, et see haavatavus lisati versioonis 3.0.2.RELEASE, mitte versioonis 5.0.x, nagu on märgitud nõuandes.

Sellele järgneb selle haavatavuse PoC, mis väidab, et see on versioonis 3.0.5 olemas.

Dependency Check ja Dependency Track saadetakse valenegatiivne.

№ 5

Vaatame sõltuvuskontrolli ja sõltuvusraja valepositiivseid tulemusi.

Sõltuvuskontroll paistab silma selle poolest, et see kajastab neid CVE-sid, mis kehtivad kogu raamistiku kohta NVD-s, nende komponentidega, millele need CVE-d ei kehti. See puudutab CVE-2012-0394, CVE-2013-2115, CVE-2014-0114, CVE-2015-0899, CVE-2015-2992, CVE-2016-1181, CVE-2016-1182, mis sõltuvad kontrollist ” to struts-taglib:1.3.8 ja struts-tiles-1.3.8. Nendel komponentidel pole midagi pistmist CVE-s kirjeldatuga – päringu töötlemine, lehe valideerimine jne. See on tingitud asjaolust, et nende CVE-de ja komponentide ühisosa on ainult raamistik, mistõttu Dependency Check pidas seda haavatavaks.

Sama olukord on vedru-tx:3.0.5 ja sarnane olukord struts-core:1.3.8. Struts-core jaoks on Dependency Check ja Dependency Track leidnud palju turvaauke, mis on tegelikult rakendatavad struts2-core puhul, mis on sisuliselt eraldi raamistik. Antud juhul sai Nexus IQ pildist õigesti aru ja tema väljastatud CVE-des näitas, et struts-core on jõudnud eluea lõppu ja vaja üle minna struts2-core peale.

№ 6

Mõnes olukorras on ebaõiglane tõlgendada ilmset sõltuvuskontrolli ja sõltuvusjälgi viga. Eelkõige CVE-2013-4152, CVE-2013-6429, CVE-2013-6430, CVE-2013-7315, CVE-2014-0054, CVE-2014-0225, CVE-2014-0225, mis sõltuvad kontrollist ja sõltuvusest omistatud spring-core:3.0.5 kuulub tegelikult vedru-veebi:3.0.5. Samal ajal leidis osa neist CVE-dest ka Nexus IQ, kuid IQ tuvastas need õigesti mõne teise komponendiga. Kuna Spring-core'is neid turvaauke ei leitud, ei saa väita, et need ei ole põhimõtteliselt raamistikus ja avatud lähtekoodiga tööriistad juhtisid neile haavatavustele õigustatult tähelepanu (nad jätsid lihtsalt natuke puudu).

Järeldused

Nagu näeme, ei anna tuvastatud turvaaukude usaldusväärsuse määramine käsitsi ülevaatuse teel üheseid tulemusi, mistõttu tekivad vastuolulised probleemid. Tulemused näitavad, et Nexus IQ lahendusel on madalaim valepositiivsete tulemuste määr ja suurim täpsus.

Esiteks on see tingitud asjaolust, et Sonatype'i meeskond laiendas oma andmebaasides NVD iga CVE haavatavuse kirjeldust, märkides komponentide konkreetse versiooni haavatavused kuni klassi või funktsioonini välja, viies läbi täiendavaid uuringuid (näiteks , kontrollides haavatavusi vanematel tarkvaraversioonidel).

Olulist mõju tulemustele mängivad ka need haavatavused, mida NVD-s ei olnud, kuid mis on siiski olemas Sonatype andmebaasis SONATYPE märgiga. Aruande kohaselt Avatud lähtekoodiga turvahaavatavuste olukord 2020 45% avastatud avatud lähtekoodiga haavatavustest ei teatata NVD-le. WhiteSource'i andmebaasi järgi avaldatakse seal ainult 29% kõigist väljaspool NVD-d teatatud avatud lähtekoodiga turvaaukudest, mistõttu on oluline turvaauke otsida ka teistest allikatest.

Selle tulemusena tekitab sõltuvuskontroll palju müra, jättes puudu mõned haavatavad komponendid. Dependency Track tekitab vähem müra ja tuvastab suure hulga komponente, mis ei kahjusta veebiliideses visuaalselt silmi.

Praktika näitab aga, et avatud lähtekoodiga peaks saama esimene samm küpse DevSecOpsi poole. Esimene asi, millele SCA arendusse integreerimisel mõelda, on protsessid, nimelt mõelda koos juhtkonna ja sellega seotud osakondadega, millised peaksid välja nägema ideaalsed protsessid sinu organisatsioonis. Võib selguda, et teie organisatsiooni jaoks katab Dependency Check või Dependency Track algul kõik ärivajadused ning ettevõtte lahendused on arendatavate rakenduste keerukuse tõttu loogiline jätk.

Lisa A: Komponentide tulemused
Sümbolid:

  • Kõrge – kõrge ja kriitilise taseme haavatavused komponendis
  • Keskmine — komponendi keskmise kriitilisuse taseme haavatavused
  • TRUE – tõeline positiivne probleem
  • VÄÄR – valepositiivne probleem

Komponent
Nexuse IQ
Sõltuvuskontroll
Sõltuvusrada
Tulemus

dom4j: 1.6.1
Suur
Suur
Suur
TRUE

log4j-tuum: 2.3
Suur
Suur
Suur
TRUE

log4j: 1.2.14
Suur
Suur
-
TRUE

ühisvarad-kogud:3.1
Suur
Suur
Suur
TRUE

commons-faili üleslaadimine:1.3.2
Suur
Suur
Suur
TRUE

commons-beanutils:1.7.0
Suur
Suur
Suur
TRUE

commons-codec: 1:10
Keskmine
-
-
TRUE

mysql-connector-java: 5.1.42
Suur
Suur
Suur
TRUE

vedru-väljendus:3.0.5
Suur
komponenti ei leitud

TRUE

kevad-veeb:3.0.5
Suur
komponenti ei leitud
Suur
TRUE

kevad-kontekst:3.0.5
Keskmine
komponenti ei leitud
-
TRUE

vedru südamik: 3.0.5
Keskmine
Suur
Suur
TRUE

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

vedru-tx: 3.0.5
-
Suur
-
FALSE

tugipostid: 1.3.8
Suur
Suur
Suur
TRUE

xwork-core: 2.3.30
Suur
-
-
TRUE

struts2-core: 2.3.30
Suur
Suur
Suur
TRUE

struts-taglib:1.3.8
-
Suur
-
FALSE

toed-plaadid-1.3.8
-
Suur
-
FALSE

Lisa B: haavatavuse tulemused
Sümbolid:

  • Kõrge – kõrge ja kriitilise taseme haavatavused komponendis
  • Keskmine — komponendi keskmise kriitilisuse taseme haavatavused
  • TRUE – tõeline positiivne probleem
  • VÄÄR – valepositiivne probleem

Komponent
Nexuse IQ
Sõltuvuskontroll
Sõltuvusrada
Tõsidus
Tulemus
Kommentaar

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

CVE-2020-10683
CVE-2020-10683
CVE-2020-10683
Suur
TRUE

log4j-tuum: 2.3
CVE-2017-5645
CVE-2017-5645
CVE-2017-5645
Suur
TRUE

CVE-2020-9488
CVE-2020-9488
CVE-2020-9488
Madal
TRUE

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

-
CVE-2020-9488
-
Madal
TRUE

SONATÜÜP-2010-0053
-
-
Suur
TRUE

ühisvarad-kogud:3.1
-
CVE-2015-6420
CVE-2015-6420
Suur
FALSE
RCE duplikaadid (OSSINDEX)

-
CVE-2017-15708
CVE-2017-15708
Suur
FALSE
RCE duplikaadid (OSSINDEX)

SONATÜÜP-2015-0002
RCE (OSSINDEX)
RCE (OSSINDEX)
Suur
TRUE

commons-faili üleslaadimine:1.3.2
CVE-2016-1000031
CVE-2016-1000031
CVE-2016-1000031
Suur
TRUE

SONATÜÜP-2014-0173
-
-
Keskmine
TRUE

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

-
CVE-2019-10086
CVE-2019-10086
Suur
FALSE
Haavatavus kehtib ainult versioonide 1.9.2+ puhul

commons-codec: 1:10
SONATÜÜP-2012-0050
-
-
Keskmine
TRUE

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

CVE-2019-2692
CVE-2019-2692
-
Keskmine
TRUE

-
CVE-2020-2875
-
Keskmine
FALSE
Sama haavatavus nagu CVE-2019-2692, kuid märkusega "ründed võivad märkimisväärselt mõjutada täiendavaid tooteid"

-
CVE-2017-15945
-
Suur
FALSE
Pole asjakohane mysql-connector-java puhul

-
CVE-2020-2933
-
Madal
FALSE
CVE-2020-2934 duplikaat

CVE-2020-2934
CVE-2020-2934
-
Keskmine
TRUE

vedru-väljendus:3.0.5
CVE-2018-1270
komponenti ei leitud
-
Suur
TRUE

CVE-2018-1257
-
-
Keskmine
TRUE

kevad-veeb:3.0.5
CVE-2016-1000027
komponenti ei leitud
-
Suur
TRUE

CVE-2014-0225
-
CVE-2014-0225
Suur
TRUE

CVE-2011-2730
-
-
Suur
TRUE

-
-
CVE-2013-4152
Keskmine
TRUE

CVE-2018-1272
-
-
Suur
TRUE

CVE-2020-5398
-
-
Suur
TRUE
Illustreeriv näide IQ kasuks: "Sonatype'i turbeuuringute meeskond avastas, et see haavatavus võeti kasutusele versioonis 3.0.2.RELEASE, mitte versioonis 5.0.x, nagu nõuandes öeldud."

CVE-2013-6429
-
-
Keskmine
TRUE

CVE-2014-0054
-
CVE-2014-0054
Keskmine
TRUE

CVE-2013-6430
-
-
Keskmine
TRUE

kevad-kontekst:3.0.5
CVE-2011-2894
komponenti ei leitud
-
Keskmine
TRUE

vedru südamik: 3.0.5
-
CVE-2011-2730
CVE-2011-2730
Suur
TRUE

CVE-2011-2894
CVE-2011-2894
CVE-2011-2894
Keskmine
TRUE

-
-
CVE-2013-4152
Keskmine
FALSE
Sama haavatavuse duplikaat kevadveebis

-
CVE-2013-4152
-
Keskmine
FALSE
See haavatavus on seotud vedruveebi komponendiga

-
CVE-2013-6429
CVE-2013-6429
Keskmine
FALSE
See haavatavus on seotud vedruveebi komponendiga

-
CVE-2013-6430
-
Keskmine
FALSE
See haavatavus on seotud vedruveebi komponendiga

-
CVE-2013-7315
CVE-2013-7315
Keskmine
FALSE
LÕHENDATUD CVE-2013-4152-st. + Haavatavus on seotud vedruveebi komponendiga

-
CVE-2014-0054
CVE-2014-0054
Keskmine
FALSE
See haavatavus on seotud vedruveebi komponendiga

-
CVE-2014-0225
-
Suur
FALSE
See haavatavus on seotud vedruveebi komponendiga

-
-
CVE-2014-0225
Suur
FALSE
Sama haavatavuse duplikaat kevadveebis

-
CVE-2014-1904
CVE-2014-1904
Keskmine
FALSE
See haavatavus on seotud komponendiga spring-web-mvc

-
CVE-2014-3625
CVE-2014-3625
Keskmine
FALSE
See haavatavus on seotud komponendiga spring-web-mvc

-
CVE-2016-9878
CVE-2016-9878
Suur
FALSE
See haavatavus on seotud komponendiga spring-web-mvc

-
CVE-2018-1270
CVE-2018-1270
Suur
FALSE
Kevadekspressimiseks/kevad-sõnumiteks

-
CVE-2018-1271
CVE-2018-1271
Keskmine
FALSE
See haavatavus on seotud komponendiga spring-web-mvc

-
CVE-2018-1272
CVE-2018-1272
Suur
TRUE

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

SONATÜÜP-2015-0327
-
-
Madal
TRUE

struts2-config-browser-plugin:2.3.30
SONATÜÜP-2016-0104
-
-
Keskmine
TRUE

vedru-tx: 3.0.5
-
CVE-2011-2730
-
Suur
FALSE
Haavatavus ei ole kevad-tx-i spetsiifiline

-
CVE-2011-2894
-
Suur
FALSE
Haavatavus ei ole kevad-tx-i spetsiifiline

-
CVE-2013-4152
-
Keskmine
FALSE
Haavatavus ei ole kevad-tx-i spetsiifiline

-
CVE-2013-6429
-
Keskmine
FALSE
Haavatavus ei ole kevad-tx-i spetsiifiline

-
CVE-2013-6430
-
Keskmine
FALSE
Haavatavus ei ole kevad-tx-i spetsiifiline

-
CVE-2013-7315
-
Keskmine
FALSE
Haavatavus ei ole kevad-tx-i spetsiifiline

-
CVE-2014-0054
-
Keskmine
FALSE
Haavatavus ei ole kevad-tx-i spetsiifiline

-
CVE-2014-0225
-
Suur
FALSE
Haavatavus ei ole kevad-tx-i spetsiifiline

-
CVE-2014-1904
-
Keskmine
FALSE
Haavatavus ei ole kevad-tx-i spetsiifiline

-
CVE-2014-3625
-
Keskmine
FALSE
Haavatavus ei ole kevad-tx-i spetsiifiline

-
CVE-2016-9878
-
Suur
FALSE
Haavatavus ei ole kevad-tx-i spetsiifiline

-
CVE-2018-1270
-
Suur
FALSE
Haavatavus ei ole kevad-tx-i spetsiifiline

-
CVE-2018-1271
-
Keskmine
FALSE
Haavatavus ei ole kevad-tx-i spetsiifiline

-
CVE-2018-1272
-
Keskmine
FALSE
Haavatavus ei ole kevad-tx-i spetsiifiline

tugipostid: 1.3.8
-
CVE-2011-5057 (OSSINDEX)

Keskmine
FASLE
Haavatavus Struts 2 suhtes

-
CVE-2012-0391 (OSSINDEX)
CVE-2012-0391
Suur
FALSE
Haavatavus Struts 2 suhtes

-
CVE-2014-0094 (OSSINDEX)
CVE-2014-0094
Keskmine
FALSE
Haavatavus Struts 2 suhtes

-
CVE-2014-0113 (OSSINDEX)
CVE-2014-0113
Suur
FALSE
Haavatavus Struts 2 suhtes

CVE-2016-1182
3VE-2016-1182
-
Suur
TRUE

-
-
CVE-2011-5057
Keskmine
FALSE
Haavatavus Struts 2 suhtes

-
CVE-2012-0392 (OSSINDEX)
CVE-2012-0392
Suur
FALSE
Haavatavus Struts 2 suhtes

-
CVE-2012-0393 (OSSINDEX)
CVE-2012-0393
Keskmine
FALSE
Haavatavus Struts 2 suhtes

CVE-2015-0899
CVE-2015-0899
-
Suur
TRUE

-
CVE-2012-0394
CVE-2012-0394
Keskmine
FALSE
Haavatavus Struts 2 suhtes

-
CVE-2012-0838 (OSSINDEX)
CVE-2012-0838
Suur
FALSE
Haavatavus Struts 2 suhtes

-
CVE-2013-1965 (OSSINDEX)
CVE-2013-1965
Suur
FALSE
Haavatavus Struts 2 suhtes

-
CVE-2013-1966 (OSSINDEX)
CVE-2013-1966
Suur
FASLE
Haavatavus Struts 2 suhtes

-
CVE-2013-2115
CVE-2013-2115
Suur
FASLE
Haavatavus Struts 2 suhtes

-
CVE-2013-2134 (OSSINDEX)
CVE-2013-2134
Suur
FASLE
Haavatavus Struts 2 suhtes

-
CVE-2013-2135 (OSSINDEX)
CVE-2013-2135
Suur
FASLE
Haavatavus Struts 2 suhtes

CVE-2014-0114
CVE-2014-0114
-
Suur
TRUE

-
CVE-2015-2992
CVE-2015-2992
Keskmine
FALSE
Haavatavus Struts 2 suhtes

-
CVE-2016-0785 (OSSINDEX)
CVE-2016-0785
Suur
FALSE
Haavatavus Struts 2 suhtes

CVE-2016-1181
CVE-2016-1181
-
Suur
TRUE

-
CVE-2016-4003 (OSSINDEX)
CVE-2016-4003
Suur
FALSE
Haavatavus Struts 2 suhtes

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

SONATÜÜP-2017-0173
-
-
Suur
TRUE

CVE-2017-7672
-
-
Suur
FALSE
CVE-2017-9804 duplikaat

SONATÜÜP-2016-0127
-
-
Suur
TRUE

toed2-tuumalised: 2.3.30
-
CVE-2016-6795
CVE-2016-6795
Suur
TRUE

-
CVE-2017-9787
CVE-2017-9787
Suur
TRUE

-
CVE-2017-9791
CVE-2017-9791
Suur
TRUE

-
CVE-2017-9793
-
Suur
FALSE
CVE-2018-1327 duplikaat

-
CVE-2017-9804
-
Suur
TRUE

-
CVE-2017-9805
CVE-2017-9805
Suur
TRUE

CVE-2016-4003
-
-
Keskmine
FALSE
Kehtib versioonile Apache Struts 2.x kuni 2.3.28, mis on versioon 2.3.30. Kuid kirjelduse põhjal kehtib CVE mis tahes Struts 2 versiooni puhul, kui kasutatakse JRE 1.7 või uuemat versiooni. Ilmselt otsustasid nad meid siin edasi kindlustada, kuid see tundub pigem VALE

-
CVE-2018-1327
CVE-2018-1327
Suur
TRUE

CVE-2017-5638
CVE-2017-5638
CVE-2017-5638
Suur
TRUE
Sama haavatavus, mida Equifaxi häkkerid 2017. aastal ära kasutasid

CVE-2017-12611
CVE-2017-12611
-
Suur
TRUE

CVE-2018-11776
CVE-2018-11776
CVE-2018-11776
Suur
TRUE

struts-taglib:1.3.8
-
CVE-2012-0394
-
Keskmine
FALSE
2-tuumaliste tugipostide jaoks

-
CVE-2013-2115
-
Suur
FALSE
2-tuumaliste tugipostide jaoks

-
CVE-2014-0114
-
Suur
FALSE
Commons-beanutils jaoks

-
CVE-2015-0899
-
Suur
FALSE
Ei kehti taglibi kohta

-
CVE-2015-2992
-
Keskmine
FALSE
Viitab struts2-core

-
CVE-2016-1181
-
Suur
FALSE
Ei kehti taglibi kohta

-
CVE-2016-1182
-
Suur
FALSE
Ei kehti taglibi kohta

toed-plaadid-1.3.8
-
CVE-2012-0394
-
Keskmine
FALSE
2-tuumaliste tugipostide jaoks

-
CVE-2013-2115
-
Suur
FALSE
2-tuumaliste tugipostide jaoks

-
CVE-2014-0114
-
Suur
FALSE
Commons-beanutils all

-
CVE-2015-0899
-
Suur
FALSE
Ei kehti plaatide kohta

-
CVE-2015-2992
-
Keskmine
FALSE
2-tuumaliste tugipostide jaoks

-
CVE-2016-1181
-
Suur
FALSE
Ei kehti taglibi kohta

-
CVE-2016-1182
-
Suur
FALSE
Ei kehti taglibi kohta

Allikas: www.habr.com

Lisa kommentaar