DevSecOps: principper for drift og sammenligning af SCA. Del et

Betydningen af ​​analyse af tredjeparts softwarekomponenter (Software Composition Analysis - SCA) i udviklingsprocessen vokser med udgivelsen af ​​årlige rapporter om sårbarhederne i open source-biblioteker, som udgives af Synopsys, Sonatype, Snyk og White Source . Ifølge rapporten State of Open Source Security Vulnerabilities 2020 antallet af identificerede open source-sårbarheder i 2019 steg næsten 1.5 gange i forhold til året før, mens open source-komponenter bruges af 60% til 80% af projekterne. På et uafhængigt grundlag er SCA-processer en separat praksis af OWASP SAMM og BSIMM som en indikator for modenhed, og i første halvdel af 2020 udgav OWASP den nye OWASP Software Component Verification Standard (SCVS), der giver bedste praksis til at verificere tredje- partskomponenter i forsyningskæden BY.

DevSecOps: principper for drift og sammenligning af SCA. Del et

En af de mest illustrative sager skete med Equifax i maj 2017. Ukendte angribere fik oplysninger om 143 millioner amerikanere, herunder fulde navne, adresser, CPR-numre og kørekort. I 209 sager indeholdt dokumenterne også oplysninger om ofrenes bankkort. Denne lækage opstod som et resultat af udnyttelsen af ​​en kritisk sårbarhed i Apache Struts 000 (CVE-2-2017), mens rettelsen blev frigivet tilbage i marts 5638. Virksomheden havde to måneder til at installere opdateringen, men ingen bøvl med den.

Denne artikel vil diskutere spørgsmålet om valg af et værktøj til at udføre SCA ud fra et synspunkt om kvaliteten af ​​analyseresultaterne. Der vil også blive givet en funktionel sammenligning af værktøjerne. Processen med at integrere i CI/CD og integrationsmuligheder vil blive overladt til efterfølgende publikationer. En bred vifte af værktøjer blev præsenteret af OWASP på dit websted, men i den aktuelle anmeldelse vil vi kun berøre det mest populære open source-værktøj Dependency Check, den lidt mindre kendte open source-platform Dependency Track og Enterprise-løsningen Sonatype Nexus IQ. Vi vil også forstå, hvordan disse løsninger fungerer, og sammenligne de opnåede resultater for falske positive.

DevSecOps: principper for drift og sammenligning af SCA. Del et

Virkemåde

Afhængighedskontrol er et hjælpeprogram (CLI, maven, jenkins-modul, ant) ​​der analyserer projektfiler, indsamler oplysninger om afhængigheder (pakkenavn, gruppeid, specifikationstitel, version...), bygger en CPE-linje (Common Platform Enumeration) , Pakke URL ( PURL) og identificerer sårbarheder for CPE/PURL fra databaser (NVD, Sonatype OSS Index, NPM Audit API...), hvorefter den bygger en engangsrapport i HTML, JSON, XML-format...

Lad os se på, hvordan CPE ser ud:

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

  • En del: Angivelse af, at komponenten vedrører applikationen (a), operativsystemet (o), hardwaren (h) (påkrævet)
  • Forhandler: Produktproducentens navn (påkrævet)
  • Produkt: Produktnavn (påkrævet)
  • Version: Komponentversion (forældet vare)
  • Update: Pakkeopdatering
  • Udgave: Ældre version (udgået vare)
  • Sprog: Sprog defineret i RFC-5646
  • SW udgave: Software version
  • Mål SW: Softwaremiljø, som produktet fungerer i
  • Mål HW: Hardwaremiljøet, som produktet fungerer i
  • Andre: Leverandør- eller produktinformation

Et eksempel på CPE ser sådan ud:

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

Linjen betyder, at CPE version 2.3 beskriver applikationskomponenten fra producenten pivotal_software med titel spring_framework version 3.0.0. Hvis vi åbner en sårbarhed CVE-2014-0225 i NVD kan vi se en omtale af denne CPE. Det første problem, som du straks skal være opmærksom på, er, at CVE i NVD ifølge CPE rapporterer et problem i rammen, og ikke i en specifik komponent. Det vil sige, at hvis udviklere er tæt bundet til rammerne, og den identificerede sårbarhed ikke påvirker de moduler, som udviklerne bruger, vil en sikkerhedsspecialist på en eller anden måde skulle skille denne CVE ad og tænke på opdatering.

URL'en bruges også af SCA-værktøjer. Pakkens URL-format er som følger:

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

  • Skema: Der vil altid være 'pkg', der angiver, at dette er en pakke-URL (påkrævet)
  • Type: Pakkens "type" eller "protokollen" for pakken, såsom maven, npm, nuget, gem, pypi osv. (Påkrævet)
  • Navneområde: Nogle navnepræfikser, såsom et Maven-gruppe-id, Docker-billedejer, GitHub-bruger eller organisation. Valgfrit og afhænger af typen.
  • Navn: Pakkenavn (påkrævet)
  • Version: Pakkeversion
  • kvalifikationsturneringer: Yderligere kvalifikationsdata for pakken, såsom OS, arkitektur, distribution osv. Valgfri og typespecifik.
  • Understi: Yderligere sti i pakken i forhold til pakkeroden

For eksempel:

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

