RĂ«ndĂ«sia e analizĂ«s sĂ« komponentĂ«ve tĂ« jashtĂ«m tĂ« softuerit (angl. Software Composition Analysis â SCA) nĂ« procesin e zhvillimit po rritet me daljen e raporteve vjetore mbi dobĂ«sitĂ« e biblioteka open source, tĂ« cilat publikohen nga kompanitĂ« Synopsys, Sonatype, Snyk, White Source. Sipas raportit numri i dobĂ«sive tĂ« identifikuara nĂ« open source nĂ« 2019 u rrit pothuajse 1.5 herĂ« krahasuar me vitin e kaluar, ndĂ«rsa komponentĂ«t me kod tĂ« hapur pĂ«rdoren nga 60% deri nĂ« 80% tĂ« projekteve. NĂ«se i referohemi mendimeve tĂ« pavarura, proceset SCA janĂ« njĂ« praktikĂ« tĂ« veçantĂ« tĂ« OWASP SAMM dhe BSIMM si njĂ« tregues i pjekurisĂ«, ndĂ«rsa nĂ« gjysmĂ«n e parĂ« tĂ« vitit 2020 OWASP publikoi njĂ« standard tĂ« ri OWASP Software Component Verification Standard (SCVS), i cili ofron praktikat mĂ« tĂ« mira pĂ«r verifikimin e komponentĂ«ve tĂ« jashtĂ«m nĂ« zinxhirin e furnizimit tĂ« softuerit.

Një nga rastet më treguese me kompaninë Equifax në maj 2017. Hakerë të panjohur morën informacionin e 143 milion amerikanëve, përfshirë emrat e plotë, adresat, numrat e sigurimit shoqëror dhe licencat e drejtimit. Në 209,000 raste, dokumentet përfshin gjithashtu informacionin mbi kartat e bankave të të prekurve. Kjo rrjedhje ndodhi si rezultat i shfrytëzimit të një dobësie kritike në Apache Struts 2 (CVE-2017-5638), ndonëse një rregullim ishte lëshuar që në mars 2017. Kompania kishte dy muaj për të instaluar përditësimin, por askush nuk u shqetësua për këtë.
Në këtë artikull do të diskutohet çështja e zgjedhjes së një instrumenti për kryerjen e SCA nga pikëpamja e cilësisë së rezultateve të analizës. Do të bëhet gjithashtu një krahasim funksional i instrumenteve. Procesi i integrimit në CI/CD dhe mundësitë e integrimit do t'i lëmë për publikime të tjera. Një listë e gjerë e instrumenteve është paraqitur nga OWASP , por në këtë shkrim, do të trajtojmë vetëm mjetin më të njohur open source, Dependency Check, platformën pak më pak të njohur open source Dependency Track dhe zgjidhjen Enterprise Sonatype Nexus IQ. Gjithashtu, do të shqyrtojmë se si funksionojnë këto zgjidhje dhe do të krahasojmë rezultatet për përjashtime të gabuara.

