Trečiųjų šalių programinės įrangos komponentų analizės (angl. Software Composition Analysis – SCA) svarba kūrimo procese auga, kai išleidžiamos kasmetinės ataskaitos apie atvirojo kodo bibliotekų pažeidžiamumą, kurias skelbia Synopsys, Sonatype, Snyk, White Source. Anot pranešimo
Vienas iliustratyviausių atvejų
Šiame straipsnyje bus aptariamas SCA atlikimo įrankio pasirinkimo klausimas, atsižvelgiant į analizės rezultatų kokybę. Taip pat bus pateiktas funkcinis instrumentų palyginimas. Įdėjimo į CI / CD procesą ir integravimo galimybes paliksime tolesniems leidiniams. OWASP pristatė platų įrankių asortimentą
Veikimo principas
Apsvarstykite, kaip atrodo CPE:
cpe:2.3:part:vendor:product:version:update:edition:language:sw_edition:target_sw:target_hw:other
- dalis: Nurodymas, kad komponentas priklauso programai (a), operacinei sistemai (o), aparatūrai (h) (būtinas elementas)
- Pardavėjas: Prekės gamintojo pavadinimas (būtina prekė)
- Prekės: Produkto pavadinimas (būtina)
- Versija: Komponento versija (nenaudojamas elementas)
- Paskutinis atnaujinimas: Paketo atnaujinimas
- leidimas: Paveldėta versija (nebenaudojamas elementas)
- Kalba: Kalba apibrėžta RFC-5646
- SW leidimas: Programinės įrangos versija
- Tikslinis SW: Programinės įrangos aplinka, kurioje veikia produktas
- Tikslinis HW: Aparatinės įrangos aplinka, kurioje veikia produktas
- Kita: Tiekėjo arba produkto informacija
CPE pavyzdys atrodo taip:
cpe:2.3:a:pivotal_software:spring_framework:3.0.0:*:*:*:*:*:*:*
Eilutė reiškia, kad CPE 2.3 versija aprašo gamintojo programos komponentą pivotal_software
su pavadinimu spring_framework
3.0.0 versija. Jei atidarysime pažeidžiamumą
URL taip pat naudoja SCA įrankiai. Paketo URL formatas yra toks:
scheme:type/namespace/name@version?qualifiers#subpath
- Schema: Visada bus „pkg“, nurodantis, kad tai yra paketo URL (būtina)
- Tipas: Paketo „tipas“ arba paketo „protokolas“, pvz., „maven“, „npm“, „nuget“, „gem“, „pypi“ ir kt. (būtina prekė)
- Vardų sritis: Kai kurie vardo priešdėliai, pvz., „Maven“ grupės ID, „Docker“ vaizdo savininkas, „GitHub“ naudotojas arba organizacija. Neprivaloma ir priklauso nuo tipo.
- Vardas: Paketo pavadinimas (būtina)
- Versija: Paketo versija
- Qualifiers: Papildomi kvalifikaciniai paketo duomenys, pvz., OS, architektūra, platinimas ir tt Neprivalomas ir konkretaus tipo elementas.
- pokelis: Papildomas kelias pakete, palyginti su paketo šaknimi
Pavyzdžiui:
pkg:golang/google.golang.org/genproto#googleapis/api/annotations
pkg:maven/org.apache.commons/[email protected]
pkg:pypi/[email protected]
Pavyzdys, kaip gali atrodyti KS 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 gali būti naudojama ne tik kaip priklausomybės stebėjimo įvesties parametrai, bet ir programinės įrangos komponentų inventorizacijai tiekimo grandinėje, pavyzdžiui, teikiant programinę įrangą klientui. 2014 metais JAV netgi buvo pasiūlytas svarstyti įstatymas
Grįžtant prie SCA, Dependency Track yra integruota su pranešimų platformomis, tokiomis kaip „Slack“, pažeidžiamumo valdymo sistemomis, tokiomis kaip „Kenna Security“. Taip pat verta paminėti, kad Dependency Track taip pat aptinka pasenusias paketų versijas ir pateikia informaciją apie licencijas (dėl SPDX palaikymo).
Jei kalbėsime konkrečiai apie SCA kokybę, tai yra esminis skirtumas.
Dependency Track nepriima projekto kaip įvesties, o kaip MK. Tai reiškia, kad jei norime išbandyti projektą, pirmiausia turime sugeneruoti bom.xml, pavyzdžiui, su CycloneDX. Taigi, Dependency Track tiesiogiai priklauso nuo CycloneDX. Tuo pačiu metu tai leidžia pritaikyti. Taigi OZON komanda parašė
Apibendrinkime kai kurias funkcines savybes, taip pat apsvarstykite palaikomas kalbas analizei:
Kalba
Nexus IQ
Priklausomybės patikrinimas
Priklausomybės takelis
Java
+
+
+
C / C ++
+
+
-
C#
+
+
-
.Net
+
+
+
Erlangas
-
-
+
JavaScript (NodeJS)
+
+
+
PHP
+
+
+
Pitonas
+
+
+
rubinas
+
+
+
Perlas
-
-
-
Scala
+
+
+
C tikslas
+
+
-
greitai
+
+
-
R
+
-
-
Go
+
+
+
Funkcionalumas
Funkcionalumas
Nexus IQ
Priklausomybės patikrinimas
Priklausomybės takelis
Galimybė užtikrinti, kad šaltinio kode naudojami komponentai būtų patikrinti dėl licencijos grynumo
+
-
+
Galimybė nuskaityti ir analizuoti pažeidžiamumą bei licencijuoti Docker vaizdų švarumą
+ Integracija su Clair
-
-
Galimybė sukonfigūruoti saugos politiką naudoti atvirojo kodo bibliotekas
+
-
-
Galimybė nuskaityti atvirojo kodo saugyklas, ar nėra pažeidžiamų komponentų
+ RubyGems, Maven, NPM, Nuget, Pypi, Conan, Bower, Conda, Go, p2, R, Yum, Helm, Docker, CocoaPods, Git LFS
-
+ Hex, RubyGems, Maven, NPM, Nuget, Pypi
Specialios tyrimų grupės prieinamumas
+
-
-
Veikimas uždaroje grandinėje
+
+
+
Trečiųjų šalių duomenų bazių naudojimas
+ Uždara duomenų bazė Sonatype
+ Sonatype OSS, NPM viešieji patarėjai
+ Sonatype OSS, NPM Public Advisors, RetireJS, VulnDB, savo pažeidžiamumo duomenų bazės palaikymas
Galimybė filtruoti atvirojo kodo komponentus bandant įkelti į kūrimo ciklą pagal sukonfigūruotą politiką
+
-
-
Rekomendacijos dėl pažeidžiamumų taisymo, nuorodų į taisymą prieinamumas
+
+- (priklauso nuo aprašymo viešose duomenų bazėse)
+- (priklauso nuo aprašymo viešose duomenų bazėse)
Aptiktų pažeidžiamumų klasifikavimas pagal kritiškumą
+
+
+
Vaidmenų prieigos modelis
+
-
+
CLI palaikymas
+
+
+- (tik CycloneDX)
Pažeidžiamumų parinkimas/rūšiavimas pagal apibrėžtus kriterijus
+
-
+
Prietaisų skydelis pagal programos būseną
+
-
+
Ataskaitų generavimas PDF formatu
+
-
-
Ataskaitų generavimas JSONCSV formatu
+
+
-
rusų kalbos palaikymas
-
-
-
Integracijos galimybės
Integracija
Nexus IQ
Priklausomybės patikrinimas
Priklausomybės takelis
Integracija su LDAP/Active Directory
+
-
+
Bambuko nuolatinė integracijos integracija
+
-
-
Integracija su nuolatine integravimo sistema (nuolatinė integracija) TeamCity
+
-
-
Integracija su nuolatine integravimo sistema (nuolatinė integracija) GitLab
+
+- (kaip „GitLab“ papildinys)
+
Integracija su nuolatine integravimo sistema (nuolatinė integracija) Jenkins
+
+
+
IDE priedų prieinamumas
+ „IntelliJ“, „Eclipse“, „Visual Studio“.
-
-
Palaikymas tinkintam įrankio integravimui naudojant žiniatinklio paslaugas (API).
+
-
+
Priklausomybės patikrinimas
Pirmas startas
Vykdykite priklausomybės patikrinimą sąmoningai pažeidžiamoje programoje
Tam mes naudojame
mvn org.owasp:dependency-check-maven:check
Dėl to dependency-check-report.html bus rodomas tiksliniame kataloge.
Atidarykime failą. Susumavus bendrą pažeidžiamumų skaičių, matome informaciją apie pažeidžiamumus, kurių sunkumo ir patikimumo lygis yra aukštas, nurodant paketą, CPE, CVE skaičių.
Toliau pateikiama išsamesnė informacija, visų pirma, kuo remiantis buvo priimtas sprendimas (įrodymai), tai yra tam tikra MK.
Toliau pateikiamas CPE, PURL ir CVE aprašymas. Beje, rekomendacijos dėl taisymo nėra pridedamos, nes jų nėra NVD duomenų bazėje.
Norėdami sistemingai peržiūrėti nuskaitymo rezultatus, galite sukonfigūruoti Nginx su minimaliais parametrais arba išsiųsti gautus defektus į defektų valdymo sistemą, kuri palaiko priklausomybės tikrinimo jungtis. Pavyzdžiui, „Defektas Dojo“.
Priklausomybės takelis
Montavimas
Dependency Track, savo ruožtu, yra žiniatinklio platforma su rodymo grafikais, todėl nėra opios problemos, susijusios su defektų saugojimu trečiosios šalies sprendime.
Yra šie palaikomi diegimo scenarijai: Docker, WAR, Vykdomasis WAR.
Pirmas startas
Eikite į veikiančios paslaugos URL. Įeiname per admin / admin, pakeičiame prisijungimo vardą ir slaptažodį, po to patenkame į prietaisų skydelį. Kitas dalykas, kurį padarysime, yra sukurti Java bandomosios programos projektą Pagrindinis puslapis/Projektai → Sukurti projektą . Kaip pavyzdį paimkime DVJA.
Kadangi priklausomybės stebėjimas gali priimti tik KS kaip įvestį, ši KS turi būti nuskaityta. Naudokimės
mvn org.cyclonedx:cyclonedx-maven-plugin:makeAggregateBom
Gauname bom.xml ir įkeliame failą į sukurtą projektą DVJA → Priklausomybės → Įkelti MK.
Eikime į Administravimas → Analizatoriai. Suprantame, kad įjungtas tik vidinis analizatorius, kuris apima NVD. Taip pat prijungkime „Sonatype OSS Index“.
Taigi, mes gauname tokį mūsų projekto vaizdą:
Taip pat sąraše galite rasti vieną pažeidžiamumą, taikomą Sonatype OSS:
Didžiausias nusivylimas buvo tai, kad Dependency Track nebepriima Dependency Check xml ataskaitų. Naujausios palaikomos Priklausomybės patikros integravimo versijos buvo 1.0.0–4.0.2, o aš išbandžiau 5.3.2.
Čia
Nexus IQ
Pirmas startas
„Nexus IQ“ įdiegta iš programinės įrangos archyvų
Prisijungę prie konsolės, turite sukurti organizaciją ir programą.
Kaip matote, IQ atveju konfigūracija yra šiek tiek sudėtingesnė, nes taip pat turime sukurti politiką, kuri būtų taikoma skirtingiems „etapams“ (kur, kūrimas, etapas, išleidimas). Tai būtina norint užblokuoti pažeidžiamus komponentus, kai jie artėja prie gamybos vamzdyno, arba užblokuoti, kai tik jie patenka į „Nexus Repo“, kai juos atsisiunčia kūrėjai.
Norėdami pajusti skirtumą tarp atvirojo kodo ir įmonės, atlikime tą patį nuskaitymą naudodami „Nexus IQ“ taip pat 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>
Sekite sugeneruotos ataskaitos URL IQ žiniatinklio sąsajoje:
Čia galite pamatyti visus skirtingo sunkumo politikos pažeidimus (nuo informacijos iki kritinio saugumo). Raidė D šalia komponento reiškia, kad komponentas yra tiesioginė priklausomybė, o raidė T šalia komponento reiškia, kad komponentas yra Transitive Dependency, tai yra, jis yra pereinamasis.
Beje, ataskaita
Jei atidarysime vieną iš „Nexus IQ“ politikos pažeidimų, pamatysime komponento aprašą, taip pat versijos grafiką, kuriame rodoma dabartinės versijos vieta laiko grafike, taip pat, kada pažeidžiamumas nustoja veikti. būti pažeidžiamas. Žvakių aukštis grafike rodo šio komponento naudojimo populiarumą.
Jei einate į pažeidžiamumų skyrių ir atidarote CVE, galite perskaityti šio pažeidžiamumo aprašymą, rekomendacijas dėl ištaisymo, taip pat priežastį, kodėl šis komponentas buvo pažeistas, tai yra, klasės buvimas. DiskFileitem.class
.
Apibendrinkime tik trečiųjų šalių „Java“ komponentus, pašalindami js komponentus. Skliausteliuose nurodome tų pažeidžiamumų, kurie buvo rasti ne NVD, skaičių.
Bendras „Nexus IQ“:
- Nuskaitytos priklausomybės: 62
- Pažeidžiamos priklausomybės: 16
- Rasta pažeidžiamumų: 42 (8 sonatype db)
Viso priklausomybės patikrinimas:
- Nuskaitytos priklausomybės: 47
- Pažeidžiamos priklausomybės: 13
- Rasta pažeidžiamumų: 91 (14 sonatype oss)
Bendra priklausomybės seka:
- Nuskaitytos priklausomybės: 59
- Pažeidžiamos priklausomybės: 10
- Rasta pažeidžiamumų: 51 (1 sonatype oss)
Kitas žingsnis – išanalizuoti rezultatus ir išsiaiškinti, kuris iš šių pažeidžiamumų yra tikras defektas, o kuris klaidingai teigiamas.
Atsakomybės apribojimas
Ši apžvalga nėra neginčijama tiesa. Autorius neturėjo tikslo išskirti atskiro instrumento kitų fone. Apžvalgos tikslas buvo parodyti, kaip veikia SCA įrankiai ir kaip patikrinti jų rezultatus.
Rezultatų palyginimas
Terminai ir sąlygos:
Klaidingi teigiami trečiųjų šalių komponentų pažeidžiamumai yra šie:
- CVE neatitikimas nustatytam komponentui
- Pavyzdžiui, jei struts2 sistemoje randamas pažeidžiamumas, o įrankis nurodo struts-tiles sistemos komponentą, kuriam šis pažeidžiamumas įtakos neturi, tai yra klaidingas teigiamas rezultatas.
- CVE neatitikimas aptiktai komponento versijai
- Pavyzdžiui, pažeidžiamumas yra susietas su python versija > 3.5, o įrankis pažymi 2.7 versiją kaip pažeidžiamą – tai klaidingai teigiama, nes iš tikrųjų pažeidžiamumas taikomas tik 3.x produkto šakai
- CVE dubliavimas
- Pavyzdžiui, jei SCA nurodo CVE, leidžiančią įdiegti RCE, tada SCA nurodo tą patį CVE, kuris taikomas Cisco produktams, kuriems taikomas tas RCE. Tokiu atveju jis bus klaidingai teigiamas.
- Pavyzdžiui, pavasario žiniatinklio komponente buvo rastas CVE, po kurio SCA nurodo tą patį CVE kituose „Spring Framework“ komponentuose, o CVE neturi nieko bendra su kitais komponentais. Tokiu atveju jis bus klaidingai teigiamas.
Tyrimo objektas – Atvirojo kodo projektas DVJA. Tyrime dalyvavo tik Java komponentai (be js).
Apibendrinti rezultatai
Pereikime prie neautomatinio nustatytų pažeidžiamumų peržiūros rezultatų. Išsamią kiekvieno CVE ataskaitą rasite priede.
Visų pažeidžiamumų rezultatų suvestinė:
Parametras
Nexus IQ
Priklausomybės patikrinimas
Priklausomybės takelis
Iš viso nustatytų pažeidžiamumų
42
91
51
Neteisingai nustatyti pažeidžiamumai (klaidingai teigiamas)
2 (4.76%)
62 (68,13%)
29 (56.86%)
Atitinkamų pažeidžiamumų nerasta (klaidingai neigiamas)
10
20
27
Rezultatų suvestinė pagal komponentus:
Parametras
Nexus IQ
Priklausomybės patikrinimas
Priklausomybės takelis
Iš viso atskleista sudedamųjų dalių
62
47
59
Iš viso pažeidžiamų komponentų
16
13
10
Pažeidžiami komponentai yra neteisingai identifikuoti (klaidingai teigiama)
1
5
0
Pažeidžiami komponentai yra neteisingai identifikuoti (klaidingai teigiama)
0
6
6
Sukurkime vaizdinius grafikus, kad įvertintume klaidingai teigiamų ir klaidingai neigiamų rezultatų santykį su bendru pažeidžiamumų skaičiumi. Komponentai pažymėti horizontaliai, o juose identifikuoti pažeidžiamumai – vertikaliai.
Palyginimui, panašų tyrimą atliko Sonatype komanda, išbandžiusi 1531 komponento projektą, naudodama OWASP priklausomybės patikrinimą. Kaip matome, triukšmo ir teisingų atsakymų santykis atitinka mūsų rezultatus.
Šaltinis:
Pažvelkime į kai kuriuos CVE iš mūsų nuskaitymo rezultatų, kad suprastume tokių rezultatų priežastį.
Daugiau
№ 1
Pirmiausia išanalizuokime keletą įdomių „Sonatype Nexus IQ“ taškų.
„Nexus IQ“ atkreipia dėmesį į deserializacijos problemą, susijusią su galimybe atlikti RCE kelis kartus „Spring Framework“. CVE-2016-1000027 spring-web: 3.0.5 pirmą kartą ir CVE-2011-2894 pavasario kontekste: 3.0.5 ir spring-core: 3.0.5. Iš pradžių atrodo, kad pažeidžiamumas dubliuojasi keliuose CVE. Mat pažvelgus į CVE-2016-1000027 ir CVE-2011-2894 NVD duomenų bazėje, atrodo, kad viskas akivaizdu
Komponentas
Pažeidžiamumas
pavasario tinklas: 3.0.5
CVE-2016-1000027
pavasaris-kontekstas:3.0.5
CVE-2011-2894
spyruoklinė šerdis: 3.0.5
CVE-2011-2894
aprašymas
aprašymas
CVE-2011-2894 yra gana gerai žinomas. Pranešime RemoteInvocationSerializingExporter
CVE-2011-2894 pažeidžiamumas matomas HttpInvokerServiceExporter
. Štai ką mums sako Nexus IQ:
Tačiau NVD nieko panašaus nėra, todėl priklausomybės patikrinimas ir priklausomybės stebėjimas gauna klaidingus neigiamus rezultatus.
Iš CVE-2011-2894 aprašymo taip pat galima suprasti, kad pažeidžiamumas iš tikrųjų yra tiek pavasario kontekste: 3.0.5, tiek pavasario branduolyje: 3.0.5. Patvirtinimą tai galima rasti straipsnyje, kurį aptiko šis pažeidžiamumas.
№ 2
Komponentas
Pažeidžiamumas
Rezultatas
statramsčiai 2 šerdies: 2.3.30
CVE-2016-4003
FALSE
Jei išnagrinėsime CVE-2016-4003 pažeidžiamumą, suprasime, kad jis buvo ištaisytas 2.3.28 versijoje, nepaisant to, Nexus IQ mus apie tai informuoja. Pažeidžiamumo aprašyme yra pastaba:
Tai reiškia, kad pažeidžiamumas egzistuoja tik kartu su pasenusia JRE versija, apie kurią jie nusprendė mus įspėti. Nepaisant to, manome, kad tai klaidingai teigiama, nors ir ne pati baisiausia.
Nr. 3
Komponentas
Pažeidžiamumas
Rezultatas
xwork-core: 2.3.30
CVE-2017-9804
TIKROJI
xwork-core: 2.3.30
CVE-2017-7672
FALSE
Jei pažvelgsime į CVE-2017-9804 ir CVE-2017-7672 aprašymą, suprasime, kad problema yra URLValidator class
, su CVE-2017-9804, kilusiu iš CVE-2017-7672. Antrojo pažeidžiamumo buvimas nekelia jokio naudingo krovinio, išskyrus tai, kad jo sunkumas išaugo iki didelio, todėl tai gali būti laikoma nereikalingu triukšmu.
Apskritai „Nexus IQ“ nerasta jokių kitų klaidingų teigiamų rezultatų.
№ 4
Yra keletas dalykų, dėl kurių IQ išsiskiria iš kitų sprendimų.
Komponentas
Pažeidžiamumas
Rezultatas
pavasario tinklas: 3.0.5
CVE-2020-5398
TIKROJI
NVD CVE sako, kad jis taikomas tik versijoms nuo 5.2.x iki 5.2.3, nuo 5.1.x iki 5.1.13 ir nuo 5.0.x iki 5.0.16, tačiau, jei pažvelgsime į CVE aprašą Nexus IQ, tada pamatysime:
Patariamasis nukrypimo pranešimas: „Sonatype“ saugos tyrimų komanda nustatė, kad šis pažeidžiamumas buvo įtrauktas į 3.0.2.RELEASE versiją, o ne 5.0.x, kaip nurodyta patarime.
Po to pateikiamas šio pažeidžiamumo PoC, kuriame teigiama, kad jis yra 3.0.5 versijoje.
Klaidingai neigiamas siunčiamas į Priklausomybės patikrinimą ir Priklausomybės stebėjimą.
№ 5
Pažiūrėkime į klaidingą teigiamą priklausomybės patikros ir priklausomybės stebėjimo rezultatą.
Priklausomybės patikra išsiskiria tuo, kad atspindi tuos CVE, kurie taikomi visai sistemai NVD, ir tiems komponentams, kuriems šie CVE netaikomi. Tai taikoma CVE-2012-0394, CVE-2013-2115, CVE-2014-0114, CVE-2015-0899, CVE-2015-2992, CVE-2016-1181, CVE-2016-1182, kurios priklauso nuo ” į statramsčius-taglib:1.3.8 ir statramsčius-tiles-1.3.8. Šie komponentai neturi nieko bendra su tuo, kas aprašyta CVE – užklausų apdorojimas, puslapio patvirtinimas ir pan. Taip yra dėl to, kad tarp šių CVE ir komponentų yra bendra tik sistema, todėl Priklausomybės patikra laikė tai pažeidžiamumu.
Ta pati situacija su spring-tx:3.0.5 ir panaši situacija su statramsčiais-core:1.3.8. Dėl struts-core, Dependency Check ir Dependency Track aptiko daug pažeidžiamumų, kurie iš tikrųjų taikomi struts2-core, kuri iš esmės yra atskira sistema. Šiuo atveju „Nexus IQ“ teisingai suprato paveikslėlį ir tuose CVE, kuriuos išleido, nurodė, kad struts-core pasibaigė ir reikėjo pereiti prie struts2-core.
№ 6
Kai kuriose situacijose aiškios priklausomybės patikros ir priklausomybės stebėjimo klaidos traktavimas yra nesąžiningas. Visų pirma CVE-2013-4152, CVE-2013-6429, CVE-2013-6430, CVE-2013-7315, CVE-2014-0054, CVE-2014-0225, CVE-2014-0225, kurie yra priklausomybės tikrinimas ir priklausomybės tikrinimas. nurodyta spring-core:3.0.5 iš tikrųjų reiškia spring-web:3.0.5. Tuo pačiu metu kai kuriuos iš šių CVE rado „Nexus IQ“, tačiau IQ teisingai juos atpažino su kitu komponentu. Atsižvelgiant į tai, kad šių pažeidžiamumų nebuvo rasta „spring-core“, negalima teigti, kad jie iš esmės nepatenka į sistemą, o atvirojo kodo įrankiai teisingai nurodė šiuos pažeidžiamumus (jie tiesiog šiek tiek praleido).
išvados
Kaip matome, nustatytų spragų patikimumo nustatymas rankiniu būdu neduoda vienareikšmių rezultatų, o tai sukelia prieštaringų problemų. Rezultatai rodo, kad „Nexus IQ“ sprendimas turi mažiausią klaidingų teigiamų rezultatų rodiklį ir didžiausią tikslumą.
Visų pirma, taip yra dėl to, kad Sonatype komanda savo duomenų bazėse išplėtė kiekvieno CVE pažeidžiamumo aprašymą iš NVD, nurodydama iki konkrečios komponento versijos pažeidžiamumo klasės ar funkcijos, atlikusi papildomą tyrimai (pavyzdžiui, tikrinant senesnių programinės įrangos versijų pažeidžiamumą).
Didelę įtaką rezultatams turi ir tie pažeidžiamumai, kurie nebuvo įtraukti į NVD, bet vis dėlto yra Sonatype duomenų bazėje, pažymėtoje SONATYPE. Anot pranešimo
Dėl to priklausomybės patikra sukuria daug triukšmo, nes trūksta kai kurių pažeidžiamų komponentų. Dependency Track sukuria mažiau triukšmo ir aptinka daug komponentų, o tai vizualiai nekenkia akių žiniatinklio sąsajoje.
Nepaisant to, praktika rodo, kad būtent atvirasis kodas turėtų tapti pirmaisiais žingsniais link brandaus DevSecOps. Pirmiausia reikia pagalvoti apie SCA įtraukimą į plėtrą, tai procesai, ty mąstymas su vadovybe ir susijusiais padaliniais apie tai, kaip turėtų atrodyti idealūs procesai jūsų organizacijoje. Gali pasirodyti, kad jūsų organizacijai iš pradžių Dependency Check arba Dependency Track apims visus verslo poreikius, o Enterprise sprendimai bus logiškas tęsinys dėl vis sudėtingėjančių kuriamų programų.
A priedas. Komponentų rezultatai
Simboliai:
- Aukšto – aukšto ir kritinio lygio komponento pažeidžiamumas
- Vidutinis – vidutinio sunkumo komponento pažeidžiamumas
- TRUE – tikra teigiama problema
- FALSE – klaidingai teigiama problema
Komponentas
Nexus IQ
Priklausomybės patikrinimas
Priklausomybės takelis
Rezultatas
dom4j:1.6.1
aukštas
aukštas
aukštas
TIKROJI
log4j branduolys: 2.3
aukštas
aukštas
aukštas
TIKROJI
log4j: 1.2.14
aukštas
aukštas
-
TIKROJI
bendri daiktai-kolekcijos:3.1
aukštas
aukštas
aukštas
TIKROJI
„Commons“ failo įkėlimas: 1.3.2
aukštas
aukštas
aukštas
TIKROJI
commons-beanutils:1.7.0
aukštas
aukštas
aukštas
TIKROJI
Commons-codec: 1:10
vidutinis
-
-
TIKROJI
mysql-connector-java: 5.1.42
aukštas
aukštas
aukštas
TIKROJI
spyruoklinė išraiška:3.0.5
aukštas
komponentas nerastas
TIKROJI
pavasario tinklas: 3.0.5
aukštas
komponentas nerastas
aukštas
TIKROJI
pavasaris-kontekstas:3.0.5
vidutinis
komponentas nerastas
-
TIKROJI
spyruoklinė šerdis: 3.0.5
vidutinis
aukštas
aukštas
TIKROJI
struts2-config-browser-plugin:2.3.30
vidutinis
-
-
TIKROJI
spyruoklė-tx: 3.0.5
-
aukštas
-
FALSE
statramsčiai-šerdis:1.3.8
aukštas
aukštas
aukštas
TIKROJI
xwork-core: 2.3.30
aukštas
-
-
TIKROJI
statramsčiai 2 šerdies: 2.3.30
aukštas
aukštas
aukštas
TIKROJI
struts-taglib:1.3.8
-
aukštas
-
FALSE
statramsčiai-čerpės-1.3.8
-
aukštas
-
FALSE
B priedas. Pažeidžiamumo rezultatai
Simboliai:
- Aukšto – aukšto ir kritinio lygio komponento pažeidžiamumas
- Vidutinis – vidutinio sunkumo komponento pažeidžiamumas
- TRUE – tikra teigiama problema
- FALSE – klaidingai teigiama problema
Komponentas
Nexus IQ
Priklausomybės patikrinimas
Priklausomybės takelis
Sunkumas
Rezultatas
Komentuoti
dom4j:1.6.1
CVE-2018-1000632
CVE-2018-1000632
CVE-2018-1000632
aukštas
TIKROJI
CVE-2020-10683
CVE-2020-10683
CVE-2020-10683
aukštas
TIKROJI
log4j branduolys: 2.3
CVE-2017-5645
CVE-2017-5645
CVE-2017-5645
aukštas
TIKROJI
CVE-2020-9488
CVE-2020-9488
CVE-2020-9488
žemas
TIKROJI
log4j: 1.2.14
CVE-2019-17571
CVE-2019-17571
-
aukštas
TIKROJI
-
CVE-2020-9488
-
žemas
TIKROJI
SONATIPAS-2010-0053
-
-
aukštas
TIKROJI
bendri daiktai-kolekcijos:3.1
-
CVE-2015-6420
CVE-2015-6420
aukštas
FALSE
Pasikartojantys RCE (OSSINDEX)
-
CVE-2017-15708
CVE-2017-15708
aukštas
FALSE
Pasikartojantys RCE (OSSINDEX)
SONATIPAS-2015-0002
RCE (OSSINDEX)
RCE (OSSINDEX)
aukštas
TIKROJI
„Commons“ failo įkėlimas: 1.3.2
CVE-2016-1000031
CVE-2016-1000031
CVE-2016-1000031
aukštas
TIKROJI
SONATIPAS-2014-0173
-
-
vidutinis
TIKROJI
commons-beanutils:1.7.0
CVE-2014-0114
CVE-2014-0114
CVE-2014-0114
aukštas
TIKROJI
-
CVE-2019-10086
CVE-2019-10086
aukštas
FALSE
Pažeidžiamumas taikomas tik 1.9.2 ir naujesnėse versijose
Commons-codec: 1:10
SONATIPAS-2012-0050
-
-
vidutinis
TIKROJI
mysql-connector-java: 5.1.42
CVE-2018-3258
CVE-2018-3258
CVE-2018-3258
aukštas
TIKROJI
CVE-2019-2692
CVE-2019-2692
-
vidutinis
TIKROJI
-
CVE-2020-2875
-
vidutinis
FALSE
Tas pats pažeidžiamumas kaip CVE-2019-2692, bet su priedu „atakos gali reikšmingai paveikti papildomus produktus“
-
CVE-2017-15945
-
aukštas
FALSE
Netaikoma mysql-connector-java
-
CVE-2020-2933
-
žemas
FALSE
CVE-2020-2934 dublikatas
CVE-2020-2934
CVE-2020-2934
-
vidutinis
TIKROJI
spyruoklinė išraiška:3.0.5
CVE-2018-1270
komponentas nerastas
-
aukštas
TIKROJI
CVE-2018-1257
-
-
vidutinis
TIKROJI
pavasario tinklas: 3.0.5
CVE-2016-1000027
komponentas nerastas
-
aukštas
TIKROJI
CVE-2014-0225
-
CVE-2014-0225
aukštas
TIKROJI
CVE-2011-2730
-
-
aukštas
TIKROJI
-
-
CVE-2013-4152
vidutinis
TIKROJI
CVE-2018-1272
-
-
aukštas
TIKROJI
CVE-2020-5398
-
-
aukštas
TIKROJI
IQ naudai: „Sonatype saugumo tyrimų komanda nustatė, kad šis pažeidžiamumas buvo įtrauktas į 3.0.2.RELEASE versiją, o ne 5.0.x, kaip nurodyta patarime“.
CVE-2013-6429
-
-
vidutinis
TIKROJI
CVE-2014-0054
-
CVE-2014-0054
vidutinis
TIKROJI
CVE-2013-6430
-
-
vidutinis
TIKROJI
pavasaris-kontekstas:3.0.5
CVE-2011-2894
komponentas nerastas
-
vidutinis
TIKROJI
spyruoklinė šerdis: 3.0.5
-
CVE-2011-2730
CVE-2011-2730
aukštas
TIKROJI
CVE-2011-2894
CVE-2011-2894
CVE-2011-2894
vidutinis
TIKROJI
-
-
CVE-2013-4152
vidutinis
FALSE
To paties pažeidžiamumo dublikatas pavasario žiniatinklyje
-
CVE-2013-4152
-
vidutinis
FALSE
Pažeidžiamumas yra susijęs su spyruoklinio tinklo komponentu
-
CVE-2013-6429
CVE-2013-6429
vidutinis
FALSE
Pažeidžiamumas yra susijęs su spyruoklinio tinklo komponentu
-
CVE-2013-6430
-
vidutinis
FALSE
Pažeidžiamumas yra susijęs su spyruoklinio tinklo komponentu
-
CVE-2013-7315
CVE-2013-7315
vidutinis
FALSE
SKILTAS iš CVE-2013-4152. + Pažeidžiamumas yra susijęs su spyruoklinio tinklo komponentu
-
CVE-2014-0054
CVE-2014-0054
vidutinis
FALSE
Pažeidžiamumas yra susijęs su spyruoklinio tinklo komponentu
-
CVE-2014-0225
-
aukštas
FALSE
Pažeidžiamumas yra susijęs su spyruoklinio tinklo komponentu
-
-
CVE-2014-0225
aukštas
FALSE
To paties pažeidžiamumo dublikatas pavasario žiniatinklyje
-
CVE-2014-1904
CVE-2014-1904
vidutinis
FALSE
Pažeidžiamumas yra susijęs su pavasario-web-mvc komponentu
-
CVE-2014-3625
CVE-2014-3625
vidutinis
FALSE
Pažeidžiamumas yra susijęs su pavasario-web-mvc komponentu
-
CVE-2016-9878
CVE-2016-9878
aukštas
FALSE
Pažeidžiamumas yra susijęs su pavasario-web-mvc komponentu
-
CVE-2018-1270
CVE-2018-1270
aukštas
FALSE
Pavasario išraiškai / pavasario pranešimams
-
CVE-2018-1271
CVE-2018-1271
vidutinis
FALSE
Pažeidžiamumas yra susijęs su pavasario-web-mvc komponentu
-
CVE-2018-1272
CVE-2018-1272
aukštas
TIKROJI
CVE-2014-3578
CVE-2014-3578 (OSSINDEX)
CVE-2014-3578
vidutinis
TIKROJI
SONATIPAS-2015-0327
-
-
žemas
TIKROJI
struts2-config-browser-plugin:2.3.30
SONATIPAS-2016-0104
-
-
vidutinis
TIKROJI
spyruoklė-tx: 3.0.5
-
CVE-2011-2730
-
aukštas
FALSE
Pažeidžiamumas netaikomas spring-tx
-
CVE-2011-2894
-
aukštas
FALSE
Pažeidžiamumas netaikomas spring-tx
-
CVE-2013-4152
-
vidutinis
FALSE
Pažeidžiamumas netaikomas spring-tx
-
CVE-2013-6429
-
vidutinis
FALSE
Pažeidžiamumas netaikomas spring-tx
-
CVE-2013-6430
-
vidutinis
FALSE
Pažeidžiamumas netaikomas spring-tx
-
CVE-2013-7315
-
vidutinis
FALSE
Pažeidžiamumas netaikomas spring-tx
-
CVE-2014-0054
-
vidutinis
FALSE
Pažeidžiamumas netaikomas spring-tx
-
CVE-2014-0225
-
aukštas
FALSE
Pažeidžiamumas netaikomas spring-tx
-
CVE-2014-1904
-
vidutinis
FALSE
Pažeidžiamumas netaikomas spring-tx
-
CVE-2014-3625
-
vidutinis
FALSE
Pažeidžiamumas netaikomas spring-tx
-
CVE-2016-9878
-
aukštas
FALSE
Pažeidžiamumas netaikomas spring-tx
-
CVE-2018-1270
-
aukštas
FALSE
Pažeidžiamumas netaikomas spring-tx
-
CVE-2018-1271
-
vidutinis
FALSE
Pažeidžiamumas netaikomas spring-tx
-
CVE-2018-1272
-
vidutinis
FALSE
Pažeidžiamumas netaikomas spring-tx
statramsčiai-šerdis:1.3.8
-
CVE-2011-5057 (OSSINDEX)
vidutinis
FASLE
2 pažeidžiamumas
-
CVE-2012-0391 (OSSINDEX)
CVE-2012-0391
aukštas
FALSE
2 pažeidžiamumas
-
CVE-2014-0094 (OSSINDEX)
CVE-2014-0094
vidutinis
FALSE
2 pažeidžiamumas
-
CVE-2014-0113 (OSSINDEX)
CVE-2014-0113
aukštas
FALSE
2 pažeidžiamumas
CVE-2016-1182
3VE-2016-1182
-
aukštas
TIKROJI
-
-
CVE-2011-5057
vidutinis
FALSE
2 pažeidžiamumas
-
CVE-2012-0392 (OSSINDEX)
CVE-2012-0392
aukštas
FALSE
2 pažeidžiamumas
-
CVE-2012-0393 (OSSINDEX)
CVE-2012-0393
vidutinis
FALSE
2 pažeidžiamumas
CVE-2015-0899
CVE-2015-0899
-
aukštas
TIKROJI
-
CVE-2012-0394
CVE-2012-0394
vidutinis
FALSE
2 pažeidžiamumas
-
CVE-2012-0838 (OSSINDEX)
CVE-2012-0838
aukštas
FALSE
2 pažeidžiamumas
-
CVE-2013-1965 (OSSINDEX)
CVE-2013-1965
aukštas
FALSE
2 pažeidžiamumas
-
CVE-2013-1966 (OSSINDEX)
CVE-2013-1966
aukštas
FASLE
2 pažeidžiamumas
-
CVE-2013-2115
CVE-2013-2115
aukštas
FASLE
2 pažeidžiamumas
-
CVE-2013-2134 (OSSINDEX)
CVE-2013-2134
aukštas
FASLE
2 pažeidžiamumas
-
CVE-2013-2135 (OSSINDEX)
CVE-2013-2135
aukštas
FASLE
2 pažeidžiamumas
CVE-2014-0114
CVE-2014-0114
-
aukštas
TIKROJI
-
CVE-2015-2992
CVE-2015-2992
vidutinis
FALSE
2 pažeidžiamumas
-
CVE-2016-0785 (OSSINDEX)
CVE-2016-0785
aukštas
FALSE
2 pažeidžiamumas
CVE-2016-1181
CVE-2016-1181
-
aukštas
TIKROJI
-
CVE-2016-4003 (OSSINDEX)
CVE-2016-4003
aukštas
FALSE
2 pažeidžiamumas
xwork-core: 2.3.30
CVE-2017-9804
-
-
aukštas
TIKROJI
SONATIPAS-2017-0173
-
-
aukštas
TIKROJI
CVE-2017-7672
-
-
aukštas
FALSE
Dvigubai CVE-2017-9804
SONATIPAS-2016-0127
-
-
aukštas
TIKROJI
statramsčiai 2 šerdies: 2.3.30
-
CVE-2016-6795
CVE-2016-6795
aukštas
TIKROJI
-
CVE-2017-9787
CVE-2017-9787
aukštas
TIKROJI
-
CVE-2017-9791
CVE-2017-9791
aukštas
TIKROJI
-
CVE-2017-9793
-
aukštas
FALSE
CVE-2018-1327 dublikatas
-
CVE-2017-9804
-
aukštas
TIKROJI
-
CVE-2017-9805
CVE-2017-9805
aukštas
TIKROJI
CVE-2016-4003
-
-
vidutinis
FALSE
Taikoma Apache Struts 2.x iki 2.3.28, kuri yra 2.3.30 versija. Tačiau, remiantis aprašymu, CVE veikia visose Struts 2 versijose, kol naudojama JRE 1.7 ir senesnė versija. Matyt, jie nusprendė mus čia perdrausti, bet tai labiau atrodo NELAIDAS
-
CVE-2018-1327
CVE-2018-1327
aukštas
TIKROJI
CVE-2017-5638
CVE-2017-5638
CVE-2017-5638
aukštas
TIKROJI
Tas pats pažeidžiamumas, kurį 2017 m. išnaudojo „Equifax“ užpuolikai
CVE-2017-12611
CVE-2017-12611
-
aukštas
TIKROJI
CVE-2018-11776
CVE-2018-11776
CVE-2018-11776
aukštas
TIKROJI
struts-taglib:1.3.8
-
CVE-2012-0394
-
vidutinis
FALSE
Skirta 2 branduolių statramsčiams
-
CVE-2013-2115
-
aukštas
FALSE
Skirta 2 branduolių statramsčiams
-
CVE-2014-0114
-
aukštas
FALSE
Commons-beanutils
-
CVE-2015-0899
-
aukštas
FALSE
Nesusijęs su taglib
-
CVE-2015-2992
-
vidutinis
FALSE
Susijęs su 2 branduolių statramsčiais
-
CVE-2016-1181
-
aukštas
FALSE
Nesusijęs su taglib
-
CVE-2016-1182
-
aukštas
FALSE
Nesusijęs su taglib
statramsčiai-čerpės-1.3.8
-
CVE-2012-0394
-
vidutinis
FALSE
Skirta 2 branduolių statramsčiams
-
CVE-2013-2115
-
aukštas
FALSE
Skirta 2 branduolių statramsčiams
-
CVE-2014-0114
-
aukštas
FALSE
Pagal bendrus-beanutils
-
CVE-2015-0899
-
aukštas
FALSE
Netaikoma plytelėms
-
CVE-2015-2992
-
vidutinis
FALSE
Skirta 2 branduolių statramsčiams
-
CVE-2016-1181
-
aukštas
FALSE
Nesusijęs su taglib
-
CVE-2016-1182
-
aukštas
FALSE
Nesusijęs su taglib
Šaltinis: www.habr.com