Afhængighedsspor — en on-premise webplatform, der accepterer færdiglavede styklister (BOM) genereret CycloneDX и SPDX, det vil sige færdige specifikationer om eksisterende afhængigheder. Dette er en XML-fil, der beskriver afhængighederne - navn, hashes, pakke-url, udgiver, licens. Dernæst parser Dependency Track styklisten, ser på de CVE'er, der er tilgængelige for de identificerede afhængigheder fra sårbarhedsdatabasen (NVD, Sonatype OSS Index...), hvorefter det bygger grafer, beregner metrics, opdaterer regelmæssigt data om komponenternes sårbarhedsstatus. .

Et eksempel på, hvordan en stykliste kan se ud i XML-format:

<?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 kan ikke kun bruges som inputparametre til Dependency Track, men også til opgørelse af softwarekomponenter i forsyningskæden, for eksempel til levering af software til en kunde. I 2014 blev der endda foreslået en lov i USA "Cyber ​​​​Supply Chain Management and Transparency Act of 2014", som anførte, at ved køb af software, enhver stat. Institutionen skal anmode om en stykliste for at forhindre brug af sårbare komponenter, men loven er endnu ikke trådt i kraft.

Vender tilbage til SCA, har Dependency Track færdige integrationer med Notification Platforms som Slack, sårbarhedsstyringssystemer som Kenna Security. Det er også værd at sige, at Dependency Track blandt andet identificerer forældede versioner af pakker og giver information om licenser (grundet SPDX-understøttelse).

Hvis vi taler specifikt om kvaliteten af ​​SCA, så er der en grundlæggende forskel.

Dependency Track accepterer ikke projektet som input, men derimod styklisten. Det betyder, at hvis vi vil teste projektet, skal vi først generere bom.xml, for eksempel ved hjælp af CycloneDX. Dependency Track er således direkte afhængig af CycloneDX. Samtidig giver det mulighed for tilpasning. Dette er, hvad OZON-holdet skrev CycloneDX modul til samling af styklistefiler til Golang-projekter til yderligere scanning gennem Dependency Track.

Nexus IQ er en kommerciel SCA-løsning fra Sonatype, som er en del af Sonatype-økosystemet, som også omfatter Nexus Repository Manager. Nexus IQ kan acceptere som input både krigsarkiver (til java-projekter) via webgrænsefladen eller API og BOM, hvis din organisation endnu ikke er skiftet fra CycloneDX til en ny løsning. I modsætning til open source-løsninger henviser IQ ikke kun til CP/PURL til den identificerede komponent og den tilsvarende sårbarhed i databasen, men tager også hensyn til sin egen forskning, for eksempel navnet på den sårbare funktion eller klasse. Mekanismerne bag IQ vil blive diskuteret senere i analysen af ​​resultaterne.

Lad os opsummere nogle af de funktionelle funktioner og også overveje de understøttede sprog til analyse:

Sprog
Nexus IQ
Afhængighedskontrol
Afhængighedsspor

Java
+
+
+

C / C ++
+
+

C#
+
+

. Net
+
+
+

erlang


+

JavaScript (NodeJS)
+
+
+

PHP
+
+
+

Python
+
+
+

Rubin
+
+
+

Perl


Scala
+
+
+

Mål C
+
+

Swift
+
+

R
+

Go
+
+
+

funktionalitet

funktionalitet
Nexus IQ
Afhængighedskontrol
Afhængighedsspor

Evnen til at sikre, at komponenter, der bruges i kildekoden, kontrolleres for licenseret renhed
+

+

Evne til at scanne og analysere for sårbarheder og licensrenhed for Docker-billeder
+ Integration med Clair

Mulighed for at konfigurere sikkerhedspolitikker til at bruge open source-biblioteker
+

Evne til at scanne open source-lagre for sårbare komponenter
+ RubyGems, Maven, NPM, Nuget, Pypi, Conan, Bower, Conda, Go, p2, R, Yum, Helm, Docker, CocoaPods, Git LFS

+ Hex, RubyGems, Maven, NPM, Nuget, Pypi

Tilgængelighed af en specialiseret forskningsgruppe
+

Lukket sløjfe drift
+
+
+

Brug af tredjeparts databaser
+ Lukket Sonatype-database
+ Sonatype OSS, NPM offentlige rådgivere
+ Sonatype OSS, NPM Public Advisors, RetireJS, VulnDB, understøttelse af sin egen sårbarhedsdatabase

Evne til at filtrere open source-komponenter, når du forsøger at indlæse i udviklingsløkken i henhold til konfigurerede politikker
+

Anbefalinger til udbedring af sårbarheder, tilgængelighed af links til rettelser
+
+- (afhænger af beskrivelsen i offentlige databaser)
+- (afhænger af beskrivelsen i offentlige databaser)

Rangering af opdagede sårbarheder efter sværhedsgrad
+
+
+

Rollebaseret adgangsmodel
+

+

CLI support
+
+
+- (kun for CycloneDX)

Prøveudtagning/sortering af sårbarheder efter definerede kriterier
+

+

Dashboard efter applikationsstatus
+

+

Generering af rapporter i PDF-format
+

Generering af rapporter i JSONCSV-format
+
+

Understøttelse af russisk sprog


Integrationsmuligheder

integration
Nexus IQ
Afhængighedskontrol
Afhængighedsspor

LDAP/Active Directory integration
+

+

Integration med kontinuerligt integrationssystem Bamboo
+

Integration med kontinuerligt integrationssystem TeamCity
+

Integration med kontinuerligt integrationssystem GitLab
+
+- (som et plugin til GitLab)
+

Integration med kontinuerligt integrationssystem Jenkins
+
+
+