Parimi i funksionimit
Ă«shtĂ« njĂ« mjet (CLI, maven, modul jenkins, ant) qĂ« analizon skedarĂ«t e projektit, mbledh fragmente informacioni pĂ«r varĂ«sitĂ« (emri i paketĂ«s, groupid, titulli i specifikimit, versioni...), ndĂ«rton njĂ« varg CPE â (Common Platform Enumeration), Package URL (PURL) dhe identifikon pĂ«r CPE/PURL vulnerabilitete nga bazat e tĂ« dhĂ«nave (NVD, Sonatype OSS Index, NPM Audit API...), pas sĂ« cilĂ«s ndalon njĂ« raport tĂ« pĂ«r njĂ« herĂ« nĂ« formatin HTML, JSON, XML...
Le të shohim si duket CPE:
cpe:2.3:part:vendor:product:version:update:edition:language:sw_edition:target_sw:target_hw:other- Pjesa: Shënimi që komponenti i përket aplikacionit (a), sistemit operativ (o), harduerit (h) (Pika e Detyrueshme)
- Furnizuesi: Emri i prodhuesit të produktit (Pika e Detyrueshme)
- Produkti: Emri i produktit (Pika e Detyrueshme)
- Versioni: Versioni i komponentit (Pika e Tjetër)
- Përditësim: Përditësimi i paketës
- Edisioni: Versioni trashëguar (Pika e Tjetër)
- Gjuha: Gjuha e përcaktuar në RFC-5646
- Edisioni SW: Versioni i SW
- Target SW: Mjedisi programor në të cilin funksionon produkti
- HW Caku: Mjedisi hardueror në të cilin funksionon produkti
- TĂ« tjera: Informacion mbi ofruesin ose produktin
Shembulli CPE duket si më poshtë:
cpe:2.3:a:pivotal_software:spring_framework:3.0.0:*:*:*:*:*:*:* Kjo varg tregon se CPE versioni 2.3 pĂ«rshkruan njĂ« komponent aplikacioni nga prodhuesi pivotal_software me emrin spring_framework versioni 3.0.0. NĂ«se hapim dobĂ«sinĂ« nĂ« NVD, mund tĂ« shohim pĂ«rmendjen e kĂ«saj CPE. Problemi i parĂ« qĂ« duhet tĂ« vĂ«mĂ« re menjĂ«herĂ« Ă«shtĂ« â CVE nĂ« NVD, sipas CPE, raporton pĂ«r njĂ« problem nĂ« framework, dhe jo nĂ« njĂ« komponent specifik. Pra, nĂ«se zhvilluesit janĂ« ngushtĂ«sisht tĂ« lidhur me framework-un, dhe dobĂ«sia e identifikuar nuk ndikon nĂ« modulĂ«t qĂ« pĂ«rdorin zhvilluesit, specialisti i sigurisĂ« ndryshe do tĂ« duhet tĂ« analizojĂ« kĂ«tĂ« CVE dhe tĂ« mendojĂ« pĂ«r pĂ«rditĂ«simin.
URL adresa gjithashtu përdoret nga mjetet SCA. Formati i URL adresës së paketës është si më poshtë:
scheme:type/namespace/name@version?qualifiers#subpath- SŃheme: Do tĂ« jetĂ« gjithmonĂ« âpkgâ, duke treguar se ky Ă«shtĂ« URL adresa e paketĂ«s (Pika e detyrueshme)
- Tipi: âTipiâ i paketĂ«s ose âprotokolliâ i paketĂ«s, pĂ«r shembull maven, npm, nuget, gem, pypi etj. (Pika e detyrueshme)
- Emri hapësirës: Një prefix i caktuar emri, si identifikuesi i grupit Maven, pronari i imazhit Docker, përdoruesi apo organizata në GitHub. Opcional dhe varet nga lloji.
- Emri: Emri i paketës (Element i detyrueshëm)
- Versioni: Versioni i paketës
- Kualifikuesit: Të dhëna shtesë kualifikuese për paketën, si OS, arkitektura, shpërndarja etj. Opcional dhe varet nga lloji.
- Nënrruga: Një rrugë shtesë në paketë në lidhje me rrënjën e paketës
Për shembull:
pkg:golang/google.golang.org/genproto#googleapis/api/annotations
pkg:maven/org.apache.commons/io@1.3.4
pkg:pypi/django-package@1.11.1.dev1â njĂ« platformĂ« web on-premise qĂ« pranon Bill of Materials (BOM) tĂ« gatshme tĂ« formuara dhe , pra specifikime tĂ« gatshme pĂ«r varĂ«sitĂ« ekzistuese. Ky Ă«shtĂ« njĂ« skedar XML qĂ« pĂ«rshkruan varĂ«sitĂ« â emri, hash, url e paketĂ«s, botuesi, licenca. MĂ« pas, Dependency Track analizon BOM, shqyrton varĂ«sitĂ« e zbuluara pĂ«r CVE nga databaza e vulnerabiliteteve (NVD, Sonatype OSS Index âŠ), dhe pastaj ndĂ«rtan grafiket, llogarit metrikat, duke pĂ«rditĂ«suar rregullisht tĂ« dhĂ«nat mbi statusin e vulnerabilitetit tĂ« komponenteve.
Shembulli i asaj që mund të duket BOM në formatin XML:
Apache
org.apache.tomcat
tomcat-catalina
9.0.14
3942447fac867ae5cdb3229b658f4d48
e6b1000b94e835ffd37f4c6dcbdad43f4b48a02a
f498a8ff2dd007e29c2074f5e4b01a9a01775c3ff3aeaf6906ea503bc5791b7b
e8f33e424f3f4ed6db76a482fde1a5298970e442c531729119e37991884bdffab4f9426b7ee11fccd074eeda0634d71697d6f88a460dce0ac8d627a29f7d1282
Apache-2.0
pkg:maven/org.apache.tomcat/tomcat-catalina@9.0.14
BOM mund të përdoret jo vetëm si input për Dependency Track, por edhe për inventarizimin e komponenteve të softuerit në zinxhirin e furnizimit, për shembull, për t'u siguruar klientëve të softuerit. Në vitin 2014, madje u propozua një ligj në SHBA. , i cili thoshte se kur blihen softuerë, çdo institucion shtetëror duhet të kërkojë BOM për të parandaluar përdorimin e komponentëve të cenueshëm, megjithatë, ligji nuk hyri kurrë në fuqi.
Duke u kthyer te SCA, Dependency Track ka integrime të gatshme me platforma njoftimi si Slack dhe sisteme menaxhimi të cenueshmërive si Kenna Security. Duhet gjithashtu të themi se Dependency Track gjithashtu identifikon versionet e vjetra të paketave dhe ofron informacione rreth licencave (falë mbështetjes së SPDX).
Nëse flasim pikërisht për cilësinë e SCA, atëherë ka një ndryshim thelbësor.
Dependency Track nuk pranon projektin si të dhëna hyrëse, por pranon pikërisht BOM. Kjo do të thotë se nëse duam të verifikojmë një projekt, së pari duhet të gjenerojmë bom.xml, për shembull, me CycloneDX. Kështu, Dependency Track varet drejtpërdrejt nga CycloneDX. Në të njëjtën kohë, kjo ofron mundësi për personalizim. Kështu, ekipi OZON shkroi për krijimin e skedarëve BOM për projektet në Golang me qëllim skanimin e mëtejshëm përmes Dependency Track.
â zgjidhje komerciale SCA nga Sonatype, e cila Ă«shtĂ« pjesĂ« e ekosistemit Sonatype, ku pĂ«rfshihet gjithashtu Nexus Repository Manager. Nexus IQ mund tĂ« pranojĂ« si input arkiva war (pĂ«r projektet java) pĂ«rmes ndĂ«rfaqes web ose API-sĂ«, si dhe BOM, nĂ«se organizata juaj nuk ka arritur tĂ« kalojĂ« nga CycloneDX nĂ« zgjidhjen e re. Ndryshe nga zgjidhjet open source, IQ nuk i referohet vetĂ«m CP/PURL pĂ«r komponentin e identifikuar dhe dobĂ«sinĂ« pĂ«rkatĂ«se nĂ« bazĂ«n e tĂ« dhĂ«nave, por merr parasysh gjithashtu studimet e veta, siç Ă«shtĂ« emri i funksionit ose klasĂ«s qĂ« Ă«shtĂ« e prekshme. Mekanizmat e IQ do tĂ« shqyrtohen mĂ« vonĂ« gjatĂ« analizĂ«s sĂ« rezultateve.
Të përmbledhim disa përfundime mbi karakteristikat funksionale, si dhe të shqyrtojmë gjuhët e mbështetura për analizë:
Gjuha
Nexus IQ
Dependency Check
Dependency Track
Java
+
+
+
C/C++
+
+
â
C#
+
+
â
.Net
+
+
+
Erlang
â
â
+
JavaScript (NodeJS)
+
+
+
PHP
+
+
+
Python
+
+
+
Ruby
+
+
+
Perl
â
â
â
Scala
+
+
+
Objective C
+
+
â
Swift
+
+
â
R
+
â
â
Go
+
+
+
Kapacitetet funksionale
Kapacitetet funksionale
Nexus IQ
Dependency Check
Dependency Track
Mundësia për të siguruar kontrollin e komponentëve të përdorur në kodin burimor për pastërtinë e licencave
+
â
+
Mundësia për skanimin dhe analizën për dobësi dhe pastërtinë e licencave për imazhet Docker
+ Integrimi me Clair
â
â
Mundësia për të konfiguruar politikën e sigurisë për përdorimin e bibliotekave me kod burimor të hapur
+
â
â
Mundësia për të skanuar repo me burim të hapur për komponentë të prekshëm
+ RubyGems, Maven, NPM, Nuget, Pypi, Conan, Bower, Conda, Go, p2, R, Yum, Helm, Docker, CocoaPods, Git LFS
â
+ Hex, RubyGems, Maven, NPM, Nuget, Pypi
Prania e një grupi kërkimor të specializuar
+
â
â
Puna në një kontur të mbyllur
+
+
+
Përdorimi i bazave të dhënash të jashtme
+ Baza e të dhënave të mbyllura Sonatype
+ Sonatype OSS, NPM Public Advisors
+ Sonatype OSS, NPM Public Advisors, RetireJS, VulnDB, mbështetje për bazën e dhënash të prekshmërive
Mundësia për të filtruar komponentët me burim të hapur gjatë përpjekjes për t'i ngarkuar në konturin e zhvillimit sipas politikave të konfigurueshme
+
â
â
Rekomandime për rregullimin e prekshmërive, pranimi i lidhjeve për rregullim
+
+- (varet nga përshkrimi në bazat publike)
+- (varet nga përshkrimi në bazat publike)
Renditja e prekshmërive të zbuluara sipas rëndësisë
+
+
+
Modeli i qasjes së rolit
+
â
+
Mbështetje për ndërfaqen e komandave CLI
+
+
+- (vetëm për CycloneDX)
Ekstraktimi / renditja e prekshmërive sipas kritereve të caktuara
+
â
+
Dashboard për gjendjen e aplikacioneve
+
â
+
Generimi i raporteve në formatin PDF
+
â
â
Generimi i raporteve në formatin JSONCSV
+
+
â
Mbështetje për gjuhën ruse
â
â
â
Mundësitë e integrimit
Integrimi
Nexus IQ
Dependency Check
Dependency Track
Integrimi me LDAP/Active Directory
+
â
+
Integrimi me sistemin e integrimit të vazhdueshëm (continuous integration) Bamboo
+
â
â
Integrimi me sistemin e integrimit të vazhdueshëm (continuous integration) TeamCity
+
â
â
Integrimi me sistemin e integrimit të vazhdueshëm (continuous integration) GitLab
+
+- (në formën e një plugini për GitLab)
+
Integrimi me sistemin e integrimit të vazhdueshëm (continuous integration) Jenkins
+
+
+
Prania e plugineve për IDE
+ IntelliJ, Eclipse, Visual Studio
â
â
Mbështetje për integrimin e personalizuar përmes shërbimeve web (API) të mjetit
+
â
+
Dependency Check
Ngritja e parë
Do të ekzekutojmë Dependency Check për një aplikacion që ka për qëllim të jetë vulnerabël .
Për këtë do të përdorim :
mvn org.owasp:dependency-check-maven:checkSi rezultat, në direktorinë target do të shfaqet dependency-check-report.html.

