DevSecOps: werkingsprincipes en vergelijking van SCA. Deel een

Het belang van de analyse van softwarecomponenten van derden (Software Composition Analysis - SCA) in het ontwikkelingsproces groeit met de publicatie van jaarverslagen over de kwetsbaarheden van open source-bibliotheken, die worden gepubliceerd door Synopsys, Sonatype, Snyk en White Source. . Volgens het rapport De stand van zaken op het gebied van open source-beveiligingsproblemen 2020 het aantal geïdentificeerde open source-kwetsbaarheden is in 2019 bijna 1.5 keer toegenomen vergeleken met het jaar ervoor, terwijl open source-componenten door 60% tot 80% van de projecten worden gebruikt. Op onafhankelijke basis zijn SCA-processen een aparte praktijk van OWASP SAMM en BSIMM als indicator van volwassenheid, en in de eerste helft van 2020 heeft OWASP de nieuwe OWASP Software Component Verification Standard (SCVS) uitgebracht, die best practices biedt voor het verifiëren van derde- partijcomponenten in de supply chain BY.

DevSecOps: werkingsprincipes en vergelijking van SCA. Deel een

Eén van de meest illustratieve gevallen gebeurd met Equifax in mei 2017. Onbekende aanvallers hebben informatie verkregen over 143 miljoen Amerikanen, waaronder volledige namen, adressen, burgerservicenummers en rijbewijzen. In 209 gevallen bevatten de documenten ook informatie over de bankkaarten van de slachtoffers. Dit lek ontstond als gevolg van misbruik van een kritieke kwetsbaarheid in Apache Struts 000 (CVE-2-2017), terwijl de oplossing in maart 5638 werd uitgebracht. Het bedrijf had twee maanden de tijd om de update te installeren, maar niemand nam er moeite mee.

Dit artikel bespreekt de kwestie van het kiezen van een hulpmiddel voor het uitvoeren van SCA vanuit het oogpunt van de kwaliteit van de analyseresultaten. Er zal ook een functionele vergelijking van de tools worden gegeven. Het proces van integratie in CI/CD en integratiemogelijkheden zullen worden overgelaten aan volgende publicaties. OWASP presenteerde een breed scala aan tools op je website, maar in de huidige review gaan we alleen in op de populairste open source tool Dependency Check, het iets minder bekende open source platform Dependency Track en de Enterprise oplossing Sonatype Nexus IQ. We zullen ook begrijpen hoe deze oplossingen werken en de verkregen resultaten voor valse positieven vergelijken.

DevSecOps: werkingsprincipes en vergelijking van SCA. Deel een

Werking

Afhankelijkheidscontrole is een hulpprogramma (CLI, maven, jenkins-module, ant) ​​​​dat projectbestanden analyseert, stukjes informatie verzamelt over afhankelijkheden (pakketnaam, groupid, specificatietitel, versie ...), een CPE-regel (Common Platform Enumeration) bouwt , Package URL ( PURL) en identificeert kwetsbaarheden voor CPE/PURL uit databases (NVD, Sonatype OSS Index, NPM Audit API...), waarna het een eenmalig rapport bouwt in HTML, JSON, XML-formaat...

Laten we eens kijken hoe CPE eruit ziet:

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

  • Deel: Indicatie dat het onderdeel betrekking heeft op de applicatie (a), besturingssysteem (o), hardware (h) (Vereist)
  • Leverancier: Naam van productfabrikant (vereist)
  • Artikel: Productnaam (vereist)
  • Versie: Componentversie (Verouderd item)
  • update: Pakketupdate
  • Editie: Verouderde versie (verouderd item)
  • Taal: Taal gedefinieerd in RFC-5646
  • SW-editie: Software versie
  • Doel-SW: Softwareomgeving waarin het product functioneert
  • Doel-HW: De hardwareomgeving waarin het product werkt
  • Andere: Leveranciers- of productinformatie

Een voorbeeld van een CPE ziet er als volgt uit:

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

De regel betekent dat CPE versie 2.3 het applicatieonderdeel van de fabrikant beschrijft pivotal_software met de titel spring_framework versie 3.0.0. Als we een kwetsbaarheid openen CVE-2014-0225 in NVD zien we een vermelding van deze CPE. Het eerste probleem waar je meteen op moet letten is dat CVE in NVD volgens CPE een probleem meldt in het raamwerk, en niet in een specifiek onderdeel. Dat wil zeggen, als ontwikkelaars nauw verbonden zijn met het raamwerk en de geïdentificeerde kwetsbaarheid geen invloed heeft op de modules die de ontwikkelaars gebruiken, zal een beveiligingsspecialist op de een of andere manier deze CVE moeten demonteren en nadenken over updates.

De URL wordt ook gebruikt door SCA-tools. De pakket-URL-indeling is als volgt:

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

  • Schema: Er zal altijd 'pkg' staan, wat aangeeft dat dit een pakket-URL is (vereist)
  • Type: Het "type" van het pakket of het "protocol" van het pakket, zoals maven, npm, nuget, gem, pypi, enz. (Vereist artikel)
  • namespace: Een naamvoorvoegsel, zoals een Maven-groeps-ID, Docker-image-eigenaar, GitHub-gebruiker of organisatie. Optioneel en afhankelijk van het type.
  • Naam: Pakketnaam (vereist)
  • Versie: Pakketversie
  • Kwalificaties: Aanvullende kwalificatiegegevens voor het pakket, zoals besturingssysteem, architectuur, distributie, enz. Optioneel en typespecifiek.
  • Subpad: Extra pad in het pakket ten opzichte van de pakketroot

Bijvoorbeeld:

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

Afhankelijkheidsspoor — een lokaal webplatform dat kant-en-klare stuklijsten (BOM) accepteert CycloonDX и SPDX, dat wil zeggen kant-en-klare specificaties over bestaande afhankelijkheden. Dit is een XML-bestand dat de afhankelijkheden beschrijft: naam, hashes, pakket-URL, uitgever, licentie. Vervolgens parseert Dependency Track de stuklijst, kijkt naar de CVE's die beschikbaar zijn voor de geïdentificeerde afhankelijkheden uit de kwetsbaarheidsdatabase (NVD, Sonatype OSS Index...), waarna het grafieken bouwt, statistieken berekent en regelmatig gegevens over de kwetsbaarheidsstatus van componenten bijwerkt. .