Tilgængelighed af plugins til IDE
+ IntelliJ, Eclipse, Visual Studio

Support til tilpasset integration via web-services (API) af værktøjet
+

+

Afhængighedskontrol

Første start

Lad os køre afhængighedstjek på en bevidst sårbar applikation DVJA.

Til dette vil vi bruge Afhængighedstjek Maven Plugin:

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

Som et resultat vil dependency-check-report.html vises i målbiblioteket.

DevSecOps: principper for drift og sammenligning af SCA. Del et

Lad os åbne filen. Efter opsummerende oplysninger om det samlede antal sårbarheder, kan vi se oplysninger om sårbarheder med et højt niveau af alvorlighed og konfidens, med angivelse af pakken, CPE og antallet af CVE'er.

Dernæst kommer mere detaljerede oplysninger, især grundlaget for beslutningen (bevis), det vil sige en bestemt stykliste.

DevSecOps: principper for drift og sammenligning af SCA. Del et

Dernæst kommer CPE-, PURL- og CVE-beskrivelsen. I øvrigt er anbefalinger til rettelser ikke inkluderet på grund af deres fravær i NVD-databasen.

DevSecOps: principper for drift og sammenligning af SCA. Del et

For systematisk at se scanningsresultater kan du konfigurere Nginx med minimale indstillinger eller sende de resulterende defekter til et defektstyringssystem, der understøtter forbindelser til afhængighedstjek. For eksempel Defect Dojo.

Afhængighedsspor

Installation

Dependency Track er til gengæld en webbaseret platform med visningsgrafer, så det presserende spørgsmål om lagring af fejl i en tredjepartsløsning opstår ikke her.
De understøttede scripts til installation er: Docker, WAR, Executable WAR.

Første start

Vi går til URL'en for den kørende tjeneste. Vi logger ind via admin/admin, ændrer login og adgangskode og kommer så til Dashboardet. Det næste vi vil gøre er at lave et projekt til en testapplikation i Java i Hjem/Projekter → Opret projekt . Lad os tage DVJA som et eksempel.

DevSecOps: principper for drift og sammenligning af SCA. Del et

Da Dependency Track kun kan acceptere stykliste som input, skal denne stykliste hentes. Lad os drage fordel CycloneDX Maven Plugin:

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

Vi henter bom.xml og indlæser filen i det oprettede projekt DVJA → Afhængigheder → Upload stykliste.

Lad os gå til Administration → Analysatorer. Vi forstår, at vi kun har Internal Analyzer aktiveret, som inkluderer NVD. Lad os også forbinde Sonatype OSS Index.

DevSecOps: principper for drift og sammenligning af SCA. Del et

Således får vi følgende billede til vores projekt:

DevSecOps: principper for drift og sammenligning af SCA. Del et

På listen kan du også finde en sårbarhed, der gælder for Sonatype OSS:

DevSecOps: principper for drift og sammenligning af SCA. Del et

Den største skuffelse var, at Dependency Track ikke længere accepterer Dependency Check xml-rapporter. De seneste understøttede versioner af Dependency Check-integrationen var 1.0.0 - 4.0.2, mens jeg testede 5.3.2.

her видео (og her), da det stadig var muligt.

Nexus IQ

Første start

Installation af Nexus IQ kommer fra arkiverne af dokumentation, men vi byggede et Docker-billede til disse formål.

Når du har logget ind på konsollen, skal du oprette en organisation og en applikation.

DevSecOps: principper for drift og sammenligning af SCA. Del et

DevSecOps: principper for drift og sammenligning af SCA. Del et

DevSecOps: principper for drift og sammenligning af SCA. Del et

Som du kan se, er opsætningen i tilfælde af IQ noget mere kompliceret, fordi vi også skal lave politikker, der er gældende for forskellige "stadier" (dev, build, stage, release). Dette er nødvendigt for at blokere sårbare komponenter, når de bevæger sig gennem pipelinen tættere på produktionen, eller for at blokere dem, så snart de kommer ind i Nexus Repo, når de downloades af udviklere.

For at mærke forskellen mellem open source og virksomhed, lad os udføre den samme scanning gennem Nexus IQ på samme måde gennem Maven-plugin, der tidligere har oprettet en testapplikation i NexusIQ-grænsefladen 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>

Følg URL'en til den genererede rapport i IQ-webgrænsefladen:

DevSecOps: principper for drift og sammenligning af SCA. Del et

Her kan du se alle politikovertrædelser, der angiver forskellige betydningsniveauer (fra Info til Sikkerhedskritisk). Bogstavet D ved siden af ​​komponenten betyder, at komponenten er direkte afhængighed, og bogstavet T ved siden af ​​komponenten betyder, at komponenten er Transitiv afhængighed, det vil sige, at den er transitiv.

I øvrigt rapporten State of Open Source-sikkerhedsrapport 2020 fra Snyk rapporterer, at mere end 70% af open source-sårbarheder opdaget i Node.js, Java og Ruby er i transitive afhængigheder.

Hvis vi åbner en af ​​Nexus IQ-politikovertrædelserne, kan vi se en beskrivelse af komponenten samt en versionsgraf, som viser placeringen af ​​den aktuelle version i tidsgrafen, samt på hvilket tidspunkt sårbarheden ophører. være sårbar. Højden af ​​lysene på grafen viser populariteten af ​​at bruge denne komponent.

DevSecOps: principper for drift og sammenligning af SCA. Del et

