Een belangrijk onderdeel van kwetsbaarheidsbeheer is het goed begrijpen en veiligstellen van de toeleveringsketen van de softwarecomponenten waaruit moderne systemen zijn opgebouwd. Teams die agile methodologieƫn en DevOps praktiseren, maken veel gebruik van open-source bibliotheken en frameworks om de ontwikkeltijd en -kosten te verlagen. Maar deze medaille heeft ook een keerzijde: de kans om erfenissen van fouten en kwetsbaarheden van anderen op te lopen.
Het is duidelijk dat het team moet weten welke open-sourcecomponenten in hun applicaties zijn opgenomen, erop toe moet zien dat betrouwbare versies uit betrouwbare bronnen worden gedownload en bijgewerkte versies van componenten moeten worden geladen na de ontdekking van nieuwe kwetsbaarheden.
In deze post bekijken we het gebruik van OWASP Dependency Check om de build te onderbreken in geval van ernstige problemen met uw code.
In het boek āBeveiliging van ontwikkeling in Agile-projectenā wordt als volgt beschreven. OWASP Dependency Check is een gratis scanner die alle gebruikte open-sourcecomponenten in de applicatie catalogiseert en eventuele kwetsbaarheden toont. Er zijn versies beschikbaar voor Java, .NET, Ruby (gemspec), PHP (composer), Node.js en Python, evenals voor enkele projecten in C/C++. Dependency Check integreert met gangbare buildtools, waaronder Ant, Maven en Gradle, en continue integratieservers zoals Jenkins.
Dependency Check rapporteert over alle componenten met bekende kwetsbaarheden uit de Nationale kwetsbaarhedendatabase (NVD) NIST en wordt bijgewerkt op basis van gegevens uit NVD-nieuwskanalen.
Gelukkig kan dit alles automatisch worden uitgevoerd met behulp van tools zoals het OWASP Dependency Check-project of commerciƫle programma's zoals , , , van Sonatype of .
Deze tools kunnen in build-pijplijnen worden opgenomen om automatisch een inventaris van open-source afhankelijkheden op te stellen, verouderde bibliotheken en bibliotheken met bekende kwetsbaarheden te identificeren en de build te onderbreken in het geval van ernstige problemen.
OWASP Dependency Check
Voor het testen en demonstreren van de werking van Dependency Check gebruiken we deze repository .
Voor het bekijken van het HTML-rapport moet je de webserver nginx 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 build zie je het volgende beeld:

We gaan naar de link en zien het rapport Dependency Check.
De eerste screenshot toont het bovenste deel van het rapport met een kort overzicht.

De tweede screenshot toont de details van CVE-2017-5638. Hier zien we het CVE-niveau en links naar exploits.

De derde screenshot toont de details van log4j-api-2.7.jar. We zien dat de CVE-niveaus 7.5 en 9.8 zijn.

De vierde screenshot toont de details van commons-fileupload-1.3.2.jar. We zien dat de CVE-niveaus 7.5 en 9.8 zijn.

Als je gitlab pages wilt gebruiken, dan is dat niet mogelijk ā een mislukte taak zal geen artifact creĆ«ren.
Een voorbeeld hiervan .
Build-uitvoer: geen artifacts, HTML-rapport niet zichtbaar. Probeer Artifact: always.

Regulering van het CVE-niveau van kwetsbaarheden
De belangrijkste regel in het bestand gitlab-ci.yaml:
mvn $MAVEN_CLI_OPTS test org.owasp:dependency-check-maven:check -DfailBuildOnCVSS=7Met de parameter failBuildOnCVSS kun je het CVE-niveau van kwetsbaarheden reguleren waar op gereageerd moet worden.
Downloaden van de kwetsbaarheid database (NVD) NIST van het internet
Je merkt dat er voortdurend databases met kwetsbaarheden (NVD) NIST van het internet worden gedownload:

Voor het downloaden kun je 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-mirrorNist-data-mirror downloadt CVE JSON NIST naar /var/www/repos/nist-data-mirror/ bij het starten en update de gegevens elke 24 uur.
Voor het downloaden van CVE JSON NIST moet je de webserver nginx 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 uitgevoerd, halen we de parameters uit in een aparte variabele DEPENDENCY_OPTS.
De uiteindelijke minimale configuratie .gitlab-ci.yml ziet er zo uit:
variabelen:
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:
paden:
- .m2/repository
verifieren:
fase: 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: habr.com