Een voorbeeld van hoe een stuklijst er in XML-formaat uit zou kunnen zien:

<?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 niet alleen worden gebruikt als invoerparameters voor Dependency Track, maar ook voor het inventariseren van softwarecomponenten in de supply chain, bijvoorbeeld voor het leveren van software aan een klant. In 2014 werd in de Verenigde Staten zelfs een wet voorgesteld "Cyber ​​Supply Chain Management en Transparantiewet van 2014", waarin stond dat bij de aanschaf van software elke staat. De instelling moet een stuklijst aanvragen om het gebruik van kwetsbare componenten te voorkomen, maar de wet is nog niet in werking getreden.

Terugkerend naar SCA heeft Dependency Track kant-en-klare integraties met meldingsplatforms zoals Slack en systemen voor kwetsbaarheidsbeheer zoals Kenna Security. Het is ook de moeite waard om te zeggen dat Dependency Track onder andere verouderde versies van pakketten identificeert en informatie geeft over licenties (vanwege SPDX-ondersteuning).

Als we het specifiek hebben over de kwaliteit van SCA, dan is er een fundamenteel verschil.

Dependency Track accepteert niet het project als input, maar eerder de stuklijst. Dit betekent dat als we het project willen testen, we eerst bom.xml moeten genereren, bijvoorbeeld met CycloneDX. Dependency Track is dus direct afhankelijk van CycloneDX. Tegelijkertijd maakt het maatwerk mogelijk. Dit is wat het OZON-team schreef CycloneDX-module voor het samenstellen van stuklijstbestanden voor Golang-projecten voor verder scannen via Dependency Track.

Nexus-IQ is een commerciële SCA-oplossing van Sonatype, die deel uitmaakt van het Sonatype-ecosysteem, waartoe ook Nexus Repository Manager behoort. Nexus IQ kan als input zowel oorlogsarchieven (voor Java-projecten) via de webinterface of API, als BOM accepteren, als uw organisatie nog niet is overgestapt van CycloneDX naar een nieuwe oplossing. In tegenstelling tot open source-oplossingen verwijst IQ met CP/PURL niet alleen naar het geïdentificeerde onderdeel en de bijbehorende kwetsbaarheid in de database, maar houdt het ook rekening met eigen onderzoek naar bijvoorbeeld de naam van de kwetsbare functie of klasse. De mechanismen van IQ zullen later in de analyse van de resultaten worden besproken.

Laten we enkele functionele kenmerken samenvatten en ook de ondersteunde talen voor analyse overwegen:

taal
Nexus-IQ
Afhankelijkheidscontrole
Afhankelijkheidsspoor

Java
+
+
+

C / C ++
+
+
-

C#
+
+
-

. Net
+
+
+

Erlang
-
-
+

JavaScript (NodeJS)
+
+
+

PHP
+
+
+

Python
+
+
+

Ruby
+
+
+

Perl
-
-
-

Scala
+
+
+

Doelstelling C
+
+
-

Swift
+
+
-

R
+
-
-

Go
+
+
+

functionaliteit

functionaliteit
Nexus-IQ
Afhankelijkheidscontrole
Afhankelijkheidsspoor

De mogelijkheid om ervoor te zorgen dat componenten die in de broncode worden gebruikt, worden gecontroleerd op gelicentieerde zuiverheid
+
-
+

Mogelijkheid om te scannen en analyseren op kwetsbaarheden en licentiezuiverheid voor Docker-images
+ Integratie met Clair
-
-

Mogelijkheid om beveiligingsbeleid te configureren om open source-bibliotheken te gebruiken
+
-
-

Mogelijkheid om open source-opslagplaatsen te scannen op kwetsbare componenten
+ RubyGems, Maven, NPM, Nuget, Pypi, Conan, Bower, Conda, Go, p2, R, Yum, Helm, Docker, CocoaPods, Git LFS
-
+ Hex, RubyGems, Maven, NPM, Nuget, Pypi

Beschikbaarheid van een gespecialiseerde onderzoeksgroep
+
-
-

Gesloten luswerking
+
+
+

Gebruik van databases van derden
+ Gesloten Sonatype-database
+ Sonatype OSS, NPM Publieke Adviseurs
+ Sonatype OSS, NPM Public Advisors, RetireJS, VulnDB, ondersteuning voor zijn eigen kwetsbaarheidsdatabase

Mogelijkheid om open source-componenten te filteren wanneer ze in de ontwikkelingslus proberen te laden volgens geconfigureerd beleid
+
-
-

Aanbevelingen voor het oplossen van kwetsbaarheden, beschikbaarheid van links naar oplossingen
+
+- (afhankelijk van de beschrijving in openbare databases)
+- (afhankelijk van de beschrijving in openbare databases)

Rangschikking van gedetecteerde kwetsbaarheden op basis van ernst
+
+
+

Rolgebaseerd toegangsmodel
+
-
+

CLI-ondersteuning
+
+
+- (alleen voor CycloneDX)

Bemonstering/sortering van kwetsbaarheden volgens gedefinieerde criteria
+
-
+

Dashboard op applicatiestatus
+
-
+

Rapporten genereren in PDF-formaat
+
-
-

Rapporten genereren in JSONCSV-formaat
+
+
-

Ondersteuning voor de Russische taal
-
-
-

Integratiemogelijkheden

integratie
Nexus-IQ
Afhankelijkheidscontrole
Afhankelijkheidsspoor

LDAP/Active Directory-integratie
+
-
+

Integratie met continu integratiesysteem Bamboo
+
-
-

Integratie met continu integratiesysteem TeamCity
+
-
-

Integratie met continu integratiesysteem GitLab
+
+- (als plug-in voor GitLab)
+