Hvis du går til sårbarhedsafsnittet og udvider CVE, kan du læse en beskrivelse af denne sårbarhed, anbefalinger til eliminering samt årsagen til, at denne komponent blev krænket, det vil sige tilstedeværelsen af ​​klassen DiskFileitem.class.

DevSecOps: principper for drift og sammenligning af SCA. Del et

DevSecOps: principper for drift og sammenligning af SCA. Del et

Lad os kun opsummere dem, der er relateret til tredjeparts Java-komponenter, ved at fjerne js-komponenterne. I parentes angiver vi antallet af sårbarheder, der blev fundet uden for NVD.

Samlet Nexus IQ:

  • Scannede afhængigheder: 62
  • Sårbare afhængigheder: 16
  • Sårbarheder fundet: 42 (8 sonatype db)

Total afhængighedstjek:

  • Scannede afhængigheder: 47
  • Sårbare afhængigheder: 13
  • Sårbarheder fundet: 91 (14 sonatype oss)

Samlet afhængighedsspor:

  • Scannede afhængigheder: 59
  • Sårbare afhængigheder: 10
  • Sårbarheder fundet: 51 (1 sonatype oss)

I de næste trin vil vi analysere de opnåede resultater og finde ud af, hvilken af ​​disse sårbarheder der er en reel defekt, og hvilken der er en falsk positiv.

Ansvarsfraskrivelse

Denne anmeldelse er ikke en ubestridelig sandhed. Forfatteren havde ikke et mål om at fremhæve et særskilt instrument på baggrund af andre. Formålet med gennemgangen var at vise mekanismerne for driften af ​​SCA-værktøjer og måder at kontrollere deres resultater på.

Sammenligning af resultater

Vilkår og betingelser:

En falsk positiv for sårbarheder i tredjepartskomponenter er:

  • CVE-uoverensstemmelse med identificeret komponent
  • For eksempel, hvis en sårbarhed er identificeret i struts2 frameworket, og værktøjet peger på en komponent af struts-tiles frameworket, som denne sårbarhed ikke gælder for, så er dette en falsk positiv
  • CVE-uoverensstemmelse med den identificerede version af komponenten
  • For eksempel er sårbarheden knyttet til python version > 3.5 og værktøjet markerer version 2.7 som sårbar - dette er en falsk positiv, da sårbarheden faktisk kun gælder for 3.x produktgrenen
  • Duplikat CVE
  • For eksempel, hvis SCA specificerer en CVE, der aktiverer en RCE, så specificerer SCA en CVE for den samme komponent, der gælder for Cisco-produkter, der er påvirket af den RCE. I dette tilfælde vil den være falsk positiv.
  • For eksempel blev der fundet en CVE i en spring-web komponent, hvorefter SCA peger på den samme CVE i andre komponenter af Spring Framework, mens CVE'en ikke har noget at gøre med andre komponenter. I dette tilfælde vil den være falsk positiv.

Formålet med undersøgelsen var Open Source-projektet DVJA. Undersøgelsen involverede kun java-komponenter (uden js).

Sammenfattende resultater

Lad os gå direkte til resultaterne af en manuel gennemgang af identificerede sårbarheder. Den fulde rapport for hver CVE kan findes i appendiks.

Oversigtsresultater for alle sårbarheder:

Parameter
Nexus IQ
Afhængighedskontrol
Afhængighedsspor

Samlede sårbarheder identificeret
42
91
51

Forkert identificerede sårbarheder (falsk positiv)
2 (4.76%)
62 (68,13%)
29 (56.86%)

Ingen relevante sårbarheder fundet (falsk negativ)
10
20
27

Opsummering af resultater efter komponent:

Parameter
Nexus IQ
Afhængighedskontrol
Afhængighedsspor

Samlede komponenter identificeret
62
47
59

Samlede sårbare komponenter
16
13
10

Forkert identificerede sårbare komponenter (falsk positiv)
1
5
0

Forkert identificerede sårbare komponenter (falsk positiv)
0
6
6

Lad os bygge visuelle grafer for at evaluere forholdet mellem falsk positive og falsk negative til det samlede antal sårbarheder. Komponenter er markeret vandret, og sårbarheder identificeret i dem er markeret lodret.

DevSecOps: principper for drift og sammenligning af SCA. Del et

DevSecOps: principper for drift og sammenligning af SCA. Del et

DevSecOps: principper for drift og sammenligning af SCA. Del et

Til sammenligning blev en lignende undersøgelse udført af Sonatype-teamet, der testede et projekt med 1531 komponenter ved hjælp af OWASP Dependency Check. Som vi kan se, er forholdet mellem støj og korrekte svar sammenligneligt med vores resultater.

DevSecOps: principper for drift og sammenligning af SCA. Del et
Kilde: www.sonatype.com/why-precision-matters-ebook

Lad os se på nogle CVE'er fra vores scanningsresultater for at forstå årsagen til disse resultater.

mere

№ 1

Lad os først se på nogle interessante punkter om Sonatype Nexus IQ.

Nexus IQ påpeger et problem med deserialisering med evnen til at udføre RCE i Spring Framework flere gange. CVE-2016-1000027 i spring-web:3.0.5 første gang, og CVE-2011-2894 i spring-context:3.0.5 og spring-core:3.0.5. I første omgang ser det ud til, at der er duplikering af sårbarhed på tværs af flere CVE'er. For hvis man ser på CVE-2016-1000027 og CVE-2011-2894 i NVD-databasen, ser det ud til, at alt er indlysende

