DevSecOps: principoj de operacio kaj komparo de SCA. Unua parto

La graveco de analizo de triaj programaraj komponantoj (Software Composition Analysis - SCA) en la evoluprocezo kreskas kun la publikigo de jaraj raportoj pri la vundeblecoj de malfermfontaj bibliotekoj, kiuj estas publikigitaj de Synopsys, Sonatype, Snyk kaj White Source. . Laŭ la raporto La Ŝtato de Malfermfontaj Sekurecaj Vundeblecoj 2020 la nombro de identigitaj malfermfontaj vundeblecoj en 2019 pliiĝis preskaŭ 1.5 fojojn kompare kun la antaŭa jaro, dum malfermfontaj komponantoj estas uzataj de 60% ĝis 80% de projektoj. Sendepende, SCA-procezoj estas aparta praktiko de OWASP SAMM kaj BSIMM kiel indikilo de matureco, kaj en la unua duono de 2020, OWASP publikigis la novan OWASP Software Component Verification Standard (SCVS), provizante plej bonajn praktikojn por kontroli trian- partiaj komponantoj en la provizoĉeno BY.

DevSecOps: principoj de operacio kaj komparo de SCA. Unua parto

Unu el la plej ilustraj kazoj okazis kun Equifax en majo 2017. Nekonataj atakantoj akiris informojn pri 143 milionoj da usonanoj, inkluzive de plenaj nomoj, adresoj, numeroj de Socialasekuro kaj ŝoforpermesiloj. En 209 kazoj, la dokumentoj ankaŭ inkludis informojn pri bankkartoj de la viktimoj. Ĉi tiu liko okazis kiel rezulto de la ekspluatado de kritika vundebleco en Apache Struts 000 (CVE-2-2017), dum la riparo estis liberigita reen en marto 5638. La kompanio havis du monatojn por instali la ĝisdatigon, sed neniu ĝenis ĝin.

Ĉi tiu artikolo diskutos la aferon elekti ilon por fari SCA el la vidpunkto de la kvalito de la analizrezultoj. Funkcia komparo de la iloj ankaŭ estos disponigita. La procezo de integriĝo en CI/KD kaj integriĝkapabloj restos por postaj publikaĵoj. Vasta gamo da iloj estis prezentita fare de OWASP en via retejo, sed en la nuna revizio ni nur tuŝos la plej popularan malfermfontan ilon Dependency Check, la iomete malpli konatan malfermfontan platformon Dependency Track kaj la Enterprise solvo Sonatype Nexus IQ. Ni ankaŭ komprenos kiel funkcias ĉi tiuj solvoj kaj komparos la rezultojn akiritajn por falsaj pozitivoj.

DevSecOps: principoj de operacio kaj komparo de SCA. Unua parto

Kiel ĝi funkcias

Dependeco Kontrolo estas ilo (CLI, maven, jenkins-modulo, formiko), kiu analizas projektdosierojn, kolektas informojn pri dependecoj (pakonomo, grupid, speciftitolo, versio...), konstruas linion CPE (Common Platform Enumeration). , Package URL ( PURL) kaj identigas vundeblecojn por CPE/PURL el datumbazoj (NVD, Sonatype OSS Index, NPM Audit API...), post kiu ĝi konstruas unufojan raporton en HTML, JSON, XML-formato...

Ni rigardu kiel aspektas CPE:

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

  • parto: Indiko ke la komponanto rilatas al la aplikaĵo (a), operaciumo (o), aparataro (h) (Bezonata)
  • Vendisto: Produkta Produktanto Nomo (Bezonata)
  • produkto: Produkta Nomo (Bezonata)
  • versio: Komponanta versio (Malnoviĝinta ero)
  • ĝisdatigo: Paka ĝisdatigo
  • eldono: Heredaĵa versio (malrekomendita ero)
  • lingvo: Lingvo difinita en RFC-5646
  • SW Eldono: Versio de programaro
  • Celo SW: Softvarmedio en kiu la produkto funkcias
  • Celo HW: La aparatara medio en kiu la produkto funkcias
  • Alia: Informoj pri Provizanto aŭ Produkto

Ekzemplo CPE aspektas jene:

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

La linio signifas, ke CPE-versio 2.3 priskribas la aplikaĵon de la fabrikanto pivotal_software kun la titolo spring_framework versio 3.0.0. Se ni malfermas vundeblecon CVE-2014-0225 en NVD, ni povas vidi mencion de ĉi tiu CPE. La unua problemo, pri kiu vi devas tuj atenti, estas, ke CVE en NVD, laŭ CPE, raportas problemon en la kadro, kaj ne en specifa komponanto. Tio estas, se programistoj estas forte ligitaj al la kadro, kaj la identigita vundebleco ne influas tiujn modulojn, kiujn la programistoj uzas, sekureca specialisto devos unumaniere aŭ alie malmunti ĉi tiun CVE kaj pensi pri ĝisdatigo.

La URL ankaŭ estas uzata de SCA-iloj. La paka URL-formato estas jena:

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

  • Skemo: Ĉiam estos 'pkg' indikante, ke ĉi tio estas pakaĵa URL (Bezonata)
  • tipo: La "tipo" de la pakaĵo aŭ la "protokolo" de la pakaĵo, kiel ekzemple maven, npm, nuget, gem, pypi, ktp. (Bezonata objekto)
  • Nomspaco: Iu nomprefikso, kiel Maven-grupidentigilo, Docker-bildposedanto, GitHub-uzanto aŭ organizo. Laŭvola kaj dependas de la tipo.
  • nomo: Nomo de pakaĵo (Bezonata)
  • versio: Paka versio
  • Kvalifikiĝintoj: Pliaj kvalifikaj datumoj por la pakaĵo, kiel OS, arkitekturo, distribuo, ktp. Laŭvola kaj tipspecifa.
  • Subvojo: Plia vojo en la pakaĵo rilate al la paka radiko

Ekzemple:

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