Integratie met continu integratiesysteem Jenkins
+
+
+

Beschikbaarheid van plug-ins voor IDE
+ IntelliJ, Eclipse, Visual Studio
-
-

Ondersteuning voor aangepaste integratie via webservices (API) van de tool
+
-
+

Afhankelijkheidscontrole

Eerste run

Laten we de afhankelijkheidscontrole uitvoeren op een opzettelijk kwetsbare applicatie DVJA.

Hiervoor zullen we gebruiken Afhankelijkheidscontrole Maven-plug-in:

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

Als gevolg hiervan verschijnt dependency-check-report.html in de doelmap.

DevSecOps: werkingsprincipes en vergelijking van SCA. Deel een

Laten we het bestand openen. Na samenvattende informatie over het totale aantal kwetsbaarheden kunnen we informatie zien over kwetsbaarheden met een hoog niveau van ernst en vertrouwen, met vermelding van het pakket, de CPE en het aantal CVE’s.

Vervolgens komt meer gedetailleerde informatie, met name de basis waarop de beslissing is genomen (bewijsmateriaal), dat wil zeggen een bepaalde stuklijst.

DevSecOps: werkingsprincipes en vergelijking van SCA. Deel een

Vervolgens komen de CPE-, PURL- en CVE-beschrijving. Aanbevelingen voor correctie zijn overigens niet opgenomen vanwege hun afwezigheid in de NVD-database.

DevSecOps: werkingsprincipes en vergelijking van SCA. Deel een

Om de scanresultaten systematisch te bekijken, kunt u Nginx met minimale instellingen configureren, of de resulterende defecten naar een defectbeheersysteem sturen dat connectoren met Dependency Check ondersteunt. Bijvoorbeeld DefectDojo.

Afhankelijkheidsspoor

installatie

Dependency Track is op zijn beurt een webgebaseerd platform met weergavegrafieken, dus de urgente kwestie van het opslaan van defecten in een oplossing van derden doet zich hier niet voor.
De ondersteunde scripts voor installatie zijn: Docker, WAR, Executable WAR.

Eerste run

We gaan naar de URL van de actieve service. We loggen in via admin/admin, wijzigen de login en het wachtwoord en gaan vervolgens naar het Dashboard. Het volgende dat we gaan doen is een project maken voor een testapplicatie in Java Home/Projecten → Project aanmaken . Laten we de DVJA als voorbeeld nemen.

DevSecOps: werkingsprincipes en vergelijking van SCA. Deel een

Omdat Dependency Track alleen stuklijst als invoer kan accepteren, moet deze stuklijst worden opgehaald. Laten we profiteren CycloneDX Maven-plug-in:

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

We krijgen bom.xml en laden het bestand in het gemaakte project DVJA → Afhankelijkheden → Stuklijst uploaden.

Laten we naar Beheer → Analysers gaan. We begrijpen dat we alleen Internal Analyzer hebben ingeschakeld, inclusief NVD. Laten we ook Sonatype OSS Index verbinden.

DevSecOps: werkingsprincipes en vergelijking van SCA. Deel een

We krijgen dus het volgende beeld voor ons project:

DevSecOps: werkingsprincipes en vergelijking van SCA. Deel een

Ook in de lijst vindt u één kwetsbaarheid die van toepassing is op Sonatype OSS:

DevSecOps: werkingsprincipes en vergelijking van SCA. Deel een

De grootste teleurstelling was dat Dependency Track niet langer Dependency Check XML-rapporten accepteert. De nieuwste ondersteunde versies van de Dependency Check-integratie waren 1.0.0 - 4.0.2, terwijl ik 5.3.2 testte.

Hier video (en hier) toen het nog mogelijk was.

Nexus-IQ

Eerste run

Installatie van Nexus IQ komt uit de archieven van documentatie, maar we hebben voor deze doeleinden een Docker-image gebouwd.

Nadat u zich heeft aangemeld bij de console, moet u een organisatie en applicatie aanmaken.

DevSecOps: werkingsprincipes en vergelijking van SCA. Deel een

DevSecOps: werkingsprincipes en vergelijking van SCA. Deel een

DevSecOps: werkingsprincipes en vergelijking van SCA. Deel een

Zoals je kunt zien is de opzet in het geval van IQ iets ingewikkelder, omdat we ook beleid moeten creëren dat van toepassing is op verschillende ‘fasen’ (dev, build, stage, release). Dit is nodig om kwetsbare componenten te blokkeren wanneer ze door de pijplijn dichter bij de productie komen, of om ze te blokkeren zodra ze in de Nexus Repo terechtkomen wanneer ze door ontwikkelaars worden gedownload.

Laten we, om het verschil tussen open source en enterprise te voelen, dezelfde scan uitvoeren via Nexus IQ op dezelfde manier via Maven-plug-in, nadat we eerder een testapplicatie hadden gemaakt in de NexusIQ-interface 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>

Volg de URL naar het gegenereerde rapport in de IQ-webinterface:

DevSecOps: werkingsprincipes en vergelijking van SCA. Deel een

Hier kunt u alle beleidsschendingen zien die verschillende significantieniveaus aangeven (van Info tot Beveiligingskritiek). De letter D naast de component betekent dat de component Directe afhankelijkheid is, en de letter T naast de component betekent dat de component Transitieve Afhankelijkheid is, dat wil zeggen dat deze transitief is.

Overigens het rapport State of Open Source-beveiligingsrapport 2020 van Snyk meldt dat meer dan 70% van de open source-kwetsbaarheden die zijn ontdekt in Node.js, Java en Ruby zich in transitieve afhankelijkheden bevinden.

Als we een van de schendingen van het Nexus IQ-beleid openen, kunnen we een beschrijving van het onderdeel zien, evenals een versiegrafiek, die de locatie van de huidige versie in de tijdgrafiek toont, en ook op welk punt de kwetsbaarheid ophoudt te bestaan. wees kwetsbaar. De hoogte van de kaarsen in de grafiek toont de populariteit van het gebruik van dit onderdeel.