komponent
Sårbarhed

spring-web:3.0.5
CVE-2016-1000027

spring-context:3.0.5
CVE-2011-2894

fjederkerne:3.0.5
CVE-2011-2894

beskrivelse CVE-2011-2894 fra NVD:
DevSecOps: principper for drift og sammenligning af SCA. Del et

beskrivelse CVE-2016-1000027 fra NVD:
DevSecOps: principper for drift og sammenligning af SCA. Del et

CVE-2011-2894 i sig selv er ret berømt. I rapporten White Source 2011 denne CVE blev anerkendt som en af ​​de mest almindelige. Beskrivelser for CVE-2016-100027 er i princippet få i NVD, og ​​det ser ud til kun at være gældende for Spring Framework 4.1.4. Lad os tage et kig på henvisningen og her bliver alt mere eller mindre klart. Fra Holdbare artikler Vi forstår, at ud over sårbarheden i RemoteInvocationSerializingExporter i CVE-2011-2894 observeres sårbarheden i HttpInvokerServiceExporter. Dette er, hvad Nexus IQ fortæller os:

DevSecOps: principper for drift og sammenligning af SCA. Del et

Der er dog ikke noget lignende i NVD, hvorfor Dependency Check og Dependency Track hver modtager falsk negativ.

Også ud fra beskrivelsen af ​​CVE-2011-2894 kan det forstås, at sårbarheden faktisk er til stede i både spring-context:3.0.5 og spring-core:3.0.5. Bekræftelse af dette kan findes i en artikel fra den person, der fandt denne sårbarhed.

№ 2

komponent
Sårbarhed
Outcome

stivere2-kerne:2.3.30
CVE-2016-4003
FALSK

Hvis vi studerer sårbarheden CVE-2016-4003, vil vi forstå, at den blev rettet i version 2.3.28, men Nexus IQ rapporterer det til os. Der er en note i beskrivelsen af ​​sårbarheden:

DevSecOps: principper for drift og sammenligning af SCA. Del et

Det vil sige, at sårbarheden kun eksisterer i forbindelse med en forældet version af JRE, som de besluttede at advare os om. Ikke desto mindre anser vi dette for falsk positivt, selvom det ikke er det værste.

Nr. 3

komponent
Sårbarhed
Outcome

xwork-core:2.3.30
CVE-2017-9804
TRUE

xwork-core:2.3.30
CVE-2017-7672
FALSK

Hvis vi ser på beskrivelserne af CVE-2017-9804 og CVE-2017-7672, vil vi forstå, at problemet er URLValidator class, med CVE-2017-9804, der stammer fra CVE-2017-7672. Tilstedeværelsen af ​​den anden sårbarhed bærer ikke nogen nyttig belastning udover det faktum, at dens sværhedsgrad er steget til Høj, så vi kan betragte det som unødvendig støj.

Samlet set blev der ikke fundet andre falske positiver for Nexus IQ.

№ 4

Der er flere ting, der får IQ til at skille sig ud fra andre løsninger.

komponent
Sårbarhed
Outcome

spring-web:3.0.5
CVE-2020-5398
TRUE

CVE i NVD angiver, at det kun gælder for versioner 5.2.x før 5.2.3, 5.1.x før 5.1.13 og versioner 5.0.x før 5.0.16, men hvis vi ser på CVE-beskrivelsen i Nexus IQ , så vil vi se følgende:
Advisory Deviation Notice: Sonatypes sikkerhedsforskningsteam opdagede, at denne sårbarhed blev introduceret i version 3.0.2.RELEASE og ikke 5.0.x som angivet i vejledningen.

Dette efterfølges af en PoC for denne sårbarhed, som angiver, at den er til stede i version 3.0.5.

Falsk negativ sendes til Dependency Check og Dependency Track.

№ 5

Lad os se på falsk positiv for Dependency Check og Dependency Track.

Afhængighedstjek skiller sig ud ved, at det afspejler de CVE'er, der gælder for hele rammen i NVD for de komponenter, som disse CVE'er ikke gælder for. Dette vedrører CVE-2012-0394, CVE-2013-2115, CVE-2014-0114, CVE-2015-0899, CVE-2015-2992, CVE-2016-1181, CVE-2016-1182, hvilket afhængighedstjek ” til struts-taglib:1.3.8 og struts-tiles-1.3.8. Disse komponenter har intet at gøre med det, der er beskrevet i CVE'en - anmodningsbehandling, sidevalidering og så videre. Dette skyldes, at det, som disse CVE'er og komponenter har til fælles, kun er rammerne, hvorfor Dependency Check betragtede det som en sårbarhed.

Den samme situation er med spring-tx:3.0.5, og en lignende situation med struts-core:1.3.8. For struts-core har Dependency Check og Dependency Track fundet en masse sårbarheder, der faktisk er anvendelige for struts2-core, som i det væsentlige er en separat ramme. I dette tilfælde forstod Nexus IQ billedet korrekt, og i de CVE'er, det udstedte, indikerede det, at struts-core havde nået slutningen af ​​livet, og det var nødvendigt at flytte til struts2-core.

№ 6