Dependeco-Trako — surloka retplatformo kiu akceptas pretan Fakturon de Materialoj (BOM) generitan CycloneDX и SPDX, tio estas, pretaj specifoj pri ekzistantaj dependecoj. Ĉi tio estas XML-dosiero priskribanta la dependecojn - nomo, hashes, paka url, eldonisto, permesilo. Poste, Dependency Track analizas la BOM, rigardas la CVE-ojn disponeblajn al la identigitaj dependecoj de la vundebleco-datumbazo (NVD, Sonatype OSS Index...), post kio ĝi konstruas grafikaĵojn, kalkulas metrikojn, regule ĝisdatigante datumojn pri la vundebleco-statuso de komponantoj. .

Ekzemplo de kia BOM povus aspekti en XML-formato:

<?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 povas esti uzata ne nur kiel enigo-parametroj por Dependency Track, sed ankaŭ por inventari softvarkomponentojn en la provizoĉeno, ekzemple, por disponigado de softvaro al kliento. En 2014, leĝo estis eĉ proponita en Usono "Leĝo pri Ciber-Provizoĉeno kaj Travidebleco de 2014", kiu deklaris ke aĉetante programaron, ajna ŝtato. La institucio devas peti BOM por malhelpi la uzon de vundeblaj komponantoj, sed la ago ankoraŭ ne ekvalidis.

Revenante al SCA, Dependency Track havas pretajn integriĝojn kun Sciigo-Platformoj kiel Slack, vundeblaj mastrumaj sistemoj kiel Kenna Security. Ankaŭ indas diri, ke Dependency Track, interalie, identigas malmodernajn versiojn de pakaĵoj kaj provizas informojn pri permesiloj (pro SPDX-subteno).

Se ni parolas specife pri la kvalito de SCA, tiam estas fundamenta diferenco.

Dependeca Trako ne akceptas la projekton kiel enigaĵon, sed prefere la BOM. Ĉi tio signifas, ke se ni volas testi la projekton, ni unue devas generi bom.xml, ekzemple uzante CycloneDX. Tiel, Dependency Track estas rekte dependa de CycloneDX. Samtempe ĝi permesas personigon. Jen kion skribis la teamo OZON CycloneDX-modulo por kunmeti BOM-dosierojn por Golang-projektoj por plia skanado per Dependency Track.

Nexus IQ estas komerca SCA-solvo de Sonatype, kiu estas parto de la Sonatype-ekosistemo, kiu ankaŭ inkluzivas Nexus Repository Manager. Nexus IQ povas akcepti kiel enigaĵon ambaŭ militajn arkivojn (por javaj projektoj) per la retinterfaco aŭ API, kaj BOM, se via organizo ankoraŭ ne ŝanĝis de CycloneDX al nova solvo. Male al malfermfontaj solvoj, IQ rilatas ne nur al CP/PURL al la identigita komponento kaj la responda vundebleco en la datumbazo, sed ankaŭ konsideras sian propran esploradon, ekzemple, la nomon de la vundebla funkcio aŭ klaso. La mekanismoj de IQ estos diskutitaj poste en la analizo de la rezultoj.

Ni resumu kelkajn el la funkciaj trajtoj, kaj ankaŭ konsideru la subtenatajn lingvojn por analizo:

Lingvo
Nexus IQ
Dependeco Kontrolo
Dependeco-Trako

java
+
+
+

C / C ++
+
+
-

C#
+
+
-

.Net
+
+
+

erlang
-
-
+

JavaScript (NodeJS)
+
+
+

PHP
+
+
+

python
+
+
+

Rubeno
+
+
+

Perl
-
-
-

Scala
+
+
+

Objektivo C
+
+
-

Swift
+
+
-

R
+
-
-

Go
+
+
+

Funcionalidad

Funcionalidad
Nexus IQ
Dependeco Kontrolo
Dependeco-Trako

La kapablo certigi, ke komponantoj uzitaj en la fontkodo estas kontrolitaj por licencita pureco
+
-
+

Kapablo skani kaj analizi por vundeblecoj kaj permesila pureco por Docker-bildoj
+ Integriĝo kun Clair
-
-

Kapablo agordi sekurecpolitikojn por uzi malfermfontajn bibliotekojn
+
-
-

Kapablo skani malfermfontajn deponejojn por vundeblaj komponantoj
+ RubyGems, Maven, NPM, Nuget, Pypi, Conan, Bower, Conda, Go, p2, R, Yum, Helm, Docker, CocoaPods, Git LFS
-
+ Hex, RubyGems, Maven, NPM, Nuget, Pypi

Havebleco de faka esplorgrupo
+
-
-

Fermita buklo operacio
+
+
+

Uzante triajn datumbazojn
+ Fermita Sonatype-datumbazo
+ Sonatype OSS, NPM Publikaj Konsilistoj
+ Sonatype OSS, NPM Public Advisors, RetireJS, VulnDB, subteno por sia propra vundebla datumbazo

Kapablo filtri malfermfontajn komponantojn kiam vi provas ŝargi en la disvolvan buklon laŭ agorditaj politikoj
+
-
-

Rekomendoj por ripari vundeblecojn, havebleco de ligiloj al korektoj
+
+- (dependas de la priskribo en publikaj datumbazoj)
+- (dependas de la priskribo en publikaj datumbazoj)

Rango de detektitaj vundeblecoj laŭ severeco
+
+
+

Rol-bazita alirmodelo
+
-
+

CLI-subteno
+
+
+- (nur por CycloneDX)

Specimenado/ordigo de vundeblecoj laŭ difinitaj kriterioj
+
-
+

Panelo laŭ stato de la aplikaĵo
+
-
+

Generado de raportoj en formato PDF
+
-
-

Generante raportojn en formato JSONCSV
+
+
-

Ruslingva subteno
-
-
-

Integrigaj kapabloj

Integriĝo
Nexus IQ
Dependeco Kontrolo
Dependeco-Trako

Integriĝo de LDAP/Active Directory
+
-
+

Integriĝo kun kontinua integriga sistemo Bambuo
+
-
-

Integriĝo kun kontinua integriga sistemo TeamCity
+
-
-