DevSecOps: werkingsprincipes en vergelijking van SCA. Deel een

Als u naar het gedeelte met kwetsbaarheden gaat en de CVE uitvouwt, kunt u een beschrijving van deze kwetsbaarheid lezen, aanbevelingen voor eliminatie, evenals de reden waarom dit onderdeel is geschonden, dat wil zeggen de aanwezigheid van de klasse DiskFileitem.class.

DevSecOps: werkingsprincipes en vergelijking van SCA. Deel een

DevSecOps: werkingsprincipes en vergelijking van SCA. Deel een

Laten we alleen die met betrekking tot Java-componenten van derden samenvatten, waarbij de js-componenten worden verwijderd. Tussen haakjes geven wij het aantal kwetsbaarheden aan dat buiten NVD is aangetroffen.

Totaal Nexus-IQ:

  • Afhankelijkheden gescand: 62
  • Kwetsbare afhankelijkheden: 16
  • Kwetsbaarheden gevonden: 42 (8 sonatype db)

Totale afhankelijkheidscontrole:

  • Afhankelijkheden gescand: 47
  • Kwetsbare afhankelijkheden: 13
  • Kwetsbaarheden gevonden: 91 (14 sonatype oss)

Totaal afhankelijkheidsspoor:

  • Afhankelijkheden gescand: 59
  • Kwetsbare afhankelijkheden: 10
  • Kwetsbaarheden gevonden: 51 (1 sonatype oss)

In de volgende stappen zullen we de verkregen resultaten analyseren en uitzoeken welke van deze kwetsbaarheden een echt defect is en welke een vals positief resultaat is.

Disclaimer

Deze recensie is geen onbetwistbare waarheid. Het was niet de bedoeling van de auteur om een ​​afzonderlijk instrument tegen de achtergrond van anderen te belichten. Het doel van de review was om de werkingsmechanismen van SCA-instrumenten te laten zien en manieren om de resultaten ervan te controleren.

Vergelijking van resultaten

Algemene voorwaarden:

Een false positive voor kwetsbaarheden in componenten van derden is:

  • CVE-mismatch met geïdentificeerde component
  • Als er bijvoorbeeld een kwetsbaarheid wordt geïdentificeerd in het struts2-framework, en de tool verwijst naar een onderdeel van het struts-tiles-framework, waarop deze kwetsbaarheid niet van toepassing is, dan is dit een vals positief resultaat.
  • CVE komt niet overeen met de geïdentificeerde versie van de component
  • De kwetsbaarheid houdt bijvoorbeeld verband met Python-versie > 3.5 en de tool markeert versie 2.7 als kwetsbaar - dit is een false positive, aangezien de kwetsbaarheid in feite alleen van toepassing is op de 3.x-producttak
  • Dubbele CVE
  • Als de SCA bijvoorbeeld een CVE specificeert die een RCE mogelijk maakt, specificeert de SCA een CVE voor datzelfde onderdeel dat van toepassing is op Cisco-producten die onder die RCE vallen. In dit geval zal het vals-positief zijn.
  • Er is bijvoorbeeld een CVE gevonden in een spring-web component, waarna SCA verwijst naar dezelfde CVE in andere componenten van het Spring Framework, terwijl de CVE niets met andere componenten te maken heeft. In dit geval zal het vals-positief zijn.

Het doel van het onderzoek was het Open Source project DVJA. Het onderzoek betrof alleen Java-componenten (zonder js).

Samenvatting resultaten

Laten we meteen naar de resultaten gaan van een handmatige beoordeling van geïdentificeerde kwetsbaarheden. Het volledige rapport per CVE vindt u in de bijlage.

Samenvattende resultaten voor alle kwetsbaarheden:

Parameter
Nexus-IQ
Afhankelijkheidscontrole
Afhankelijkheidsspoor

Totaal aantal geïdentificeerde kwetsbaarheden
42
91
51

Onjuist geïdentificeerde kwetsbaarheden (false positive)
2 (4.76%)
62 (68,13%)
29 (56.86%)

Geen relevante kwetsbaarheden gevonden (vals negatief)
10
20
27

Samenvatting resultaten per component:

Parameter
Nexus-IQ
Afhankelijkheidscontrole
Afhankelijkheidsspoor

Totaal aantal geïdentificeerde componenten
62
47
59

Totaal kwetsbare componenten
16
13
10

Verkeerd geïdentificeerde kwetsbare componenten (false positive)
1
5
0

Verkeerd geïdentificeerde kwetsbare componenten (false positive)
0
6
6

Laten we visuele grafieken maken om de verhouding tussen fout-positieve en fout-negatieve fouten en het totale aantal kwetsbaarheden te evalueren. Componenten zijn horizontaal gemarkeerd en de daarin geïdentificeerde kwetsbaarheden zijn verticaal gemarkeerd.

DevSecOps: werkingsprincipes en vergelijking van SCA. Deel een

DevSecOps: werkingsprincipes en vergelijking van SCA. Deel een

DevSecOps: werkingsprincipes en vergelijking van SCA. Deel een

Ter vergelijking: een soortgelijk onderzoek werd uitgevoerd door het Sonatype-team, waarbij een project van 1531 componenten werd getest met behulp van OWASP Dependency Check. Zoals we kunnen zien, is de verhouding tussen ruis en correcte reacties vergelijkbaar met onze resultaten.

DevSecOps: werkingsprincipes en vergelijking van SCA. Deel een
Bron: www.sonatype.com/why-precision-matters-ebook

Laten we eens kijken naar enkele CVE's uit onze scanresultaten om de reden voor deze resultaten te begrijpen.

Meer

№ 1

Laten we eerst eens kijken naar enkele interessante punten over de Sonatype Nexus IQ.