I nogle situationer er det uretfærdigt at fortolke en åbenlys Dependency Check og Dependency Track fejl. Især CVE-2013-4152, CVE-2013-6429, CVE-2013-6430, CVE-2013-7315, CVE-2014-0054, CVE-2014-0225, CVE-2014-0225, hvilken sporingskontrol og afhængighedskontrol tilskrevet spring-core:3.0.5 hører faktisk til spring-web:3.0.5. Samtidig blev nogle af disse CVE'er også fundet af Nexus IQ, men IQ identificerede dem korrekt til en anden komponent. Fordi disse sårbarheder ikke blev fundet i spring-core, kan det ikke argumenteres for, at de ikke er i rammen i princippet, og open source-værktøjer påpegede med rette disse sårbarheder (de savnede bare lidt).

Fund

Som vi kan se, giver bestemmelse af pålideligheden af ​​identificerede sårbarheder ved manuel gennemgang ikke entydige resultater, hvorfor der opstår kontroversielle spørgsmål. Resultaterne er, at Nexus IQ-løsningen har den laveste falske positive rate og den højeste nøjagtighed.

Først og fremmest skyldes dette, at Sonatype-teamet udvidede beskrivelsen for hver CVE-sårbarhed fra NVD i sine databaser, hvilket angiver sårbarhederne for en bestemt version af komponenterne ned til klassen eller funktionen, og udførte yderligere forskning (f.eks. , kontrol af sårbarheder på ældre softwareversioner).

En vigtig indflydelse på resultaterne spilles også af de sårbarheder, der ikke var inkluderet i NVD, men som alligevel er til stede i Sonatype-databasen med SONATYPE-mærket. Ifølge rapporten State of Open Source Security Vulnerabilities 2020 45 % af opdagede open source-sårbarheder rapporteres ikke til NVD. Ifølge WhiteSource-databasen ender kun 29% af alle open source-sårbarheder, der rapporteres uden for NVD, offentliggjort der, hvorfor det er vigtigt også at lede efter sårbarheder i andre kilder.

Som et resultat producerer Dependency Check en masse støj og mangler nogle sårbare komponenter. Dependency Track producerer mindre støj og registrerer et stort antal komponenter, hvilket ikke visuelt skader øjnene i webgrænsefladen.

Praksis viser dog, at open source bør blive de første skridt mod modne DevSecOps. Det første du bør tænke på, når du integrerer SCA i udvikling, er processer, nemlig at tænke sammen med ledelsen og relaterede afdelinger om, hvordan ideelle processer skal se ud i din organisation. Det kan vise sig, at for din organisation i første omgang vil Dependency Check eller Dependency Track dække alle forretningsbehov, og Enterprise-løsninger vil være en logisk fortsættelse på grund af den voksende kompleksitet af de applikationer, der udvikles.

Bilag A: Komponentresultater
Symboler:

  • Højt-højt og kritisk niveau sårbarheder i komponenten
  • Medium — Sårbarheder på medium kritikalitetsniveau i komponenten
  • TRUE — Sandt positivt problem
  • FALSK — Falsk positiv problemstilling

komponent
Nexus IQ
Afhængighedskontrol
Afhængighedsspor
Outcome

dom4j: 1.6.1
Høj
Høj
Høj
TRUE

log4j-kerne: 2.3
Høj
Høj
Høj
TRUE

log4j: 1.2.14
Høj
Høj

TRUE

fællessamlinger:3.1
Høj
Høj
Høj
TRUE

commons-fileupload:1.3.2
Høj
Høj
Høj
TRUE

commons-beanutils:1.7.0
Høj
Høj
Høj
TRUE

commons-codec:1:10
Medium


TRUE

mysql-connector-java:5.1.42
Høj
Høj
Høj
TRUE

fjederudtryk:3.0.5
Høj
komponent ikke fundet

TRUE

spring-web:3.0.5
Høj
komponent ikke fundet
Høj
TRUE

spring-context:3.0.5
Medium
komponent ikke fundet

TRUE

fjederkerne:3.0.5
Medium
Høj
Høj
TRUE

struts2-config-browser-plugin:2.3.30
Medium


TRUE

spring-tx:3.0.5

Høj

FALSK

stivere-kerne:1.3.8
Høj
Høj
Høj
TRUE

xwork-core: 2.3.30
Høj


TRUE

stivere2-kerne: 2.3.30
Høj
Høj
Høj
TRUE

struts-taglib:1.3.8

Høj

FALSK

stivere-fliser-1.3.8

Høj

FALSK

Bilag B: Sårbarhedsresultater
Symboler:

  • Højt-højt og kritisk niveau sårbarheder i komponenten
  • Medium — Sårbarheder på medium kritikalitetsniveau i komponenten
  • TRUE — Sandt positivt problem
  • FALSK — Falsk positiv problemstilling

komponent
Nexus IQ
Afhængighedskontrol
Afhængighedsspor
Severity
Outcome
Kommentar

dom4j: 1.6.1
CVE-2018-1000632
CVE-2018-1000632
CVE-2018-1000632
Høj
TRUE

CVE-2020-10683
CVE-2020-10683
CVE-2020-10683
Høj
TRUE

log4j-kerne: 2.3
CVE-2017-5645
CVE-2017-5645
CVE-2017-5645
Høj
TRUE

CVE-2020-9488
CVE-2020-9488
CVE-2020-9488
Lav
TRUE

log4j: 1.2.14
CVE-2019-17571
CVE-2019-17571

Høj
TRUE


CVE-2020-9488

Lav
TRUE

SONATYPE-2010-0053


Høj
TRUE

fællessamlinger:3.1

CVE-2015-6420
CVE-2015-6420
Høj
FALSK
Dubletter RCE(OSSINDEX)


CVE-2017-15708
CVE-2017-15708
Høj
FALSK
Dubletter RCE(OSSINDEX)