Integriĝo kun kontinua integriga sistemo GitLab
+
+- (kiel kromaĵo por GitLab)
+

Integriĝo kun kontinua integriga sistemo Jenkins
+
+
+

Havebleco de kromaĵoj por IDE
+ IntelliJ, Eclipse, Visual Studio
-
-

Subteno por kutima integriĝo per retservoj (API) de la ilo
+
-
+

Dependeco Kontrolo

Unua komenco

Ni rulu Dependecan Kontrolon sur intence vundebla aplikaĵo DVJA.

Por tio ni uzos Dependeco Kontrolo Maven Kromaĵo:

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

Kiel rezulto, dependency-check-report.html aperos en la cela dosierujo.

DevSecOps: principoj de operacio kaj komparo de SCA. Unua parto

Ni malfermu la dosieron. Post resumaj informoj pri la totala nombro da vundeblecoj, ni povas vidi informojn pri vundeblecoj kun alta nivelo de Severeco kaj Konfido, indikante la pakaĵon, CPE kaj nombron da CVE-oj.

Poste venas pli detalaj informoj, precipe la bazo sur kiu la decido estis farita (pruvo), tio estas, certa BOM.

DevSecOps: principoj de operacio kaj komparo de SCA. Unua parto

Poste venas la priskribo de CPE, PURL kaj CVE. Cetere, rekomendoj por korekto ne estas inkluzivitaj pro ilia foresto en la NVD-datumbazo.

DevSecOps: principoj de operacio kaj komparo de SCA. Unua parto

Por sisteme vidi skanajn rezultojn, vi povas agordi Nginx kun minimumaj agordoj, aŭ sendi la rezultajn difektojn al difekta administra sistemo, kiu subtenas konektilojn al Dependeca Kontrolo. Ekzemple, Defect Doĵo.

Dependeco-Trako

fikso

Dependency Track, siavice, estas ret-bazita platformo kun montraj grafikaĵoj, do la urĝa problemo pri stokado de difektoj en triaparta solvo ne aperas ĉi tie.
La subtenataj skriptoj por instalado estas: Docker, WAR, Executable WAR.

Unua komenco

Ni iras al la URL de la funkcianta servo. Ni ensalutas per administranto/administranto, ŝanĝas la ensaluton kaj pasvorton, kaj poste venas al la Panelo. La sekva afero, kiun ni faros, estas krei projekton por testa aplikaĵo en Java en Hejmo/Projektoj → Krei Projekton . Ni prenu la DVJA kiel ekzemplon.

DevSecOps: principoj de operacio kaj komparo de SCA. Unua parto

Ĉar Dependeca Trako povas nur akcepti BOM kiel enigaĵon, ĉi tiu BOM devas esti prenita. Ni profitu CycloneDX Maven Kromaĵo:

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

Ni ricevas bom.xml kaj ŝarĝas la dosieron en la kreita projekto DVJA → Dependecoj → Alŝutu BOM.

Ni iru al Administrado → Analiziloj. Ni komprenas, ke ni nur havas Internan Analizilon ebligita, kiu inkluzivas NVD. Ni ankaŭ konektu Sonatype OSS Index.

DevSecOps: principoj de operacio kaj komparo de SCA. Unua parto

Tiel, ni ricevas la sekvan bildon por nia projekto:

DevSecOps: principoj de operacio kaj komparo de SCA. Unua parto

Ankaŭ en la listo vi povas trovi unu vundeblecon aplikeblan al Sonatype OSS:

DevSecOps: principoj de operacio kaj komparo de SCA. Unua parto

La ĉefa seniluziiĝo estis, ke Dependency Track ne plu akceptas Dependecan Kontrolon xml-raportojn. La plej novaj subtenataj versioj de la Dependeca Kontrolo-integriĝo estis 1.0.0 - 4.0.2, dum mi provis 5.3.2.

tie видео (kaj jen) kiam ankoraŭ eblis.

Nexus IQ

Unua komenco

Instalado de Nexus IQ venas de la arkivoj de dokumentado, sed ni konstruis Docker-bildon por ĉi tiuj celoj.

Post ensaluti en la konzolon, vi devas krei Organizon kaj Aplikon.

DevSecOps: principoj de operacio kaj komparo de SCA. Unua parto

DevSecOps: principoj de operacio kaj komparo de SCA. Unua parto

DevSecOps: principoj de operacio kaj komparo de SCA. Unua parto

Kiel vi povas vidi, la aranĝo en la kazo de IQ estas iom pli komplika, ĉar ni ankaŭ bezonas krei politikojn, kiuj estas aplikeblaj por malsamaj "stadioj" (dev, build, stage, release). Ĉi tio estas necesa por bloki vundeblajn komponantojn kiam ili moviĝas tra la dukto pli proksime al produktado, aŭ bloki ilin tuj kiam ili eniras la Nexus Repo kiam elŝutite de programistoj.

Por senti la diferencon inter malferma fonto kaj entrepreno, ni faru la saman skanadon per Nexus IQ sammaniere tra Kromaĵo Maven, antaŭe kreinte testaplikaĵon en la interfaco 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>

Sekvu la URL al la generita raporto en la retinterfaco de IQ:

DevSecOps: principoj de operacio kaj komparo de SCA. Unua parto

Ĉi tie vi povas vidi ĉiujn politikajn malobservojn indikante malsamajn signifonivelojn (de Informoj ĝis Sekureca Kritika). La litero D apud la komponento signifas ke la komponento estas Rekta Dependeco, kaj la litero T apud la komponento signifas ke la komponento estas Transitiva Dependeco, tio estas, ĝi estas transitiva.

Cetere, la raporto State of Open Source Security Report 2020 de Snyk raportas, ke pli ol 70% de malfermfontaj vundeblecoj malkovritaj en Node.js, Java kaj Ruby estas en transitivaj dependecoj.