Nexus IQ wijst op een probleem met deserialisatie met de mogelijkheid om RCE meerdere keren uit te voeren in het Spring Framework. CVE-2016-1000027 in spring-web:3.0.5 voor het eerst, en CVE-2011-2894 in spring-context:3.0.5 en spring-core:3.0.5. In eerste instantie lijkt het erop dat er sprake is van dubbele kwetsbaarheid in meerdere CVE's. Want als je naar CVE-2016-1000027 en CVE-2011-2894 in de NVD-database kijkt, lijkt alles vanzelfsprekend

bestanddeel
Kwetsbaarheid

veerweb: 3.0.5
CVE-2016-1000027

lente-context:3.0.5
CVE-2011-2894

veerkern: 3.0.5
CVE-2011-2894

beschrijving CVE-2011-2894 van NVD:
DevSecOps: werkingsprincipes en vergelijking van SCA. Deel een

beschrijving CVE-2016-1000027 van NVD:
DevSecOps: werkingsprincipes en vergelijking van SCA. Deel een

CVE-2011-2894 zelf is behoorlijk beroemd. In het rapport Witte bron 2011 deze CVE werd erkend als een van de meest voorkomende. Beschrijvingen voor CVE-2016-100027 zijn in principe schaars in NVD, en het lijkt alleen van toepassing te zijn op Spring Framework 4.1.4. Laten we eens kijken referentie en hier wordt alles min of meer duidelijk. Van Houdbare artikelen Wij begrijpen dat naast de kwetsbaarheid in RemoteInvocationSerializingExporter in CVE-2011-2894 wordt de kwetsbaarheid waargenomen in HttpInvokerServiceExporter. Dit is wat Nexus IQ ons vertelt:

DevSecOps: werkingsprincipes en vergelijking van SCA. Deel een

Er bestaat echter niets vergelijkbaars in NVD, en daarom krijgen Dependency Check en Dependency Track allebei een vals negatief resultaat.

Ook uit de beschrijving van CVE-2011-2894 kan worden begrepen dat de kwetsbaarheid inderdaad aanwezig is in zowel spring-context:3.0.5 als spring-core:3.0.5. Bevestiging hiervan vind je in een artikel van de persoon die deze kwetsbaarheid heeft gevonden.

№ 2

bestanddeel
Kwetsbaarheid
Resultaat

stutten2-kern:2.3.30
CVE-2016-4003
Juist

Als we de kwetsbaarheid CVE-2016-4003 bestuderen, zullen we begrijpen dat deze in versie 2.3.28 is opgelost, maar Nexus IQ rapporteert dit aan ons. Er staat een opmerking in de beschrijving van de kwetsbaarheid:

DevSecOps: werkingsprincipes en vergelijking van SCA. Deel een

Dat wil zeggen dat de kwetsbaarheid alleen bestaat in combinatie met een verouderde versie van de JRE, waarvoor ze besloten ons te waarschuwen. Niettemin beschouwen wij dit als vals positief, hoewel niet het ergste.

№ 3

bestanddeel
Kwetsbaarheid
Resultaat

xwork-kern: 2.3.30
CVE-2017-9804
TRUE

xwork-kern: 2.3.30
CVE-2017-7672
Juist

Als we naar de beschrijvingen van CVE-2017-9804 en CVE-2017-7672 kijken, zullen we begrijpen dat het probleem URLValidator class, waarbij CVE-2017-9804 voortkomt uit CVE-2017-7672. De aanwezigheid van de tweede kwetsbaarheid brengt geen enkele nuttige lading met zich mee, behalve het feit dat de ernst ervan is toegenomen tot Hoog, dus we kunnen het als onnodige ruis beschouwen.

Over het geheel genomen zijn er geen andere valse positieven gevonden voor Nexus IQ.

№ 4

Er zijn verschillende dingen waardoor IQ zich onderscheidt van andere oplossingen.

bestanddeel
Kwetsbaarheid
Resultaat

veerweb: 3.0.5
CVE-2020-5398
TRUE

De CVE in de NVD stelt dat deze alleen van toepassing is op versies 5.2.x vóór 5.2.3, 5.1.x vóór 5.1.13 en versies 5.0.x vóór 5.0.16, als we echter naar de CVE-beschrijving in Nexus IQ kijken , dan zien we het volgende:
Adviesafwijkingskennisgeving: Het beveiligingsonderzoeksteam van Sonatype ontdekte dat dit beveiligingslek was geïntroduceerd in versie 3.0.2.RELEASE en niet in 5.0.x zoals vermeld in het advies.

Hierna volgt een PoC voor deze kwetsbaarheid, waarin staat dat deze aanwezig is in versie 3.0.5.

Vals negatief wordt verzonden naar Dependency Check en Dependency Track.

№ 5

Laten we eens kijken naar valse positieven voor Dependency Check en Dependency Track.

Dependency Check onderscheidt zich doordat het de CVE's weerspiegelt die van toepassing zijn op het gehele raamwerk in NVD en de componenten waarop deze CVE's niet van toepassing zijn. Het betreft CVE-2012-0394, CVE-2013-2115, CVE-2014-0114, CVE-2015-0899, CVE-2015-2992, CVE-2016-1181, CVE-2016-1182, waarbij de Afhankelijkheidscontrole “de boel verpestte ” naar struts-taglib:1.3.8 en struts-tiles-1.3.8. Deze componenten hebben niets te maken met wat wordt beschreven in de CVE: aanvraagverwerking, paginavalidatie, enzovoort. Dit komt door het feit dat deze CVE's en componenten slechts het raamwerk gemeen hebben. Daarom beschouwde Dependency Check het als een kwetsbaarheid.

Dezelfde situatie is met spring-tx:3.0.5, en een vergelijkbare situatie met struts-core:1.3.8. Voor struts-core hebben Dependency Check en Dependency Track veel kwetsbaarheden gevonden die feitelijk van toepassing zijn op struts2-core, wat in wezen een afzonderlijk raamwerk is. In dit geval begreep Nexus IQ het beeld correct en in de CVE's die het uitbracht, werd aangegeven dat struts-core het einde van de levensduur had bereikt en dat het noodzakelijk was om over te stappen op struts2-core.

№ 6