SONATYPE-2015-0002
RCE (OSSINDEX)
RCE(OSSINDEX)
Høj
TRUE

commons-fileupload:1.3.2
CVE-2016-1000031
CVE-2016-1000031
CVE-2016-1000031
Høj
TRUE

SONATYPE-2014-0173


Medium
TRUE

commons-beanutils:1.7.0
CVE-2014-0114
CVE-2014-0114
CVE-2014-0114
Høj
TRUE


CVE-2019-10086
CVE-2019-10086
Høj
FALSK
Sårbarheden gælder kun for version 1.9.2+

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


Medium
TRUE

mysql-connector-java:5.1.42
CVE-2018-3258
CVE-2018-3258
CVE-2018-3258
Høj
TRUE

CVE-2019-2692
CVE-2019-2692

Medium
TRUE


CVE-2020-2875

Medium
FALSK
Samme sårbarhed som CVE-2019-2692, men med bemærkningen "angreb kan påvirke yderligere produkter betydeligt"


CVE-2017-15945

Høj
FALSK
Ikke relevant for mysql-connector-java


CVE-2020-2933

Lav
FALSK
Duplikat af CVE-2020-2934

CVE-2020-2934
CVE-2020-2934

Medium
TRUE

fjederudtryk:3.0.5
CVE-2018-1270
komponent ikke fundet

Høj
TRUE

CVE-2018-1257


Medium
TRUE

spring-web:3.0.5
CVE-2016-1000027
komponent ikke fundet

Høj
TRUE

CVE-2014-0225

CVE-2014-0225
Høj
TRUE

CVE-2011-2730


Høj
TRUE



CVE-2013-4152
Medium
TRUE

CVE-2018-1272


Høj
TRUE

CVE-2020-5398


Høj
TRUE
Et illustrativt eksempel til fordel for IQ: "Sonatypes sikkerhedsforskningsteam opdagede, at denne sårbarhed blev introduceret i version 3.0.2.RELEASE og ikke 5.0.x som angivet i vejledningen."

CVE-2013-6429


Medium
TRUE

CVE-2014-0054

CVE-2014-0054
Medium
TRUE

CVE-2013-6430


Medium
TRUE

spring-context:3.0.5
CVE-2011-2894
komponent ikke fundet

Medium
TRUE

fjederkerne:3.0.5

CVE-2011-2730
CVE-2011-2730
Høj
TRUE

CVE-2011-2894
CVE-2011-2894
CVE-2011-2894
Medium
TRUE



CVE-2013-4152
Medium
FALSK
Duplikat af samme sårbarhed i spring-web


CVE-2013-4152

Medium
FALSK
Sårbarheden relaterer sig til spring-web-komponenten


CVE-2013-6429
CVE-2013-6429
Medium
FALSK
Sårbarheden relaterer sig til spring-web-komponenten


CVE-2013-6430

Medium
FALSK
Sårbarheden relaterer sig til spring-web-komponenten


CVE-2013-7315
CVE-2013-7315
Medium
FALSK
SPLIT fra CVE-2013-4152. + Sårbarheden relaterer sig til spring-web-komponenten


CVE-2014-0054
CVE-2014-0054
Medium
FALSK
Sårbarheden relaterer sig til spring-web-komponenten


CVE-2014-0225

Høj
FALSK
Sårbarheden relaterer sig til spring-web-komponenten



CVE-2014-0225
Høj
FALSK
Duplikat af samme sårbarhed i spring-web


CVE-2014-1904
CVE-2014-1904
Medium
FALSK
Sårbarheden relaterer sig til spring-web-mvc-komponenten


CVE-2014-3625
CVE-2014-3625
Medium
FALSK
Sårbarheden relaterer sig til spring-web-mvc-komponenten


CVE-2016-9878
CVE-2016-9878
Høj
FALSK
Sårbarheden relaterer sig til spring-web-mvc-komponenten


CVE-2018-1270
CVE-2018-1270
Høj
FALSK
Til spring-udtryk/forår-beskeder


CVE-2018-1271
CVE-2018-1271
Medium
FALSK
Sårbarheden relaterer sig til spring-web-mvc-komponenten


CVE-2018-1272
CVE-2018-1272
Høj
TRUE

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

SONATYPE-2015-0327


Lav
TRUE

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


Medium
TRUE

spring-tx:3.0.5

CVE-2011-2730

Høj
FALSK
Sårbarheden er ikke specifik for spring-tx


CVE-2011-2894

Høj
FALSK
Sårbarheden er ikke specifik for spring-tx


CVE-2013-4152

Medium
FALSK
Sårbarheden er ikke specifik for spring-tx


CVE-2013-6429

Medium
FALSK
Sårbarheden er ikke specifik for spring-tx


CVE-2013-6430

Medium
FALSK
Sårbarheden er ikke specifik for spring-tx


CVE-2013-7315

Medium
FALSK
Sårbarheden er ikke specifik for spring-tx


CVE-2014-0054

Medium
FALSK
Sårbarheden er ikke specifik for spring-tx


CVE-2014-0225

Høj
FALSK
Sårbarheden er ikke specifik for spring-tx


CVE-2014-1904

Medium
FALSK
Sårbarheden er ikke specifik for spring-tx


CVE-2014-3625

Medium
FALSK
Sårbarheden er ikke specifik for spring-tx


CVE-2016-9878

Høj
FALSK
Sårbarheden er ikke specifik for spring-tx


CVE-2018-1270