Se ni malfermas unu el la malobservoj de la politiko de Nexus IQ, ni povas vidi priskribon de la komponanto, kaj ankaŭ Versio-Grafikon, kiu montras la lokon de la nuna versio en la tempografiko, kaj ankaŭ en kiu punkto la vundebleco ĉesas. esti vundebla. La alteco de la kandeloj sur la grafikaĵo montras la popularecon uzi ĉi tiun komponanton.

DevSecOps: principoj de operacio kaj komparo de SCA. Unua parto

Se vi iras al la sekcio de vundeblecoj kaj vastigas la CVE, vi povas legi priskribon de ĉi tiu vundebleco, rekomendojn por forigo, kaj ankaŭ la kialon, kial ĉi tiu komponanto estis malobservita, tio estas, la ĉeesto de la klaso. DiskFileitem.class.

DevSecOps: principoj de operacio kaj komparo de SCA. Unua parto

DevSecOps: principoj de operacio kaj komparo de SCA. Unua parto

Ni resumu nur tiujn rilatajn al triaj Java-komponentoj, forigante la js-komponentojn. En krampoj ni indikas la nombron da vundeblecoj, kiuj estis trovitaj ekster NVD.

Tuta Nexus IQ:

  • Dependecoj Skanitaj: 62
  • Vundeblaj Dependecoj: 16
  • Vundeblecoj Trovitaj: 42 (8 sonatip db)

Tuta Dependeca Kontrolo:

  • Dependecoj Skanitaj: 47
  • Vundeblaj Dependecoj: 13
  • Vundeblecoj Trovitaj: 91 (14 sonatipoj)

Totala Dependeca Vojo:

  • Dependecoj Skanitaj: 59
  • Vundeblaj Dependecoj: 10
  • Vundeblecoj Trovitaj: 51 (1 sonatipoj)

En la sekvaj paŝoj, ni analizos la rezultojn akiritajn kaj eltrovos, kiu el ĉi tiuj vundeblecoj estas vera difekto kaj kiu estas falsa pozitivo.

Malgarantio

Ĉi tiu recenzo ne estas nediskutebla vero. La aŭtoro ne havis celon reliefigi apartan instrumenton kontraŭ la fono de aliaj. La celo de la revizio estis montri la mekanismojn de funkciado de SCA-iloj kaj manierojn kontroli iliajn rezultojn.

Komparo de rezultoj

Kondiĉoj:

Malvera pozitivo por triapartaj komponent vundeblecoj estas:

  • CVE miskongruo al identigita komponento
  • Ekzemple, se vundebleco estas identigita en la kadro struts2, kaj la ilo montras al komponento de la kadro struts-kaheloj, al kiu ĉi tiu vundebleco ne validas, tiam ĉi tio estas falsa pozitivo.
  • CVE miskongruo al la identigita versio de la komponento
  • Ekzemple, la vundebleco estas ligita al python-versio > 3.5 kaj la ilo markas version 2.7 kiel vundebla - ĉi tio estas falsa pozitivo, ĉar fakte la vundebleco nur validas por la produkta branĉo 3.x.
  • Duobligi CVE
  • Ekzemple, se la SCA precizigas CVE kiu ebligas RCE, tiam la SCA precizigas CVE por tiu sama komponento kiu validas por Cisco-produktoj trafitaj per tiu RCE. En ĉi tiu kazo ĝi estos falsa pozitiva.
  • Ekzemple, CVE estis trovita en printempa-retkomponento, post kiu SCA montras al la sama CVE en aliaj komponentoj de la Printempa Kadro, dum la CVE havas nenion farendaĵo kun aliaj komponentoj. En ĉi tiu kazo ĝi estos falsa pozitiva.

La celo de la studo estis la Open Source projekto DVJA. La studo implikis nur javajn komponantojn (sen js).

Resumaj rezultoj

Ni iru rekte al la rezultoj de mana revizio de identigitaj vundeblecoj. La plena raporto por ĉiu CVE troveblas en la Apendico.

Resumaj rezultoj por ĉiuj vundeblecoj:

Parametro
Nexus IQ
Dependeco Kontrolo
Dependeco-Trako

Totalaj vundeblecoj identigitaj
42
91
51

Malĝuste identigitaj vundeblecoj (malvere pozitivaj)
2 (4.76%)
62 (68,13%)
29 (56.86%)

Neniuj rilataj vundeblecoj trovitaj (malvera negativa)
10
20
27

Resumaj rezultoj laŭ komponantoj:

Parametro
Nexus IQ
Dependeco Kontrolo
Dependeco-Trako

Totalaj komponantoj identigitaj
62
47
59

Totalaj vundeblaj komponantoj
16
13
10

Malĝuste identigitaj vundeblaj komponantoj (malvere pozitivaj)
1
5
0

Malĝuste identigitaj vundeblaj komponantoj (malvere pozitivaj)
0
6
6

Ni konstruu vidajn grafikaĵojn por taksi la rilatumon de falsa pozitiva kaj falsa negativa al la totala nombro da vundeblecoj. Komponantoj estas markitaj horizontale, kaj vundeblecoj identigitaj en ili estas markitaj vertikale.

DevSecOps: principoj de operacio kaj komparo de SCA. Unua parto

DevSecOps: principoj de operacio kaj komparo de SCA. Unua parto

DevSecOps: principoj de operacio kaj komparo de SCA. Unua parto

Por komparo, simila studo estis farita de la Sonatype-teamo testanta projekton de 1531 komponentoj uzante OWASP Dependency Check. Kiel ni povas vidi, la proporcio de bruo al ĝustaj respondoj estas komparebla al niaj rezultoj.

DevSecOps: principoj de operacio kaj komparo de SCA. Unua parto
fonto: www.sonatype.com/why-precision-matters-ebook

Ni rigardu kelkajn CVE-ojn el niaj skanaj rezultoj por kompreni la kialon de ĉi tiuj rezultoj.

Legi pli

NeXX

Ni unue rigardu kelkajn interesajn punktojn pri la Sonatype Nexus IQ.