In sommige situaties is het oneerlijk om een ​​duidelijke Dependency Check- en Dependency Track-fout te interpreteren. In het bijzonder CVE-2013-4152, CVE-2013-6429, CVE-2013-6430, CVE-2013-7315, CVE-2014-0054, CVE-2014-0225, CVE-2014-0225, welke afhankelijkheidscontrole en afhankelijkheidstrack toegeschreven aan spring-core:3.0.5 behoort eigenlijk tot spring-web:3.0.5. Tegelijkertijd werden sommige van deze CVE's ook gevonden door Nexus IQ, maar IQ identificeerde ze correct met een ander onderdeel. Omdat deze kwetsbaarheden niet in spring-core zijn aangetroffen, kan niet worden gesteld dat ze in principe niet in het raamwerk voorkomen en open source-tools hebben terecht op deze kwetsbaarheden gewezen (ze hebben net een klein beetje gemist).

Bevindingen

Zoals we kunnen zien, levert het handmatig beoordelen van de betrouwbaarheid van geïdentificeerde kwetsbaarheden geen eenduidige resultaten op. Daarom ontstaan ​​er controversiële kwesties. De resultaten zijn dat de Nexus IQ-oplossing het laagste percentage valse positieven en de hoogste nauwkeurigheid heeft.

In de eerste plaats is dit te wijten aan het feit dat het Sonatype-team de beschrijving voor elke CVE-kwetsbaarheid van NVD in zijn databases heeft uitgebreid, de kwetsbaarheden voor een bepaalde versie van de componenten heeft aangegeven tot aan de klasse of functie, en aanvullend onderzoek heeft uitgevoerd (bijvoorbeeld , het controleren van kwetsbaarheden in oudere softwareversies).

Een belangrijke invloed op de resultaten wordt ook gespeeld door de kwetsbaarheden die niet in NVD zijn opgenomen, maar toch aanwezig zijn in de Sonatype-database met het SONATYPE-keurmerk. Volgens het rapport De stand van zaken op het gebied van open source-beveiligingsproblemen 2020 45% van de ontdekte open source-kwetsbaarheden wordt niet gerapporteerd aan de NVD. Volgens de WhiteSource-database wordt slechts 29% van alle buiten NVD gemelde open source-kwetsbaarheden daar gepubliceerd. Daarom is het belangrijk om ook in andere bronnen naar kwetsbaarheden te zoeken.

Als gevolg hiervan produceert Dependency Check veel ruis, waarbij enkele kwetsbare componenten ontbreken. Dependency Track produceert minder ruis en detecteert een groot aantal componenten, wat de ogen in de webinterface geen visuele schade toebrengt.

De praktijk leert echter dat open source de eerste stappen naar volwassen DevSecOps moet worden. Het eerste waar u aan moet denken bij het integreren van SCA in ontwikkeling zijn processen, namelijk samen met het management en aanverwante afdelingen nadenken over hoe ideale processen er in uw organisatie uit zouden moeten zien. Het kan blijken dat Dependency Check of Dependency Track voor uw organisatie in eerste instantie alle zakelijke behoeften zal dekken, en dat Enterprise-oplossingen een logisch vervolg zullen zijn vanwege de groeiende complexiteit van de applicaties die worden ontwikkeld.

Bijlage A: Componentresultaten
Symbolen:

  • Hoog: kwetsbaarheden op hoog en kritiek niveau in de component
  • Gemiddeld: kwetsbaarheden met een gemiddeld kritiek niveau in de component
  • WAAR – Echt positief probleem
  • FALSE – Vals-positief probleem

bestanddeel
Nexus-IQ
Afhankelijkheidscontrole
Afhankelijkheidsspoor
Resultaat

dom4j: 1.6.1
Hoge
Hoge
Hoge
TRUE

log4j-kern: 2.3
Hoge
Hoge
Hoge
TRUE

log4j: 1.2.14
Hoge
Hoge
-
TRUE

commons-collecties:3.1
Hoge
Hoge
Hoge
TRUE

commons-fileupload:1.3.2
Hoge
Hoge
Hoge
TRUE

commons-beanutils:1.7.0
Hoge
Hoge
Hoge
TRUE

commons-codec:1:10
Medium
-
-
TRUE

mysql-connector-java:5.1.42
Hoge
Hoge
Hoge
TRUE

veer-expressie:3.0.5
Hoge
onderdeel niet gevonden

TRUE

veerweb: 3.0.5
Hoge
onderdeel niet gevonden
Hoge
TRUE

lente-context:3.0.5
Medium
onderdeel niet gevonden
-
TRUE

veerkern: 3.0.5
Medium
Hoge
Hoge
TRUE

struts2-config-browserplugin:2.3.30
Medium
-
-
TRUE

lente-tx:3.0.5
-
Hoge
-
Juist

stutten-kern: 1.3.8
Hoge
Hoge
Hoge
TRUE

xwork-kern: 2.3.30
Hoge
-
-
TRUE

stutten2-kern: 2.3.30
Hoge
Hoge
Hoge
TRUE

struts-taglib:1.3.8
-
Hoge
-
Juist

stutten-tegels-1.3.8
-
Hoge
-
Juist

Bijlage B: Kwetsbaarheidsresultaten
Symbolen:

  • Hoog: kwetsbaarheden op hoog en kritiek niveau in de component
  • Gemiddeld: kwetsbaarheden met een gemiddeld kritiek niveau in de component
  • WAAR – Echt positief probleem
  • FALSE – Vals-positief probleem

bestanddeel
Nexus-IQ
Afhankelijkheidscontrole
Afhankelijkheidsspoor
Strengheid
Resultaat
Commentaar

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

CVE-2020-10683
CVE-2020-10683
CVE-2020-10683
Hoge
TRUE

log4j-kern: 2.3
CVE-2017-5645
CVE-2017-5645
CVE-2017-5645
Hoge
TRUE

CVE-2020-9488
CVE-2020-9488
CVE-2020-9488
Laag
TRUE

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

-
CVE-2020-9488
-
Laag
TRUE