Do ta hapim skedarin. Pas informacionit të përmbledhur mbi numrin e përgjithshëm të vulnerabiliteteve, mund të shohim informacion mbi vulnerabilitetet me nivel të lartë Severity dhe Confidence me treguesin për paketën, CPE, numrin e CVE.
Më pas ndodhet një informacion më i detajuar, në veçanti ajo mbi bazën e të cilës është marrë vendimi (evidence), pra një BOM.

Më pas vijnë CPE, PURL dhe përshkrimi i CVE. Rekomandimet për rregullimin, për habi, nuk janë të bashkangjitura për shkak të mungesës së tyre në bazën e të dhënave NVD.

Për të pasur një pamje sistematike të rezultateve të skanimit, mund të konfiguroni Nginx me cilësime minime, ose të dërgoni defektet e fituara në një sistem menaxhimi të defekteve që mbështesin lidhjet me Dependency Check. Për shembull, Defect Dojo.
Dependency Track
Instalimi
Dependency Track, nga ana e tij, është një platformë web me grafika vizuale, prandaj çështja e ruajtjes së defekteve në një zgjidhje të jashtme këtu nuk ndodhet.
Për instalimin, ka skenarët e mbështetur si: Docker, WAR, Executable WAR.
Ngritja e parë
Shkoni nĂ« URL-nĂ« e shĂ«rbimit tĂ« nisur. Hyni me admin/admin, ndryshoni emrin e pĂ«rdoruesit dhe fjalĂ«kalimin, pas tĂ« cilave do tĂ« kaloni nĂ« Dashboard. GjĂ«ja tjetĂ«r qĂ« do tĂ« bĂ«jmĂ« Ă«shtĂ« tĂ« krijojmĂ« njĂ« projekt pĂ«r njĂ« aplikacion testues nĂ« Java nĂ« Home/Projects â Create Project . Si njĂ« shembull, do tĂ« marrim DVJA.

Pasi Dependency Track mund të pranojë si të dhëna hyrëse vetëm BOM, ky BOM duhet të merret. Do të përdorim :
mvn org.cyclonedx:cyclonedx-maven-plugin:makeAggregateBomMarrim bom.xml dhe ngarkojmĂ« skedarin nĂ« projektin e krijuar DVJA â Dependeencies â Upload BOM.
Do tĂ« hyjmĂ« nĂ« Administration â Analyzers. KuptojmĂ« se kemi aktivizuar vetĂ«m Internal Analyzer, qĂ« pĂ«rfshin NVD. Do tĂ« lidhim gjithashtu Sonatype OSS Index.

Kështu, do të kemi këtë pamje për projektin tonë:

Po ashtu, në listë mund të gjeni një dobësi që i nipet Sonatype OSS:

KĂ«naqĂ«sia kryesore ishte se Dependency Track nuk pranon mĂ« raportet xml tĂ« Dependency Check. Versionet e fundit tĂ« mbĂ«shtetur pĂ«r integrim me Dependency Check ishin 1.0.0 â 4.0.2, ndĂ«rsa unĂ« testoja 5.3.2.
Këtu është (dhe ), kur kjo ishte ende e mundur.
Nexus IQ
Ngritja e parë
Instalimi i Nexus IQ bëhet nga arkivat në , por ne për këto qëllime kemi mbledhur një imazh Docker.
Pas hyrjes në konsolë, është e nevojshme të krijoni një Organizatë dhe një Aplikacion.