Nexus IQ atentigas problemon kun deserialigo kun la kapablo plenumi RCE en la Printempa Kadro plurfoje. CVE-2016-1000027 en spring-web:3.0.5 unuafoje, kaj CVE-2011-2894 en spring-context:3.0.5 kaj spring-core:3.0.5. Komence, ŝajnas, ke ekzistas duobligo de vundebleco tra pluraj CVEoj. Ĉar, se vi rigardas CVE-2016-1000027 kaj CVE-2011-2894 en la datumbazo NVD, ŝajnas, ke ĉio estas evidenta

Komponanto
Vundebleco

printempo-retejo:3.0.5
CVE-2016-1000027

printempo-kunteksto:3.0.5
CVE-2011-2894

printempo-kerno:3.0.5
CVE-2011-2894

Priskribo CVE-2011-2894 de NVD:
DevSecOps: principoj de operacio kaj komparo de SCA. Unua parto

Priskribo CVE-2016-1000027 de NVD:
DevSecOps: principoj de operacio kaj komparo de SCA. Unua parto

CVE-2011-2894 mem estas sufiĉe fama. En la raporto Blanka Fonto 2011 ĉi tiu CVE estis rekonita kiel unu el la plej oftaj. Priskriboj por CVE-2016-100027, principe, estas malmultaj en NVD, kaj ĝi ŝajnas aplikebla nur por Spring Framework 4.1.4. Ni rigardu referenco kaj ĉi tie ĉio fariĝas pli-malpli klara. De Teneblaj artikoloj Ni komprenas tion krom la vundebleco en RemoteInvocationSerializingExporter en CVE-2011-2894, la vundebleco estas observita en HttpInvokerServiceExporter. Jen kion Nexus IQ diras al ni:

DevSecOps: principoj de operacio kaj komparo de SCA. Unua parto

Tamen, estas nenio tia en NVD, tial Dependeco-Kontrolo kaj Dependeco-Spuro ĉiu ricevas falsan negativon.

Ankaŭ el la priskribo de CVE-2011-2894 oni povas kompreni, ke la vundebleco ja ĉeestas kaj spring-context:3.0.5 kaj spring-core:3.0.5. Konfirmo de tio troveblas en artikolo de la persono kiu trovis ĉi tiun vundeblecon.

NeXX

Komponanto
Vundebleco
rezulto

struts2-kerno:2.3.30
CVE-2016-4003
FALSA

Se ni studas la vundeblecon CVE-2016-4003, ni komprenos, ke ĝi estis riparita en versio 2.3.28, tamen, Nexus IQ raportas ĝin al ni. Estas noto en la priskribo de la vundebleco:

DevSecOps: principoj de operacio kaj komparo de SCA. Unua parto

Tio estas, la vundebleco ekzistas nur kune kun malmoderna versio de la JRE, pri kiu ili decidis averti nin. Tamen, ni konsideras ĉi tiun Falsan Pozitivan, kvankam ne la plej malbona.

Numero 3

Komponanto
Vundebleco
rezulto

xwork-kerno:2.3.30
CVE-2017-9804
VERA

xwork-kerno:2.3.30
CVE-2017-7672
FALSA

Se ni rigardas la priskribojn de CVE-2017-9804 kaj CVE-2017-7672, ni komprenos, ke la problemo estas URLValidator class, kun CVE-2017-9804 devenanta de CVE-2017-7672. La ĉeesto de la dua vundebleco ne portas ajnan utilan ŝarĝon krom la fakto, ke ĝia severeco pliiĝis al Alta, do ni povas konsideri ĝin nenecesa bruo.

Ĝenerale, neniuj aliaj falsaj pozitivoj estis trovitaj por Nexus IQ.

NeXX

Estas pluraj aferoj, kiuj elstaras IQ de aliaj solvoj.

Komponanto
Vundebleco
rezulto

printempo-retejo:3.0.5
CVE-2020-5398
VERA

La CVE en la NVD deklaras, ke ĝi nur validas por versioj 5.2.x antaŭ 5.2.3, 5.1.x antaŭ 5.1.13, kaj versioj 5.0.x antaŭ 5.0.16, tamen, se ni rigardas la CVE-priskribon en Nexus IQ , tiam ni vidos la jenon:
Konsila Devio-Avizo: La Sonatype-sekureca esplorteamo malkovris, ke ĉi tiu vundebleco estis enkondukita en versio 3.0.2.RELEASE kaj ne 5.0.x kiel dirite en la konsilo.

Ĉi tio estas sekvata de PoC por ĉi tiu vundebleco, kiu deklaras, ke ĝi ĉeestas en versio 3.0.5.

Falsa negativo estas sendita al Dependeca Kontrolo kaj Dependeco-Spuro.

NeXX

Ni rigardu falsan pozitivon por Dependeca Kontrolo kaj Dependeco-Spuro.

Dependeca Kontrolo elstaras pro tio, ke ĝi reflektas tiujn CVE-ojn kiuj validas por la tuta kadro en NVD al tiuj komponentoj al kiuj ĉi tiuj CVE-oj ne validas. Ĉi tio koncernas CVE-2012-0394, CVE-2013-2115, CVE-2014-0114, CVE-2015-0899, CVE-2015-2992, CVE-2016-1181, CVE-2016-1182, kiu dependas de kontrolo. ” al struts-taglib:1.3.8 kaj struts-tiles-1.3.8. Ĉi tiuj komponantoj havas nenion komunan kun tio, kio estas priskribita en la CVE - pettraktado, paĝvalidigo ktp. Ĉi tio estas pro la fakto, ke tio, kion ĉi tiuj CVE-oj kaj komponantoj havas komune, estas nur la kadro, tial Dependency Check konsideris ĝin vundebleco.

La sama situacio estas kun spring-tx:3.0.5, kaj simila situacio kun struts-core:1.3.8. Por struts-kerno, Dependeca Kontrolo kaj Dependeca Vojo trovis multajn vundeblecojn, kiuj efektive aplikeblas al struts2-kerno, kiu estas esence aparta kadro. En ĉi tiu kazo, Nexus IQ ĝuste komprenis la bildon kaj en la CVE-oj kiujn ĝi elsendis, ĝi indikis, ke struts-kerno atingis la finon de vivo kaj necesas moviĝi al struts2-kerno.