SONATYPE-2010-0053
-
-
Hoge
TRUE

commons-collecties:3.1
-
CVE-2015-6420
CVE-2015-6420
Hoge
Juist
Duplicaten RCE(OSSINDEX)

-
CVE-2017-15708
CVE-2017-15708
Hoge
Juist
Duplicaten RCE(OSSINDEX)

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

commons-fileupload:1.3.2
CVE-2016-1000031
CVE-2016-1000031
CVE-2016-1000031
Hoge
TRUE

SONATYPE-2014-0173
-
-
Medium
TRUE

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

-
CVE-2019-10086
CVE-2019-10086
Hoge
Juist
De kwetsbaarheid is alleen van toepassing op versies 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
Hoge
TRUE

CVE-2019-2692
CVE-2019-2692
-
Medium
TRUE

-
CVE-2020-2875
-
Medium
Juist
Dezelfde kwetsbaarheid als CVE-2019-2692, maar met de opmerking “aanvallen kunnen aanzienlijke gevolgen hebben voor aanvullende producten”

-
CVE-2017-15945
-
Hoge
Juist
Niet relevant voor mysql-connector-java

-
CVE-2020-2933
-
Laag
Juist
Duplicaat van CVE-2020-2934

CVE-2020-2934
CVE-2020-2934
-
Medium
TRUE

veer-expressie:3.0.5
CVE-2018-1270
onderdeel niet gevonden
-
Hoge
TRUE

CVE-2018-1257
-
-
Medium
TRUE

veerweb: 3.0.5
CVE-2016-1000027
onderdeel niet gevonden
-
Hoge
TRUE

CVE-2014-0225
-
CVE-2014-0225
Hoge
TRUE

CVE-2011-2730
-
-
Hoge
TRUE

-
-
CVE-2013-4152
Medium
TRUE

CVE-2018-1272
-
-
Hoge
TRUE

CVE-2020-5398
-
-
Hoge
TRUE
Een illustratief voorbeeld in het voordeel van IQ: “Het Sonatype-beveiligingsonderzoeksteam ontdekte dat deze kwetsbaarheid was geïntroduceerd in versie 3.0.2.RELEASE en niet in 5.0.x zoals vermeld in het advies.”

CVE-2013-6429
-
-
Medium
TRUE

CVE-2014-0054
-
CVE-2014-0054
Medium
TRUE

CVE-2013-6430
-
-
Medium
TRUE

lente-context:3.0.5
CVE-2011-2894
onderdeel niet gevonden
-
Medium
TRUE

veerkern: 3.0.5
-
CVE-2011-2730
CVE-2011-2730
Hoge
TRUE

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

-
-
CVE-2013-4152
Medium
Juist
Duplicaat van dezelfde kwetsbaarheid in spring-web

-
CVE-2013-4152
-
Medium
Juist
De kwetsbaarheid heeft betrekking op de spring-web-component

-
CVE-2013-6429
CVE-2013-6429
Medium
Juist
De kwetsbaarheid heeft betrekking op de spring-web-component

-
CVE-2013-6430
-
Medium
Juist
De kwetsbaarheid heeft betrekking op de spring-web-component

-
CVE-2013-7315
CVE-2013-7315
Medium
Juist
SPLIT van CVE-2013-4152. + De kwetsbaarheid heeft betrekking op de veerwebcomponent

-
CVE-2014-0054
CVE-2014-0054
Medium
Juist
De kwetsbaarheid heeft betrekking op de spring-web-component

-
CVE-2014-0225
-
Hoge
Juist
De kwetsbaarheid heeft betrekking op de spring-web-component

-
-
CVE-2014-0225
Hoge
Juist
Duplicaat van dezelfde kwetsbaarheid in spring-web

-
CVE-2014-1904
CVE-2014-1904
Medium
Juist
Het beveiligingslek heeft betrekking op de spring-web-mvc-component

-
CVE-2014-3625
CVE-2014-3625
Medium
Juist
Het beveiligingslek heeft betrekking op de spring-web-mvc-component

-
CVE-2016-9878
CVE-2016-9878
Hoge
Juist
Het beveiligingslek heeft betrekking op de spring-web-mvc-component

-
CVE-2018-1270
CVE-2018-1270
Hoge
Juist
Voor lente-expressie/lente-berichten

-
CVE-2018-1271
CVE-2018-1271
Medium
Juist
Het beveiligingslek heeft betrekking op de spring-web-mvc-component

-
CVE-2018-1272
CVE-2018-1272
Hoge
TRUE

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

SONATYPE-2015-0327
-
-
Laag
TRUE

struts2-config-browserplugin:2.3.30
SONATYPE-2016-0104
-
-
Medium
TRUE

lente-tx:3.0.5
-
CVE-2011-2730
-
Hoge
Juist
De kwetsbaarheid is niet specifiek voor spring-tx

-
CVE-2011-2894
-
Hoge
Juist
De kwetsbaarheid is niet specifiek voor spring-tx

-
CVE-2013-4152
-
Medium
Juist
De kwetsbaarheid is niet specifiek voor spring-tx

-
CVE-2013-6429
-
Medium
Juist
De kwetsbaarheid is niet specifiek voor spring-tx

-
CVE-2013-6430
-
Medium
Juist
De kwetsbaarheid is niet specifiek voor spring-tx

-
CVE-2013-7315
-
Medium
Juist
De kwetsbaarheid is niet specifiek voor spring-tx

-
CVE-2014-0054
-
Medium
Juist
De kwetsbaarheid is niet specifiek voor spring-tx

-
CVE-2014-0225
-
Hoge
Juist
De kwetsbaarheid is niet specifiek voor spring-tx

-
CVE-2014-1904
-
Medium
Juist
De kwetsbaarheid is niet specifiek voor spring-tx

-
CVE-2014-3625
-
Medium
Juist
De kwetsbaarheid is niet specifiek voor spring-tx

-
CVE-2016-9878
-
Hoge
Juist
De kwetsbaarheid is niet specifiek voor spring-tx