Siç mund të shihet, konfigurimi në rastin e IQ ndodh pak më komplikuar, pasi na nevojitet gjithashtu të krijojmë politika që zbatohen për faza të ndryshme (dev, build, stage, release). Kjo është e nevojshme për të bllokuar komponentët e prekshëm teksa avancojmë në pipeline drejt prodhimit, ose për të bllokuar sapo ata arrijnë në Nexus Repo gjatë shkarkimeve nga zhvilluesit.
Për të ndjerë diferencën midis open source dhe enterprise, do të kryejmë një skanimin të njëjtë përmes Nexus IQ, ashtu si për , duke krijuar së pari një aplikacion testimi në ndërfaqen e NexusIQ dvja-test-and-compare:
mvn com.sonatype.clm:clm-maven-plugin:evaluate -Dclm.applicationId=dvja-test-and-compare -Dclm.serverUrl= -Dclm.username= -Dclm.password=
Shkoni te URL-i për raportin e gjeneruar në ndërfaqen e web-it IQ:

Këtu mund të shihni të gjitha shkeljet e politikës me shenjat e ndryshme të rëndësisë (nga Info deri në Critical Security). Letra D përballet me komponentin që tregon se komponenti është Direct Dependency, ndërsa letra T përballet me komponentin që tregon se është Transitive Dependency, domethënë është një varësi e kaluar.
Aq më tepër, raporti nga Snyk tregon se më shumë se 70% e vulnerabiliteteve të burimeve të hapura të gjetura në Node.js, Java dhe Ruby janë në varësi të kaluara.
Nëse hapim një prej shkeljeve të politikës në Nexus IQ, mund të shohim përshkrimin e komponentit, si dhe Version Graph, i cili tregon vendndodhjen e versionit aktual në grafikun temporal, si dhe në çfarë pike vulnerabiliteti nuk është më i rrezikshëm. Lartësia e qiriut në graf gjithashtu tregon popullaritetin e përdorimit të këtij komponenti.

Nëse kaloni në sektorin e dobësive dhe zgjidhni CVE, mund të lexoni përshkrimin e kësaj dobësie, rekomandimet për zgjidhje, si dhe arsyen pse ky komponent ka rënë nën shkelje, pra prania e klasës. DiskFileitem.class.


Të përmbledhim vetëm ato që lidhen me komponentët e jashtëm Java, duke hequr komponentët js. Në paranteza do të shënojmë numrin e dobësive që janë gjetur jashtë NVD.
Total Nexus IQ:
- Përfundimet e skanuara: 62
- Dobësi të prekura: 16
- Dobësi të gjetura: 42 (8 në databazën sonatype)
Total Kontrolli i Varësive:
- Përfundimet e skanuara: 47
- Dobësi të prekura: 13
- Dobësi të gjetura: 91 (14 në sonatype oss)
Total Ndjekja e Varësive:
- Përfundimet e skanuara: 59
- Dobësi të prekura: 10
- Dobësi të gjetura: 51 (1 në sonatype oss)
Hapi tjetër është të analizojmë rezultatet e marra dhe të kuptojmë se cilat nga këto dobësi janë defekte reale dhe cilat janë alarme të rreme.
Kufizimi
Kjo rishikim nuk është një e vërtetë e padiskutueshme. Autorit nuk i ishte vënë në plan të veçonte një mjet në mesin e të tjerëve. Qëllimi i rishikimit ishte të tregonte mekanizmat e funksionimit të mjeteve SCA dhe mënyrat e verifikimit të rezultateve të tyre.
Krahasimi i rezultateve
Kushtet:
Një alarm i rremë në lidhje me dobësitë e komponentëve të jashtëm është:
- Mungesë e CVE ndaj komponentit të identifikuar
- Për shembull, nëse një dobësi identifikohet në framework-un struts2, dhe mjeti tregon për një komponent të framework-ut struts-tiles, për të cilin kjo dobësi nuk i përket, atëherë kjo është një false positive.
- Mungesë e CVE ndaj versionit të identifikuar të komponentit
- PĂ«r shembull, nĂ«se dobĂ«sia Ă«shtĂ« e lidhur me versionin python > 3.5 dhe mjeti shĂ«non versionin 2.7 si tĂ« dobĂ«t â kjo Ă«shtĂ« njĂ« false positive, sepse nĂ« tĂ« vĂ«rtetĂ« dobĂ«sia i pĂ«rket vetĂ«m degĂ«s sĂ« produktit 3.x.
- Dublim i CVE
- Për shembull, nëse SCA ka identifikuar një CVE që lejon realizimin e RCE, e më pas SCA tregon për këtë CVE për të njëjtin komponent, e cila përket produkteve Cisco të prekura nga kjo RCE. Në këtë rast do të jetë një false positive.
- Për shembull, një CVE u gjet në komponentin spring-web, dhe më pas SCA tregon për të njëjtin CVE në komponentët e tjerë të framework-ut Spring Framework, ndonëse CVE nuk ka lidhje me komponentët e tjerë. Në këtë rast do të jetë një false positive.
Objekti i studimit është zgjedhur projekti Open Source DVJA. Në studim morën pjesë vetëm komponentë java (pa js).
Rezultatet përmbledhëse
Le të kalojmë menjëherë në rezultatet e rishikimit manual të dobësive të identifikuara. Mund të njihemi me raportin e plotë për secilën CVE në Shtesë.
Rezultatet përmbledhëse për të gjitha dobësitë:
Parametri
Nexus IQ
Dependency Check
Dependency Track
Numri total i dobësive të identifikuara
42
91
51
Gabimisht të identifikuara dobësi (false positive)
2(4.76%)
62(68,13%)
29(56.86%)
Nuk janë gjetur dobësi të rëndësishme (false negative)
10
20
27
Rezultatet përmbledhëse për komponentët:
Parametri
Nexus IQ
Dependency Check
Dependency Track
Numri total i komponentëve të identifikuar
62
47
59
Numri total i komponentëve të dobët
16
13
10
Gabimisht të identifikuar komponentë të dobët (false positive)
1
5
0
Gabimisht të identifikuar komponentë të dobët (false positive)
0
6
6
Do të ndërtosh grafikat vizuale për të vlerësuar raportin e false positive dhe false negative në numrin total të dobësive. Në horizont janë shënuar komponentët dhe në vertikalen janë dobësitë e identifikuara në to.