NeXX

En iuj situacioj, estas maljuste interpreti evidentan eraron pri Dependeco-Kontrolo kaj Dependeco-Spuro. Precipe CVE-2013-4152, CVE-2013-6429, CVE-2013-6430, CVE-2013-7315, CVE-2014-0054, CVE-2014-0225, CVE-2014-0225, kiuj estas Dependeca Kontrolo kaj Dependeco. Trako atribuita al spring-core:3.0.5 fakte apartenas al spring-web:3.0.5. Samtempe, iuj el ĉi tiuj CVE-oj ankaŭ estis trovitaj de Nexus IQ, tamen, IQ ĝuste identigis ilin al alia komponento. Ĉar ĉi tiuj vundeblecoj ne estis trovitaj en printempo-kerno, oni ne povas argumenti, ke ili principe ne estas en la kadro kaj malfermfontaj iloj ĝuste atentigis ĉi tiujn vundeblecojn (ili nur maltrafis).

trovoj

Kiel ni povas vidi, determini la fidindecon de identigitaj vundeblecoj per mana revizio ne donas malambiguajn rezultojn, tial polemikaj aferoj aperas. La rezultoj estas, ke la solvo Nexus IQ havas la plej malaltan malveran pozitivan indicon kaj la plej altan precizecon.

Antaŭ ĉio, ĉi tio estas pro la fakto, ke la Sonatype-teamo vastigis la priskribon por ĉiu vundebleco de CVE de NVD en siaj datumbazoj, indikante la vundeblecojn por aparta versio de la komponantoj ĝis la klaso aŭ funkcio, farante plian esploradon (ekzemple. , kontrolante vundeblecojn sur pli malnovaj softvarversioj).

Gravan influon sur la rezultoj ankaŭ ludas tiuj vundeblecoj, kiuj ne estis inkluditaj en NVD, sed tamen ĉeestas en la datumbazo Sonatype kun la marko SONATYPE. Laŭ la raporto La Ŝtato de Malfermfontaj Sekurecaj Vundeblecoj 2020 45% de malkovritaj malfermfontaj vundeblecoj ne estas raportitaj al NVD. Laŭ la datumbazo WhiteSource, nur 29% de ĉiuj malfermfontaj vundeblecoj raportitaj ekster NVD finas eldonitaj tie, tial gravas serĉi vundeblecojn ankaŭ en aliaj fontoj.

Kiel rezulto, Dependeca Kontrolo produktas multe da bruo, mankas iuj vundeblaj komponantoj. Dependeca Vojo produktas malpli da bruo kaj detektas grandan nombron da komponantoj, kio ne videble vundas la okulojn en la interreta interfaco.

Tamen, praktiko montras, ke malferma fonto devus fariĝi la unuaj paŝoj al matura DevSecOps. La unua afero, pri kiu vi devus pensi, kiam vi integrigas SCA en evoluon, estas procezoj, nome, pensi kune kun administrado kaj rilataj fakoj pri kiaj idealaj procezoj devus aspekti en via organizo. Povas rezulti, ke por via organizo, komence, Dependeco-Kontrolo aŭ Dependeco-Trako kovros ĉiujn komercajn bezonojn, kaj Enterprise-solvoj estos logika daŭrigo pro la kreskanta komplekseco de la evoluantaj aplikaĵoj.

Apendico A: Komponantaj Rezultoj
Legendo:

  • Alta—altaj kaj kritikaj nivelaj vundeblecoj en la komponanto
  • Meza — Vundeblecoj de meza kritikeca nivelo en la komponento
  • VERA — Vera pozitiva afero
  • FALSA — Falsa pozitiva afero

Komponanto
Nexus IQ
Dependeco Kontrolo
Dependeco-Trako
rezulto

dom4j: 1.6.1
alta
alta
alta
VERA

log4j-kerno: 2.3
alta
alta
alta
VERA

log4j: 1.2.14
alta
alta
-
VERA

komunaj kolektoj:3.1
alta
alta
alta
VERA

commons-dosieralŝuto:1.3.2
alta
alta
alta
VERA

commons-beanutils:1.7.0
alta
alta
alta
VERA

commons-codec:1:10
mediumo
-
-
VERA

mysql-connector-java:5.1.42
alta
alta
alta
VERA

printempa esprimo:3.0.5
alta
komponanto ne trovita

VERA

printempo-retejo:3.0.5
alta
komponanto ne trovita
alta
VERA

printempo-kunteksto:3.0.5
mediumo
komponanto ne trovita
-
VERA

printempo-kerno:3.0.5
mediumo
alta
alta
VERA

struts2-config-browser-plugin:2.3.30
mediumo
-
-
VERA

printempo-tx:3.0.5
-
alta
-
FALSA

struts-kerno:1.3.8
alta
alta
alta
VERA

xwork-kerno: 2.3.30
alta
-
-
VERA

struts2-kerno: 2.3.30
alta
alta
alta
VERA

struts-taglib:1.3.8
-
alta
-
FALSA

apogtraboj-kaheloj-1.3.8
-
alta
-
FALSA

Apendico B: Vulnerability Rezultoj
Legendo:

  • Alta—altaj kaj kritikaj nivelaj vundeblecoj en la komponanto
  • Meza — Vundeblecoj de meza kritikeca nivelo en la komponento
  • VERA — Vera pozitiva afero
  • FALSA — Falsa pozitiva afero

Komponanto
Nexus IQ
Dependeco Kontrolo
Dependeco-Trako
Severity
rezulto
komento

dom4j: 1.6.1
CVE-2018-1000632
CVE-2018-1000632
CVE-2018-1000632
alta
VERA

CVE-2020-10683
CVE-2020-10683
CVE-2020-10683
alta
VERA

log4j-kerno: 2.3
CVE-2017-5645
CVE-2017-5645
CVE-2017-5645
alta
VERA

CVE-2020-9488
CVE-2020-9488
CVE-2020-9488
malalte
VERA