-
CVE-2018-1270
-
Hoge
Juist
De kwetsbaarheid is niet specifiek voor spring-tx

-
CVE-2018-1271
-
Medium
Juist
De kwetsbaarheid is niet specifiek voor spring-tx

-
CVE-2018-1272
-
Medium
Juist
De kwetsbaarheid is niet specifiek voor spring-tx

stutten-kern: 1.3.8
-
CVE-2011-5057 (OSSINDEX)

Medium
FASLE
Kwetsbaarheid voor struts 2

-
CVE-2012-0391 (OSSINDEX)
CVE-2012-0391
Hoge
Juist
Kwetsbaarheid voor struts 2

-
CVE-2014-0094 (OSSINDEX)
CVE-2014-0094
Medium
Juist
Kwetsbaarheid voor struts 2

-
CVE-2014-0113 (OSSINDEX)
CVE-2014-0113
Hoge
Juist
Kwetsbaarheid voor struts 2

CVE-2016-1182
3VE-2016-1182
-
Hoge
TRUE

-
-
CVE-2011-5057
Medium
Juist
Kwetsbaarheid voor struts 2

-
CVE-2012-0392 (OSSINDEX)
CVE-2012-0392
Hoge
Juist
Kwetsbaarheid voor struts 2

-
CVE-2012-0393 (OSSINDEX)
CVE-2012-0393
Medium
Juist
Kwetsbaarheid voor struts 2

CVE-2015-0899
CVE-2015-0899
-
Hoge
TRUE

-
CVE-2012-0394
CVE-2012-0394
Medium
Juist
Kwetsbaarheid voor struts 2

-
CVE-2012-0838 (OSSINDEX)
CVE-2012-0838
Hoge
Juist
Kwetsbaarheid voor struts 2

-
CVE-2013-1965 (OSSINDEX)
CVE-2013-1965
Hoge
Juist
Kwetsbaarheid voor struts 2

-
CVE-2013-1966 (OSSINDEX)
CVE-2013-1966
Hoge
FASLE
Kwetsbaarheid voor struts 2

-
CVE-2013-2115
CVE-2013-2115
Hoge
FASLE
Kwetsbaarheid voor struts 2

-
CVE-2013-2134 (OSSINDEX)
CVE-2013-2134
Hoge
FASLE
Kwetsbaarheid voor struts 2

-
CVE-2013-2135 (OSSINDEX)
CVE-2013-2135
Hoge
FASLE
Kwetsbaarheid voor struts 2

CVE-2014-0114
CVE-2014-0114
-
Hoge
TRUE

-
CVE-2015-2992
CVE-2015-2992
Medium
Juist
Kwetsbaarheid voor struts 2

-
CVE-2016-0785 (OSSINDEX)
CVE-2016-0785
Hoge
Juist
Kwetsbaarheid voor struts 2

CVE-2016-1181
CVE-2016-1181
-
Hoge
TRUE

-
CVE-2016-4003 (OSSINDEX)
CVE-2016-4003
Hoge
Juist
Kwetsbaarheid voor struts 2

xwork-kern: 2.3.30
CVE-2017-9804
-
-
Hoge
TRUE

SONATYPE-2017-0173
-
-
Hoge
TRUE

CVE-2017-7672
-
-
Hoge
Juist
Duplicaat van CVE-2017-9804

SONATYPE-2016-0127
-
-
Hoge
TRUE

stutten2-kern:2.3.30
-
CVE-2016-6795
CVE-2016-6795
Hoge
TRUE

-
CVE-2017-9787
CVE-2017-9787
Hoge
TRUE

-
CVE-2017-9791
CVE-2017-9791
Hoge
TRUE

-
CVE-2017-9793
-
Hoge
Juist
Duplicaat van CVE-2018-1327

-
CVE-2017-9804
-
Hoge
TRUE

-
CVE-2017-9805
CVE-2017-9805
Hoge
TRUE

CVE-2016-4003
-
-
Medium
Juist
Van toepassing op Apache Struts 2.x tot en met 2.3.28, dat is versie 2.3.30. Op basis van de beschrijving is de CVE echter geldig voor elke versie van Struts 2 als JRE 1.7 of lager wordt gebruikt. Blijkbaar hebben ze besloten ons hier te herverzekeren, maar het lijkt meer op FALSE

-
CVE-2018-1327
CVE-2018-1327
Hoge
TRUE

CVE-2017-5638
CVE-2017-5638
CVE-2017-5638
Hoge
TRUE
Dezelfde kwetsbaarheid waar Equifax-hackers in 2017 misbruik van maakten

CVE-2017-12611
CVE-2017-12611
-
Hoge
TRUE

CVE-2018-11776
CVE-2018-11776
CVE-2018-11776
Hoge
TRUE

struts-taglib:1.3.8
-
CVE-2012-0394
-
Medium
Juist
Voor stutten2-kern

-
CVE-2013-2115
-
Hoge
Juist
Voor stutten2-kern

-
CVE-2014-0114
-
Hoge
Juist
Voor commons-beanutils

-
CVE-2015-0899
-
Hoge
Juist
Geldt niet voor taglib

-
CVE-2015-2992
-
Medium
Juist
Verwijst naar struts2-core

-
CVE-2016-1181
-
Hoge
Juist
Geldt niet voor taglib

-
CVE-2016-1182
-
Hoge
Juist
Geldt niet voor taglib

stutten-tegels-1.3.8
-
CVE-2012-0394
-
Medium
Juist
Voor stutten2-kern

-
CVE-2013-2115
-
Hoge
Juist
Voor stutten2-kern

-
CVE-2014-0114
-
Hoge
Juist
Onder commons-beanutils

-
CVE-2015-0899
-
Hoge
Juist
Geldt niet voor tegels

-
CVE-2015-2992
-
Medium
Juist
Voor stutten2-kern

-
CVE-2016-1181
-
Hoge
Juist
Geldt niet voor taglib

-
CVE-2016-1182
-
Hoge
Juist
Geldt niet voor taglib

Bron: www.habr.com

Voeg een reactie