Een belangrijk onderdeel van kwetsbaarheidsbeheer is het grondig begrijpen en beveiligen van de toeleveringsketen van de softwarecomponenten waaruit moderne systemen bestaan. Agile- en DevOps-teams maken uitgebreid gebruik van open source-bibliotheken en -frameworks om de ontwikkelingstijd en -kosten te verminderen. Maar deze medaille heeft ook een keerzijde: de mogelijkheid om de fouten en kwetsbaarheden van anderen te erven.
Uiteraard moet het team er zeker van zijn dat het weet welke open source-componenten in zijn applicaties zijn opgenomen, ervoor moet zorgen dat bekende betrouwbare versies worden gedownload van bekende betrouwbare bronnen, en bijgewerkte versies van componenten moet downloaden nadat nieuw ontdekte kwetsbaarheden zijn gepatcht.
In dit bericht zullen we kijken naar het gebruik van OWASP Dependency Check om een build af te breken als er ernstige problemen met uw code worden gedetecteerd.
In het boek “Development Security in Agile Projects” wordt het als volgt beschreven. OWASP Dependency Check is een gratis scanner die alle open source-componenten die in een applicatie worden gebruikt catalogiseert en de kwetsbaarheden toont die ze bevatten. Er zijn versies voor Java, .NET, Ruby (gemspec), PHP (componist), Node.js en Python, maar ook voor sommige C/C++-projecten. Dependency Check kan worden geïntegreerd met veelgebruikte buildtools, waaronder Ant, Maven en Gradle, en continue integratieservers zoals Jenkins.
Dependency Check rapporteert alle componenten met bekende kwetsbaarheden uit de National Vulnerability Database (NVD) van NIST en wordt bijgewerkt met gegevens uit NVD-nieuwsfeeds.
Gelukkig kan dit allemaal automatisch worden gedaan met behulp van tools zoals het OWASP Dependency Check-project of commerciële programma's zoals
Deze tools kunnen worden opgenomen in build-pijplijnen om open source-afhankelijkheden automatisch te inventariseren, verouderde versies van bibliotheken en bibliotheken met bekende kwetsbaarheden te identificeren, en builds af te breken als er ernstige problemen worden gedetecteerd.
OWASP-afhankelijkheidscontrole
Om te testen en te demonstreren hoe Dependency Check werkt, gebruiken we deze repository
Om het HTML-rapport te bekijken, moet je de nginx-webserver op je gitlab-runner configureren.
Voorbeeld van een minimale nginx-configuratie:
server {
listen 9999;
listen [::]:9999;
server_name _;
root /home/gitlab-runner/builds;
location / {
autoindex on;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
Aan het einde van de montage ziet u deze foto:
Volg de link en bekijk het rapport Dependency Check.
De eerste schermafbeelding is het bovenste gedeelte van het rapport met een samenvatting.
Tweede screenshotdetails CVE-2017-5638. Hier zien we het CVE-niveau en links naar exploits.
De derde schermafbeelding bevat details van log4j-api-2.7.jar. We zien dat de CVE-niveaus 7.5 en 9.8 zijn.
De vierde schermafbeelding zijn de details van commons-fileupload-1.3.2.jar. We zien dat de CVE-niveaus 7.5 en 9.8 zijn.
Als je gitlab-pagina's wilt gebruiken, zal het niet werken - een gevallen taak zal geen artefact creëren.
Voorbeeld hier
Bouw uitvoer: geen artefacten, ik zie het HTML-rapport niet. Probeer Artefact: altijd
Het reguleren van het niveau van CVE-kwetsbaarheden
De belangrijkste regel in het gitlab-ci.yaml bestand:
mvn $MAVEN_CLI_OPTS test org.owasp:dependency-check-maven:check -DfailBuildOnCVSS=7
Met de parameter failBuildOnCVSS kunt u het niveau van CVE-kwetsbaarheden aanpassen waarop u moet reageren.
De NIST Vulnerability Database (NVD) downloaden van internet
Is het u opgevallen dat NIST voortdurend de NIST-kwetsbaarheidsdatabases (NVD) downloadt van internet:
Om te downloaden kunt u het hulpprogramma gebruiken
Laten we het installeren en starten.
yum -y install yum-plugin-copr
yum copr enable antonpatsev/nist_data_mirror_golang
yum -y install nist-data-mirror
systemctl start nist-data-mirror
Nist-data-mirror uploadt de NIST JSON CVE naar /var/www/repos/nist-data-mirror/ bij het opstarten en werkt de gegevens elke 24 uur bij.
Om CVE JSON NIST te downloaden, moet je de nginx-webserver configureren (bijvoorbeeld op je gitlab-runner).
Voorbeeld van een minimale nginx-configuratie:
server {
listen 12345;
listen [::]:12345;
server_name _;
root /var/www/repos/nist-data-mirror/;
location / {
autoindex on;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
Om geen lange regel te maken waar mvn wordt gestart, verplaatsen we de parameters naar een aparte variabele DEPENDENCY_OPTS.
De uiteindelijke minimale configuratie .gitlab-ci.yml zal er als volgt uitzien:
variables:
MAVEN_OPTS: "-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true"
MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true"
DEPENDENCY_OPTS: "-DfailBuildOnCVSS=7 -DcveUrlModified=http://localhost:12345/nvdcve-1.1-modified.json.gz -DcveUrlBase=http://localhost:12345/nvdcve-1.1-%d.json.gz"
cache:
paths:
- .m2/repository
verify:
stage: test
script:
- set +e
- mvn $MAVEN_CLI_OPTS install org.owasp:dependency-check-maven:check $DEPENDENCY_OPTS || EXIT_CODE=$?
- export PATH_WITHOUT_HOME=$(pwd | sed -e "s//home/gitlab-runner/builds//g")
- echo "************************* URL Dependency-check-report.html *************************"
- echo "http://$HOSTNAME:9999$PATH_WITHOUT_HOME/target/dependency-check-report.html"
- set -e
- exit ${EXIT_CODE}
tags:
- shell
Bron: www.habr.com