Për krahasim, një studim i ngjashëm është kryer nga ekipi i Sonatype duke testuar një projekt prej 1531 komponentësh duke përdorur OWASP Dependency Check. Siç mund ta shohim, raporti i zhurmës ndaj sinjaleve të sakta është i ngjashëm me rezultatet tona.

Burimi:
Le të shqyrtojmë disa CVE nga rezultatet e skanimit tonë për të kuptuar arsyet për këto rezultate.
Më shumë informacion
â1
Fillimisht, do të shqyrtojmë disa pikë interesante nga Sonatype Nexus IQ.
Nexus IQ tregon për një problem me deserializimin që mund të shkaktojë RCE në Spring Framework disa herë. CVE-2016-1000027 në spring-web:3.0.5 fillimisht, dhe CVE-2011-2894 në spring-context:3.0.5 dhe spring-core:3.0.5. Në dukje duket se ka një përsëritje të dobësive për disa CVE. Sepse, nëse shikoni CVE-2016-1000027 dhe CVE-2011-2894 në bazën e të dhënave NVD, duket se gjithçka është e qartë.
Komponenti
Vulnerabiliteti
spring-web:3.0.5
CVE-2016-1000027
spring-context:3.0.5
CVE-2011-2894
spring-core:3.0.5
CVE-2011-2894
Përshkrimi nga NVD:

Përshkrimi nga NVD:

CVE-2011-2894 vetë është mjaft e njohur. Në raportin kjo CVE u njoh si një nga më të zakonshmet. Përshkrimet për CVE-2016-100027 në tërësi janë pak në NVD, dhe duket se zbatohet vetëm për Spring Framework 4.1.4. Le të shohim në dhe këtu bëhet gjithnjë e më e qartë. Nga kuptojmë se përveç dobësive në RemoteInvocationSerializingExporter në CVE-2011-2894, dobësia vërehet gjithashtu në HttpInvokerServiceExporter. Këtë na thotë Nexus IQ:

Megjithatë, asgjë e tillë nuk gjendet në NVD, çka bën që Dependency Check dhe Dependency Track të marrin false negative.
Po ashtu, nga përshkrimi i CVE-2011-2894 mund të kuptohet se dobësia ndodhet vërtetë si në spring-context:3.0.5 ashtu edhe në spring-core:3.0.5. Një konfirmim për këtë mund të gjendet në artikullin nga ai që e zgjodhi këtë dobësi.
â2
Komponenti
Vulnerabiliteti
Rezultati
struts2-core:2.3.30
CVE-2016-4003
FALSE
Nëse studiojmë dobësinë CVE-2016-4003, do të kuptojmë se ajo u rregullua që në versionin 2.3.28, megjithatë Nexus IQ na informon për të. Në përshkrimin e dobësisë ka një shënim:

Pra, dobësia ekziston vetëm në lidhje me versionin e ndarë të JRE, për të cilin vendosën të na paralajmërojnë. Megjithatë, e konsiderojmë këtë si një False Positive, ndonëse jo më të frikshme.
â 3
Komponenti
Vulnerabiliteti
Rezultati
xwork-core:2.3.30
CVE-2017-9804
TRUE
xwork-core:2.3.30
CVE-2017-7672
FALSE
Nëse shikojmë përshkrimin për CVE-2017-9804 dhe CVE-2017-7672, do të kuptojmë se problemi qëndron në klasën URLValidator, dhe CVE-2017-9804 ka rrjedhur nga CVE-2017-7672. Prania e dobësisë së dytë nuk sjell asnjë informacion të dobishëm përveç faktit që serioziteti i saj u rrit në High, prandaj mund ta konsiderojmë këtë si zhurmë të tepërt.
Më përgjithësi, nuk ka pasur false positive të tjera për Nexus IQ.
â4
Ka disa pika që e veçojnë IQ-në nga zgjidhjet e tjera.
Komponenti
Vulnerabiliteti
Rezultati
spring-web:3.0.5
CVE-2020-5398
TRUE
CVE në NVD njofton se ajo është e zbatueshme vetëm për versionet 5.2.x deri 5.2.3, 5.1.x deri 5.1.13, dhe versionet 5.0.x deri 5.0.16, megjithatë, nëse e shohim përshkrimin e CVE në Nexus IQ, do të shohim se:
Njoftimi për Deviacionin e Këshillave: Ekipi i kërkimeve të sigurisë Sonatype zbuloi se kjo dobësi u prezantua në versionin 3.0.2.RELEASE dhe jo në 5.0.x siç thuhet në njoftim.
Pas kësaj vjen PoC për këtë vulnerabilitet, i cili njofton se ai është prezent në versionin 3.0.5.
False negative dërgohet te Dependency Check dhe Dependency Track.
Nr. 5
Le të shohim false positive për Dependency Check dhe Dependency Track.
Dependency Check veçohet veçmas pĂ«r faktin se reflekton ato CVE qĂ« i pĂ«rkasin tĂ« gjithĂ« strukturĂ«s nĂ« NVD nĂ« ato komponente ku kĂ«to CVE nuk janĂ« tĂ« aplikueshme. Ky Ă«shtĂ« rasti i CVE-2012-0394, CVE-2013-2115, CVE-2014-0114, CVE-2015-0899, CVE-2015-2992, CVE-2016-1181, CVE-2016-1182, qĂ« Dependency Check 'i lidh' me struts-taglib:1.3.8 dhe struts-tiles-1.3.8. KĂ«to komponente nuk kanĂ« asgjĂ« tĂ« pĂ«rbashkĂ«t me atĂ« qĂ« Ă«shtĂ« pĂ«rshkruar nĂ« CVE â pĂ«rpunimi i kĂ«rkesave, validimi i faqeve dhe kĂ«shtu me radhĂ«. Kjo Ă«shtĂ« pĂ«r shkak se ajo qĂ« Ă«shtĂ« e pĂ«rbashkĂ«t midis kĂ«tyre CVE-ve dhe komponenteve Ă«shtĂ« vetĂ«m framework-u, pĂ«r shkak tĂ« cili Dependency Check e konsideroi kĂ«tĂ« si njĂ« vulnerabilitet.
Situata është e njëjtë me spring-tx:3.0.5, dhe një situatë e ngjashme me struts-core:1.3.8. Për struts-core, Dependency Check dhe Dependency Track gjetën shumë vulnerabilitete që në të vërtetë janë të aplikueshme në struts2-core, i cili në esencë është një framework i veçantë. Në këtë rast, Nexus IQ e kuptoi saktë situatën dhe në ato CVE që publikoi, e theksoi se struts-core kishte përfunduar jetën dhe ishte e nevojshme të kalonte në struts2-core.
Nr. 6
Në disa situata, është e padrejtë të interpretohet gabimi i qartë nga Dependency Check dhe Dependency Track. Veçanërisht CVE-2013-4152, CVE-2013-6429, CVE-2013-6430, CVE-2013-7315, CVE-2014-0054, CVE-2014-0225, CVE-2014-0225, të cilat Dependency Check dhe Dependency Track i renditën në spring-core:3.0.5, në të vërtetë i përkasin spring-web:3.0.5. Megjithatë, disa nga këto CVE janë gjetur edhe në Nexus IQ, përkundër kësaj IQ i identifikoi saktë ato në një komponent tjetër. Faktin që këto vulnerabilitete nuk u gjetën në spring-core, nuk do të thotë se ato nuk ekzistojnë në mënyrë të përgjithshme në framework, dhe mjetet open source treguan korrektësisht këto vulnerabilitete (thjesht gabuan pak).
Përfundimet
Siç mund ta shohim, përcaktimi i besueshmërisë së vulnerabiliteteve të identifikuara nga rishikimi manual nuk jep rezultate të qarta, për shkak të momenteve të diskutueshme që lindin. Rezultatet tregojnë se zgjidhja Nexus IQ ka nivelin më të ulët të alarmeve false dhe saktësinë më të madhe.
Në radhë të parë, ky është një rezultat i ekipit të Sonatype që ka zgjeruar përshkrimin për secilën dobësi CVE nga NVD në bazat e të dhënave të tij, duke saktësuar deri në klasën apo funksionin e dobësisë për secilën version të komponentëve, duke kryer hulumtime shtesë (p.sh., duke verifikuar dobësitë në versionet më të vjetra të softuerit).
Një ndikim i rëndësishëm në rezultate kanë edhe ato dobësi që nuk janë përfshirë në NVD, por megjithatë janë të pranishme në bazën e të dhënave të Sonatype me shënimin SONATYPE. Sipas raportit, 45% e dobësive të zbuluara me burim të hapur nuk raportohen në NVD. Sipas bazës së të dhënave WhiteSource, vetëm 29% e të gjitha dobësive me burim të hapur, të regjistruara jashtë NVD, përfundojë publikohen atje, prandaj është kaq e rëndësishme të kërkoni dobësi gjithashtu në burime të tjera.
Si rezultat, Dependency Check jep një sasi të madhe zhurmë, duke humbur një pjesë të komponentëve të dobësishëm. Dependency Track jep më pak zhurmë dhe identifikon një numër më të madh komponentësh, që vizualisht nuk dëmton syrin në ndërfaqen e internetit.
Megjithatë, praktika tregon se open source duhet të bëhet hapi i parë drejt një DevSecOps të pjekur. E para që duhet të mendohet për integrimin e SCA në zhvillim janë proceset, konkretisht mendimi së bashku me menaxhimin dhe departamentet përkatëse se si duhet të duken proceset ideale në organizatën tuaj. Mund të ndodhë që për organizatën tuaj, në fillim, Dependency Check ose Dependency Track të plotësojnë të gjitha nevojat e biznesit, dhe zgjidhjet Enterprise të jenë një vazhdim logjik për shkak të rritjes së kompleksitetit të aplikacioneve që zhvillohen.
Aplikacioni A. Rezultatet përkatëse ndaj komponenteve
Shkurtimisht:
- High â vulnerabilitete tĂ« nivelit tĂ« lartĂ« dhe kritik nĂ« komponent
- Medium â Vulnerabilitete tĂ« nivelit tĂ« mesĂ«m tĂ« kritikĂ«s nĂ« komponent
- TRUE â Vulnerabilitet i identifikuar saktĂ« (True positive issue)
- FALSE â Alarm i rremĂ« (False positive issue)
Komponenti
Nexus IQ
Dependency Check
Dependency Track
Rezultati
dom4j: 1.6.1
E Lartë
E Lartë
E Lartë
TRUE
log4j-core: 2.3
E Lartë
E Lartë
E Lartë
TRUE
log4j: 1.2.14
E Lartë
E Lartë
â
TRUE
commons-collections:3.1
E Lartë
E Lartë
E Lartë
TRUE
commons-fileupload:1.3.2
E Lartë
E Lartë
E Lartë
TRUE
commons-beanutils:1.7.0
E Lartë
E Lartë
E Lartë
TRUE
commons-codec:1:10
Medium
â
â
TRUE
mysql-connector-java:5.1.42
E Lartë
E Lartë
E Lartë
TRUE
spring-expression:3.0.5
E Lartë
komponenti nuk u gjet
TRUE
spring-web:3.0.5
E Lartë
komponenti nuk u gjet
E Lartë
TRUE
spring-context:3.0.5
Medium
komponenti nuk u gjet
â
TRUE
spring-core:3.0.5
Medium
E Lartë
E Lartë
TRUE
struts2-config-browser-plugin:2.3.30
Medium
â
â
TRUE
spring-tx:3.0.5
â
E Lartë
â
FALSE
struts-core:1.3.8
E Lartë
E Lartë
E Lartë
TRUE
xwork-core: 2.3.30
E Lartë
â
â
TRUE
struts2-core: 2.3.30
E Lartë
E Lartë
E Lartë
TRUE
struts-taglib:1.3.8
â
E Lartë
â
FALSE
struts-tiles-1.3.8
â
E Lartë
â
FALSE
Shtesa B. Rezultatet në lidhje me dobësitë
Shkurtimisht:
- High â vulnerabilitete tĂ« nivelit tĂ« lartĂ« dhe kritik nĂ« komponent
- Medium â Vulnerabilitete tĂ« nivelit tĂ« mesĂ«m tĂ« kritikĂ«s nĂ« komponent
- TRUE â Vulnerabilitet i identifikuar saktĂ« (True positive issue)
- FALSE â Alarm i rremĂ« (False positive issue)
Komponenti
Nexus IQ
Dependency Check
Dependency Track
Serioziteti
Rezultati
Komentari
dom4j: 1.6.1
CVE-2018-1000632
CVE-2018-1000632
CVE-2018-1000632
E Lartë
TRUE
CVE-2020-10683
CVE-2020-10683
CVE-2020-10683
E Lartë
TRUE
log4j-core: 2.3
CVE-2017-5645
CVE-2017-5645
CVE-2017-5645
E Lartë
TRUE
CVE-2020-9488
CVE-2020-9488
CVE-2020-9488
I ulët
TRUE
log4j: 1.2.14
CVE-2019-17571
CVE-2019-17571
â
E Lartë
TRUE
â
CVE-2020-9488
â
I ulët
TRUE
SONATYPE-2010-0053
â
â
E Lartë
TRUE
commons-collections:3.1
â
CVE-2015-6420
CVE-2015-6420
E Lartë
FALSE
Përsërit RCE(OSSINDEX)
â
CVE-2017-15708
CVE-2017-15708
E Lartë
FALSE
Përsërit RCE(OSSINDEX)
SONATYPE-2015-0002
RCE (OSSINDEX)
RCE(OSSINDEX)
E Lartë
TRUE
commons-fileupload:1.3.2
CVE-2016-1000031
CVE-2016-1000031
CVE-2016-1000031
E Lartë
TRUE
SONATYPE-2014-0173
â
â
Medium
TRUE
commons-beanutils:1.7.0
CVE-2014-0114
CVE-2014-0114
CVE-2014-0114
E Lartë
TRUE
â
CVE-2019-10086
CVE-2019-10086
E Lartë
FALSE
Dobësia është e aplikueshme vetëm për versionet 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
E Lartë
TRUE
CVE-2019-2692
CVE-2019-2692
â
Medium
TRUE
â
CVE-2020-2875
â
Medium
FALSE
E njëjta dobësi si CVE-2019-2692, por me shtesën 'sulmet mund të ndikojnë ndjeshëm në produkte të tjera'
â
CVE-2017-15945
â
E Lartë
FALSE
Nuk është e lidhur me mysql-connector-java
â
CVE-2020-2933
â
I ulët
FALSE
Dublikat për CVE-2020-2934
CVE-2020-2934
CVE-2020-2934
â
Medium
TRUE
spring-expression:3.0.5
CVE-2018-1270
komponenti nuk u gjet
â
E Lartë
TRUE
CVE-2018-1257
â
â
Medium
TRUE
spring-web:3.0.5
CVE-2016-1000027
komponenti nuk u gjet
â
E Lartë
TRUE
CVE-2014-0225
â
CVE-2014-0225
E Lartë
TRUE
CVE-2011-2730
â
â
E Lartë
TRUE
â
â
CVE-2013-4152
Medium
TRUE
CVE-2018-1272
â
â
E Lartë
TRUE
CVE-2020-5398
â
â
E Lartë
TRUE
Shembulli shqetësues në mbështetje të IQ: 'Ekipa e kërkimit të sigurisë së Sonatype zbuloi se kjo dobësi ishte futur në versionin 3.0.2.RELEASE dhe jo 5.0.x siç është deklaruar në njoftim.'
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
komponenti nuk u gjet
â
Medium
TRUE
spring-core:3.0.5
â
CVE-2011-2730
CVE-2011-2730
E Lartë
TRUE
CVE-2011-2894
CVE-2011-2894
CVE-2011-2894
Medium
TRUE
â
â
CVE-2013-4152
Medium
FALSE
Dublikat e kësaj dobësie në spring-web
â
CVE-2013-4152
â
Medium
FALSE
Dobësia është e lidhur me komponentin spring-web
â
CVE-2013-6429
CVE-2013-6429
Medium
FALSE
Dobësia është e lidhur me komponentin spring-web
â
CVE-2013-6430
â
Medium
FALSE
Dobësia është e lidhur me komponentin spring-web
â
CVE-2013-7315
CVE-2013-7315
Medium
FALSE
SPLIT nga CVE-2013-4152. + Dobësia është e lidhur me komponentin spring-web
â
CVE-2014-0054
CVE-2014-0054
Medium
FALSE
Dobësia është e lidhur me komponentin spring-web
â
CVE-2014-0225
â
E Lartë
FALSE
Dobësia është e lidhur me komponentin spring-web
â
â
CVE-2014-0225
E Lartë
FALSE
Dublikat e kësaj dobësie në spring-web
â
CVE-2014-1904
CVE-2014-1904
Medium
FALSE
Dobësia është e lidhur me komponentin spring-web-mvc
â
CVE-2014-3625
CVE-2014-3625
Medium
FALSE
Dobësia është e lidhur me komponentin spring-web-mvc
â
CVE-2016-9878
CVE-2016-9878
E Lartë
FALSE
Dobësia është e lidhur me komponentin spring-web-mvc
â
CVE-2018-1270
CVE-2018-1270
E Lartë
FALSE
Për spring-expression / spring-messages
â
CVE-2018-1271
CVE-2018-1271
Medium
FALSE
Dobësia është e lidhur me komponentin spring-web-mvc
â
CVE-2018-1272
CVE-2018-1272
E Lartë
TRUE
CVE-2014-3578
CVE-2014-3578 (OSSINDEX)
CVE-2014-3578
Medium
TRUE
SONATYPE-2015-0327
â
â
I ulët
TRUE
struts2-config-browser-plugin:2.3.30
SONATYPE-2016-0104
â
â
Medium
TRUE
spring-tx:3.0.5
â
CVE-2011-2730
â
E Lartë
FALSE
Dobësia nuk është e lidhur me spring-tx
â
CVE-2011-2894
â
E Lartë
FALSE
Dobësia nuk është e lidhur me spring-tx
â
CVE-2013-4152
â
Medium
FALSE
Dobësia nuk është e lidhur me spring-tx
â
CVE-2013-6429
â
Medium
FALSE
Dobësia nuk është e lidhur me spring-tx
â
CVE-2013-6430
â
Medium
FALSE
Dobësia nuk është e lidhur me spring-tx
â
CVE-2013-7315
â
Medium
FALSE
Dobësia nuk është e lidhur me spring-tx
â
CVE-2014-0054
â
Medium
FALSE
Dobësia nuk është e lidhur me spring-tx
â
CVE-2014-0225
â
E Lartë
FALSE
Dobësia nuk është e lidhur me spring-tx
â
CVE-2014-1904
â
Medium
FALSE
Dobësia nuk është e lidhur me spring-tx
â
CVE-2014-3625
â
Medium
FALSE
Dobësia nuk është e lidhur me spring-tx
â
CVE-2016-9878
â
E Lartë
FALSE
Dobësia nuk është e lidhur me spring-tx
â
CVE-2018-1270
â
E Lartë
FALSE
Dobësia nuk është e lidhur me spring-tx
â
CVE-2018-1271
â
Medium
FALSE
Dobësia nuk është e lidhur me spring-tx
â
CVE-2018-1272
â
Medium
FALSE
Dobësia nuk është e lidhur me spring-tx
struts-core:1.3.8
â
CVE-2011-5057 (OSSINDEX)
Medium
FALĂS
Dobësia e Struts 2
â
CVE-2012-0391 (OSSINDEX)
CVE-2012-0391
E Lartë
FALSE
Dobësia e Struts 2
â
CVE-2014-0094 (OSSINDEX)
CVE-2014-0094
Medium
FALSE
Dobësia e Struts 2
â
CVE-2014-0113 (OSSINDEX)
CVE-2014-0113
E Lartë
FALSE
Dobësia e Struts 2
CVE-2016-1182
3VE-2016-1182
â
E Lartë
TRUE
â
â
CVE-2011-5057
Medium
FALSE
Dobësia e Struts 2
â
CVE-2012-0392 (OSSINDEX)
CVE-2012-0392
E Lartë
FALSE
Dobësia e Struts 2
â
CVE-2012-0393 (OSSINDEX)
CVE-2012-0393
Medium
FALSE
Dobësia e Struts 2
CVE-2015-0899
CVE-2015-0899
â
E Lartë
TRUE
â
CVE-2012-0394
CVE-2012-0394
Medium
FALSE
Dobësia e Struts 2
â
CVE-2012-0838 (OSSINDEX)
CVE-2012-0838
E Lartë
FALSE
Dobësia e Struts 2
â
CVE-2013-1965 (OSSINDEX)
CVE-2013-1965
E Lartë
FALSE
Dobësia e Struts 2
â
CVE-2013-1966 (OSSINDEX)
CVE-2013-1966
E Lartë
FALĂS
Dobësia e Struts 2
â
CVE-2013-2115
CVE-2013-2115
E Lartë
FALĂS
Dobësia e Struts 2
â
CVE-2013-2134 (OSSINDEX)
CVE-2013-2134
E Lartë
FALĂS
Dobësia e Struts 2
â
CVE-2013-2135 (OSSINDEX)
CVE-2013-2135
E Lartë
FALĂS
Dobësia e Struts 2
CVE-2014-0114
CVE-2014-0114
â
E Lartë
TRUE
â
CVE-2015-2992
CVE-2015-2992
Medium
FALSE
Dobësia e Struts 2
â
CVE-2016-0785 (OSSINDEX)
CVE-2016-0785
E Lartë
FALSE
Dobësia e Struts 2
CVE-2016-1181
CVE-2016-1181
â
E Lartë
TRUE
â
CVE-2016-4003 (OSSINDEX)
CVE-2016-4003
E Lartë
FALSE
Dobësia e Struts 2
xwork-core:2.3.30
CVE-2017-9804
â
â
E Lartë
TRUE
SONATYPE-2017-0173
â
â
E Lartë
TRUE
CVE-2017-7672
â
â
E Lartë
FALSE
Dublimi për CVE-2017-9804
SONATYPE-2016-0127
â
â
E Lartë
TRUE
struts2-core:2.3.30
â
CVE-2016-6795
CVE-2016-6795
E Lartë
TRUE
â
CVE-2017-9787
CVE-2017-9787
E Lartë
TRUE
â
CVE-2017-9791
CVE-2017-9791
E Lartë
TRUE
â
CVE-2017-9793
â
E Lartë
FALSE
Dublikati për CVE-2018-1327
â
CVE-2017-9804
â
E Lartë
TRUE
â
CVE-2017-9805
CVE-2017-9805
E Lartë
TRUE
CVE-2016-4003
â
â
Medium
FALSE
I aplikueshëm për Apache Struts 2.x deri në 2.3.28, ndryshe nga kjo versioni 2.3.30. Megjithatë, sipas përshkrimit, CVE vepron në çdo version të Struts 2, nëse përdoret JRE 1.7 dhe më pak. Duket se na kanë mbrojtur, por duket më shumë si FALSE
â
CVE-2018-1327
CVE-2018-1327
E Lartë
TRUE
CVE-2017-5638
CVE-2017-5638
CVE-2017-5638
E Lartë
TRUE
Ajo është pikërisht dobësia që përdorën hakerët në Equifax në vitin 2017
CVE-2017-12611
CVE-2017-12611
â
E Lartë
TRUE
CVE-2018-11776
CVE-2018-11776
CVE-2018-11776
E Lartë
TRUE
struts-taglib:1.3.8
â
CVE-2012-0394
â
Medium
FALSE
Për struts2-core
â
CVE-2013-2115
â
E Lartë
FALSE
Për struts2-core
â
CVE-2014-0114
â
E Lartë
FALSE
Për commons-beanutils
â
CVE-2015-0899
â
E Lartë
FALSE
Nuk i përket taglib
â
CVE-2015-2992
â
Medium
FALSE
I përket struts2-core
â
CVE-2016-1181
â
E Lartë
FALSE
Nuk i përket taglib
â
CVE-2016-1182
â
E Lartë
FALSE
Nuk i përket taglib
struts-tiles-1.3.8
â
CVE-2012-0394
â
Medium
FALSE
Për struts2-core
â
CVE-2013-2115
â
E Lartë
FALSE
Për struts2-core
â
CVE-2014-0114
â
E Lartë
FALSE
Nën commons-beanutils
â
CVE-2015-0899
â
E Lartë
FALSE
Nuk i përket tiles
â
CVE-2015-2992
â
Medium
FALSE
Për struts2-core
â
CVE-2016-1181
â
E Lartë
FALSE
Nuk i përket taglib
â
CVE-2016-1182
â
E Lartë
FALSE
Nuk i përket taglib
Burimi: habr.com