log4j: 1.2.14
CVE-2019-17571
CVE-2019-17571
-
alta
VERA

-
CVE-2020-9488
-
malalte
VERA

SONATYPE-2010-0053
-
-
alta
VERA

komunaj kolektoj:3.1
-
CVE-2015-6420
CVE-2015-6420
alta
FALSA
Duoblaj RCE(OSSINDEX)

-
CVE-2017-15708
CVE-2017-15708
alta
FALSA
Duoblaj RCE(OSSINDEX)

SONATYPE-2015-0002
RCE (OSSINDEX)
RCE(OSSINDEX)
alta
VERA

commons-dosieralŝuto:1.3.2
CVE-2016-1000031
CVE-2016-1000031
CVE-2016-1000031
alta
VERA

SONATYPE-2014-0173
-
-
mediumo
VERA

commons-beanutils:1.7.0
CVE-2014-0114
CVE-2014-0114
CVE-2014-0114
alta
VERA

-
CVE-2019-10086
CVE-2019-10086
alta
FALSA
La vundebleco validas nur por versioj 1.9.2+

commons-codec:1:10
SONATYPE-2012-0050
-
-
mediumo
VERA

mysql-connector-java:5.1.42
CVE-2018-3258
CVE-2018-3258
CVE-2018-3258
alta
VERA

CVE-2019-2692
CVE-2019-2692
-
mediumo
VERA

-
CVE-2020-2875
-
mediumo
FALSA
La sama vundebleco kiel CVE-2019-2692, sed kun la noto "atakoj povas signife influi pliajn produktojn"

-
CVE-2017-15945
-
alta
FALSA
Ne rilata al mysql-connector-java

-
CVE-2020-2933
-
malalte
FALSA
Duplikato de CVE-2020-2934

CVE-2020-2934
CVE-2020-2934
-
mediumo
VERA

printempa esprimo:3.0.5
CVE-2018-1270
komponanto ne trovita
-
alta
VERA

CVE-2018-1257
-
-
mediumo
VERA

printempo-retejo:3.0.5
CVE-2016-1000027
komponanto ne trovita
-
alta
VERA

CVE-2014-0225
-
CVE-2014-0225
alta
VERA

CVE-2011-2730
-
-
alta
VERA

-
-
CVE-2013-4152
mediumo
VERA

CVE-2018-1272
-
-
alta
VERA

CVE-2020-5398
-
-
alta
VERA
Ilustra ekzemplo favore al IQ: "La Sonatype-sekureca esplorteamo malkovris, ke ĉi tiu vundebleco estis enkondukita en versio 3.0.2.RELEASE kaj ne 5.0.x kiel dirite en la konsilo."

CVE-2013-6429
-
-
mediumo
VERA

CVE-2014-0054
-
CVE-2014-0054
mediumo
VERA

CVE-2013-6430
-
-
mediumo
VERA

printempo-kunteksto:3.0.5
CVE-2011-2894
komponanto ne trovita
-
mediumo
VERA

printempo-kerno:3.0.5
-
CVE-2011-2730
CVE-2011-2730
alta
VERA

CVE-2011-2894
CVE-2011-2894
CVE-2011-2894
mediumo
VERA

-
-
CVE-2013-4152
mediumo
FALSA
Duplikato de la sama vundebleco en printempo-retejo

-
CVE-2013-4152
-
mediumo
FALSA
La vundebleco rilatas al la printempa-reteja komponanto

-
CVE-2013-6429
CVE-2013-6429
mediumo
FALSA
La vundebleco rilatas al la printempa-reteja komponanto

-
CVE-2013-6430
-
mediumo
FALSA
La vundebleco rilatas al la printempa-reteja komponanto

-
CVE-2013-7315
CVE-2013-7315
mediumo
FALSA
DIVIDE el CVE-2013-4152. + La vundebleco rilatas al la printempa retejo

-
CVE-2014-0054
CVE-2014-0054
mediumo
FALSA
La vundebleco rilatas al la printempa-reteja komponanto

-
CVE-2014-0225
-
alta
FALSA
La vundebleco rilatas al la printempa-reteja komponanto

-
-
CVE-2014-0225
alta
FALSA
Duplikato de la sama vundebleco en printempo-retejo

-
CVE-2014-1904
CVE-2014-1904
mediumo
FALSA
La vundebleco rilatas al la komponanto spring-web-mvc

-
CVE-2014-3625
CVE-2014-3625
mediumo
FALSA
La vundebleco rilatas al la komponanto spring-web-mvc

-
CVE-2016-9878
CVE-2016-9878
alta
FALSA
La vundebleco rilatas al la komponanto spring-web-mvc

-
CVE-2018-1270
CVE-2018-1270
alta
FALSA
Por printempa-esprimo/printempaj-mesaĝoj

-
CVE-2018-1271
CVE-2018-1271
mediumo
FALSA
La vundebleco rilatas al la komponanto spring-web-mvc

-
CVE-2018-1272
CVE-2018-1272
alta
VERA

CVE-2014-3578
CVE-2014-3578 (OSSINDEX)
CVE-2014-3578
mediumo
VERA

SONATYPE-2015-0327
-
-
malalte
VERA

struts2-config-browser-plugin:2.3.30
SONATYPE-2016-0104
-
-
mediumo
VERA

printempo-tx:3.0.5
-
CVE-2011-2730
-
alta
FALSA
La vundebleco ne estas specifa por spring-tx

-
CVE-2011-2894
-
alta
FALSA
La vundebleco ne estas specifa por spring-tx

-
CVE-2013-4152
-
mediumo
FALSA
La vundebleco ne estas specifa por spring-tx

-
CVE-2013-6429
-
mediumo
FALSA
La vundebleco ne estas specifa por spring-tx

-
CVE-2013-6430
-
mediumo
FALSA
La vundebleco ne estas specifa por spring-tx

-
CVE-2013-7315
-
mediumo
FALSA
La vundebleco ne estas specifa por spring-tx

-
CVE-2014-0054
-
mediumo
FALSA
La vundebleco ne estas specifa por spring-tx