Høj
FALSK
Sårbarheden er ikke specifik for spring-tx


CVE-2018-1271

Medium
FALSK
Sårbarheden er ikke specifik for spring-tx


CVE-2018-1272

Medium
FALSK
Sårbarheden er ikke specifik for spring-tx

stivere-kerne:1.3.8

CVE-2011-5057 (OSSINDEX)

Medium
FASLE
Sårbarhed over for stivere 2


CVE-2012-0391 (OSSINDEX)
CVE-2012-0391
Høj
FALSK
Sårbarhed over for stivere 2


CVE-2014-0094 (OSSINDEX)
CVE-2014-0094
Medium
FALSK
Sårbarhed over for stivere 2


CVE-2014-0113 (OSSINDEX)
CVE-2014-0113
Høj
FALSK
Sårbarhed over for stivere 2

CVE-2016-1182
3VE-2016-1182

Høj
TRUE



CVE-2011-5057
Medium
FALSK
Sårbarhed over for stivere 2


CVE-2012-0392 (OSSINDEX)
CVE-2012-0392
Høj
FALSK
Sårbarhed over for stivere 2


CVE-2012-0393 (OSSINDEX)
CVE-2012-0393
Medium
FALSK
Sårbarhed over for stivere 2

CVE-2015-0899
CVE-2015-0899

Høj
TRUE


CVE-2012-0394
CVE-2012-0394
Medium
FALSK
Sårbarhed over for stivere 2


CVE-2012-0838 (OSSINDEX)
CVE-2012-0838
Høj
FALSK
Sårbarhed over for stivere 2


CVE-2013-1965 (OSSINDEX)
CVE-2013-1965
Høj
FALSK
Sårbarhed over for stivere 2


CVE-2013-1966 (OSSINDEX)
CVE-2013-1966
Høj
FASLE
Sårbarhed over for stivere 2


CVE-2013-2115
CVE-2013-2115
Høj
FASLE
Sårbarhed over for stivere 2


CVE-2013-2134 (OSSINDEX)
CVE-2013-2134
Høj
FASLE
Sårbarhed over for stivere 2


CVE-2013-2135 (OSSINDEX)
CVE-2013-2135
Høj
FASLE
Sårbarhed over for stivere 2

CVE-2014-0114
CVE-2014-0114

Høj
TRUE


CVE-2015-2992
CVE-2015-2992
Medium
FALSK
Sårbarhed over for stivere 2


CVE-2016-0785 (OSSINDEX)
CVE-2016-0785
Høj
FALSK
Sårbarhed over for stivere 2

CVE-2016-1181
CVE-2016-1181

Høj
TRUE


CVE-2016-4003 (OSSINDEX)
CVE-2016-4003
Høj
FALSK
Sårbarhed over for stivere 2

xwork-core:2.3.30
CVE-2017-9804


Høj
TRUE

SONATYPE-2017-0173


Høj
TRUE

CVE-2017-7672


Høj
FALSK
Duplikat af CVE-2017-9804

SONATYPE-2016-0127


Høj
TRUE

stivere2-kerne:2.3.30

CVE-2016-6795
CVE-2016-6795
Høj
TRUE


CVE-2017-9787
CVE-2017-9787
Høj
TRUE


CVE-2017-9791
CVE-2017-9791
Høj
TRUE


CVE-2017-9793

Høj
FALSK
Duplikat af CVE-2018-1327


CVE-2017-9804

Høj
TRUE


CVE-2017-9805
CVE-2017-9805
Høj
TRUE

CVE-2016-4003


Medium
FALSK
Gælder for Apache Struts 2.x op til 2.3.28, hvilket er version 2.3.30. Baseret på beskrivelsen er CVE dog gyldig for enhver version af Struts 2, hvis JRE 1.7 eller mindre bruges. Tilsyneladende besluttede de at genforsikre os her, men det ligner mere FALSK


CVE-2018-1327
CVE-2018-1327
Høj
TRUE

CVE-2017-5638
CVE-2017-5638
CVE-2017-5638
Høj
TRUE
Den samme sårbarhed, som Equifax-hackere udnyttede i 2017

CVE-2017-12611
CVE-2017-12611

Høj
TRUE

CVE-2018-11776
CVE-2018-11776
CVE-2018-11776
Høj
TRUE

struts-taglib:1.3.8

CVE-2012-0394

Medium
FALSK
Til stivere 2-kerne


CVE-2013-2115

Høj
FALSK
Til stivere 2-kerne


CVE-2014-0114

Høj
FALSK
Til commons-beanutils


CVE-2015-0899

Høj
FALSK
Gælder ikke taglib


CVE-2015-2992

Medium
FALSK
Henviser til stivere2-kerne


CVE-2016-1181

Høj
FALSK
Gælder ikke taglib


CVE-2016-1182

Høj
FALSK
Gælder ikke taglib

stivere-fliser-1.3.8

CVE-2012-0394

Medium
FALSK
Til stivere 2-kerne


CVE-2013-2115

Høj
FALSK
Til stivere 2-kerne


CVE-2014-0114

Høj
FALSK
Under commons-beanutils


CVE-2015-0899

Høj
FALSK
Gælder ikke fliser


CVE-2015-2992

Medium
FALSK
Til stivere 2-kerne


CVE-2016-1181

Høj
FALSK
Gælder ikke taglib


CVE-2016-1182

Høj
FALSK
Gælder ikke taglib

Kilde: www.habr.com

Tilføj en kommentar