In wichtich ûnderdiel fan kwetsberensbehear is om de supply chain fan 'e softwarekomponinten dy't moderne systemen útmeitsje, yngeand te begripen en te befeiligjen. Agile en DevOps-teams meitsje wiidweidich gebrûk fan iepen boarne bibleteken en kaders om ûntwikkelingstiid en kosten te ferminderjen. Mar dizze medalje hat ek in neidiel: de kâns om oare minsken har flaters en kwetsberens te erven.
Fansels moat it team der wis fan wêze om te witten hokker iepen boarne-komponinten binne opnommen yn har applikaasjes, soargje dat bekende betroubere ferzjes wurde downloade fan bekende betroubere boarnen, en bywurke ferzjes fan komponinten downloade neidat nij ûntdutsen kwetsberens binne patched.
Yn dizze post sille wy sjen nei it brûken fan OWASP Dependency Check om in build ôf te brekken as it serieuze problemen mei jo koade detektearret.
Yn it boek "Development Security in Agile Projects" wurdt it sa beskreaun. OWASP Dependency Check is in fergese scanner dy't alle iepen boarne-komponinten katalogisearret dy't brûkt wurde yn in applikaasje en de kwetsberens toant dy't se befetsje. D'r binne ferzjes foar Java, .NET, Ruby (gemspec), PHP (komponist), Node.js en Python, lykas ek foar guon C/C++-projekten. Ofhinklikenskontrôle yntegreart mei gewoane bouwynstruminten, ynklusyf Ant, Maven en Gradle, en trochgeande yntegraasjeservers lykas Jenkins.
Dependency Check rapportearret alle komponinten mei bekende kwetsberens fan NIST's National Vulnerability Database (NVD) en wurdt bywurke mei gegevens fan NVD-nijsfeeds.
Gelokkich kin dit alles automatysk dien wurde mei helpmiddels lykas it OWASP Dependency Check-projekt of kommersjele programma's lykas , , , Sonatype of .
Dizze ark kinne wurde opnaam yn buildpipelines om automatysk iepen boarne-ôfhinklikens te ynventarisearjen, ferâldere ferzjes fan biblioteken en biblioteken te identifisearjen dy't bekende kwetsberens befetsje, en builds ôfbrekke as serieuze problemen ûntdutsen wurde.
OWASP Ofhinklikens kontrôle
Om te testen en te demonstrearjen hoe't Dependency Check wurket, brûke wy dit repository .
Om it HTML-rapport te besjen, moatte jo de nginx-webserver op jo gitlab-runner konfigurearje.
Foarbyld fan in minimale nginx-konfiguraasje:
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 {
}
}Oan 'e ein fan' e gearkomste kinne jo dizze foto sjen:

Folgje de keppeling en sjoch it rapport Ofhinklikenskontrôle.
De earste skermôfbylding is it boppeste diel fan it rapport mei in gearfetting.

Twadde skermprint details CVE-2017-5638. Hjir sjogge wy it CVE-nivo en keppelings nei eksploaten.

De tredde skermprint is details fan log4j-api-2.7.jar. Wy sjogge dat CVE-nivo's 7.5 en 9.8 binne.

De fjirde skermprint is de details fan commons-fileupload-1.3.2.jar. Wy sjogge dat CVE-nivo's 7.5 en 9.8 binne.

As jo gitlab-siden wolle brûke, dan sil it net wurkje - in fallen taak sil gjin artefakt meitsje.
Foarbyld hjir .
Bouwe útfier: gjin artefakten, ik sjoch it html-rapport net. Jo moatte besykje Artifact: altyd

Regeljen fan it nivo fan CVE-kwetsberheden
De wichtichste line yn it gitlab-ci.yaml-bestân:
mvn $MAVEN_CLI_OPTS test org.owasp:dependency-check-maven:check -DfailBuildOnCVSS=7Mei de parameter failBuildOnCVSS kinne jo it nivo fan CVE-kwetsberheden oanpasse wêrop jo moatte reagearje.
It downloaden fan de NIST Vulnerability Database (NVD) fan it ynternet
Hawwe jo opfallen dat NIST de NIST kwetsberensdatabases (NVD) konstant downloadt fan it ynternet:

Om te downloaden, kinne jo it nut brûke
Litte wy it ynstallearje en starte.
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 uploadt de NIST JSON CVE nei /var/www/repos/nist-data-mirror/ by it opstarten en fernijt de gegevens elke 24 oeren.
Om CVE JSON NIST te downloaden, moatte jo de nginx-webserver konfigurearje (bygelyks op jo gitlab-runner).
Foarbyld fan in minimale nginx-konfiguraasje:
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 net in lange rigel te meitsjen wêr't mvn wurdt lansearre, sille wy de parameters ferpleatse yn in aparte fariabele DEPENDENCY_OPTS.
De lêste minimale konfiguraasje .gitlab-ci.yml sil der sa útsjen:
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
Boarne: www.habr.com