-
CVE-2014-0225
-
alta
FALSA
La vundebleco ne estas specifa por spring-tx

-
CVE-2014-1904
-
mediumo
FALSA
La vundebleco ne estas specifa por spring-tx

-
CVE-2014-3625
-
mediumo
FALSA
La vundebleco ne estas specifa por spring-tx

-
CVE-2016-9878
-
alta
FALSA
La vundebleco ne estas specifa por spring-tx

-
CVE-2018-1270
-
alta
FALSA
La vundebleco ne estas specifa por spring-tx

-
CVE-2018-1271
-
mediumo
FALSA
La vundebleco ne estas specifa por spring-tx

-
CVE-2018-1272
-
mediumo
FALSA
La vundebleco ne estas specifa por spring-tx

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

mediumo
FASLE
Vundebleco al Struts 2

-
CVE-2012-0391 (OSSINDEX)
CVE-2012-0391
alta
FALSA
Vundebleco al Struts 2

-
CVE-2014-0094 (OSSINDEX)
CVE-2014-0094
mediumo
FALSA
Vundebleco al Struts 2

-
CVE-2014-0113 (OSSINDEX)
CVE-2014-0113
alta
FALSA
Vundebleco al Struts 2

CVE-2016-1182
3VE-2016-1182
-
alta
VERA

-
-
CVE-2011-5057
mediumo
FALSA
Vundebleco al Struts 2

-
CVE-2012-0392 (OSSINDEX)
CVE-2012-0392
alta
FALSA
Vundebleco al Struts 2

-
CVE-2012-0393 (OSSINDEX)
CVE-2012-0393
mediumo
FALSA
Vundebleco al Struts 2

CVE-2015-0899
CVE-2015-0899
-
alta
VERA

-
CVE-2012-0394
CVE-2012-0394
mediumo
FALSA
Vundebleco al Struts 2

-
CVE-2012-0838 (OSSINDEX)
CVE-2012-0838
alta
FALSA
Vundebleco al Struts 2

-
CVE-2013-1965 (OSSINDEX)
CVE-2013-1965
alta
FALSA
Vundebleco al Struts 2

-
CVE-2013-1966 (OSSINDEX)
CVE-2013-1966
alta
FASLE
Vundebleco al Struts 2

-
CVE-2013-2115
CVE-2013-2115
alta
FASLE
Vundebleco al Struts 2

-
CVE-2013-2134 (OSSINDEX)
CVE-2013-2134
alta
FASLE
Vundebleco al Struts 2

-
CVE-2013-2135 (OSSINDEX)
CVE-2013-2135
alta
FASLE
Vundebleco al Struts 2

CVE-2014-0114
CVE-2014-0114
-
alta
VERA

-
CVE-2015-2992
CVE-2015-2992
mediumo
FALSA
Vundebleco al Struts 2

-
CVE-2016-0785 (OSSINDEX)
CVE-2016-0785
alta
FALSA
Vundebleco al Struts 2

CVE-2016-1181
CVE-2016-1181
-
alta
VERA

-
CVE-2016-4003 (OSSINDEX)
CVE-2016-4003
alta
FALSA
Vundebleco al Struts 2

xwork-kerno:2.3.30
CVE-2017-9804
-
-
alta
VERA

SONATYPE-2017-0173
-
-
alta
VERA

CVE-2017-7672
-
-
alta
FALSA
Duplikato de CVE-2017-9804

SONATYPE-2016-0127
-
-
alta
VERA

struts2-kerno:2.3.30
-
CVE-2016-6795
CVE-2016-6795
alta
VERA

-
CVE-2017-9787
CVE-2017-9787
alta
VERA

-
CVE-2017-9791
CVE-2017-9791
alta
VERA

-
CVE-2017-9793
-
alta
FALSA
Duplikato de CVE-2018-1327

-
CVE-2017-9804
-
alta
VERA

-
CVE-2017-9805
CVE-2017-9805
alta
VERA

CVE-2016-4003
-
-
mediumo
FALSA
Aplikebla al Apache Struts 2.x ĝis 2.3.28, kiu estas versio 2.3.30. Tamen, surbaze de la priskribo, la CVE validas por iu ajn versio de Struts 2 se JRE 1.7 aŭ malpli estas uzata. Ŝajne ili decidis reasekurigi nin ĉi tie, sed ĝi aspektas pli kiel FALSA

-
CVE-2018-1327
CVE-2018-1327
alta
VERA

CVE-2017-5638
CVE-2017-5638
CVE-2017-5638
alta
VERA
La sama vundebleco, kiun Equifax-piratoj ekspluatis en 2017

CVE-2017-12611
CVE-2017-12611
-
alta
VERA

CVE-2018-11776
CVE-2018-11776
CVE-2018-11776
alta
VERA

struts-taglib:1.3.8
-
CVE-2012-0394
-
mediumo
FALSA
Por struts2-kerno

-
CVE-2013-2115
-
alta
FALSA
Por struts2-kerno

-
CVE-2014-0114
-
alta
FALSA
Por commons-beanutils

-
CVE-2015-0899
-
alta
FALSA
Ne validas por taglib

-
CVE-2015-2992
-
mediumo
FALSA
Rilatas al struts2-kerno

-
CVE-2016-1181
-
alta
FALSA
Ne validas por taglib

-
CVE-2016-1182
-
alta
FALSA
Ne validas por taglib

apogtraboj-kaheloj-1.3.8
-
CVE-2012-0394
-
mediumo
FALSA
Por struts2-kerno

-
CVE-2013-2115
-
alta
FALSA
Por struts2-kerno

-
CVE-2014-0114
-
alta
FALSA
Sub commons-beanutils

-
CVE-2015-0899
-
alta
FALSA
Ne validas por kaheloj

-
CVE-2015-2992
-
mediumo
FALSA
Por struts2-kerno

-
CVE-2016-1181
-
alta
FALSA
Ne validas por taglib

-
CVE-2016-1182
-
alta
FALSA
Ne validas por taglib

fonto: www.habr.com

Aldoni komenton