En viktig del av sÄrbarhetshantering Àr att förstÄ och sÀkerstÀlla sÀkerheten i leveranskedjan för mjukvarukomponenter som moderna system bygger pÄ. Team som praktiserar agila metoder och DevOps anvÀnder i stor utstrÀckning bibliotek och ramverk med öppen kÀllkod för att minska utvecklingstid och kostnader. Men denna medalj har ocksÄ en baksida: risken att Àrva andras misstag och sÄrbarheter.
Det Àr uppenbart att teamet mÄste veta vilka komponenter med öppen kÀllkod som ingÄr i deras applikationer, se till att betrodda versioner laddas ner frÄn pÄlitliga kÀllor och ladda ner uppdaterade versioner av komponenter efter att nyupptÀckta sÄrbarheter har ÄtgÀrdats.
I det hÀr inlÀgget kommer vi att titta pÄ hur man anvÀnder OWASP Dependency Check för att avbryta byggprocessen om allvarliga problem upptÀcks i din kod.
I boken "SÀkerhet i utveckling av Agile-projekt" beskrivs det sÄ. OWASP Dependency Check Àr en gratis skanner som katalogiserar alla komponenter med öppen kÀllkod som anvÀnds i applikationen och visar kÀnda sÄrbarheter. Det finns versioner för Java, .NET, Ruby (gemspec), PHP (composer), Node.js och Python samt vissa projekt pÄ C/C++. Dependency Check integreras med vanliga byggverktyg som Ant, Maven och Gradle samt CI-servrar som Jenkins.
Dependency Check rapporterar alla komponenter med kÀnda sÄrbarheter frÄn NIST:s National Vulnerability Database (NVD) och uppdateras baserat pÄ data frÄn NVD:s nyhetskanaler.
Lyckligtvis kan allt detta automatiseras med hjÀlp av verktyg som OWASP Dependency Check-projektet, eller kommersiella program som , , , frÄn Sonatype eller .
Dessa verktyg kan integreras i byggprocesser för att automatiskt skapa en inventering av beroenden med öppen kÀllkod, identifiera förÄldrade versioner av bibliotek och bibliotek som innehÄller kÀnda sÄrbarheter, samt avbryta byggprocessen vid upptÀckte allvarliga problem.
OWASP Dependency Check
För att testa och demonstrera hur Dependency Check fungerar anvÀnder vi detta repository .
För att visa HTML-rapporten behöver du konfigurera en webserver nginx pÄ din gitlab-runner.
Exempel pÄ en minimal nginx-konfiguration:
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 {
}
}I slutet av byggprocessen kan du se en sÄdan bild:

Vi gÄr till lÀnken och ser rapporten Dependency Check.
Den första skĂ€rmdumpen â den övre delen av rapporten med en sammanfattning.

Den andra skÀrmdumpen detaljer om CVE-2017-5638. HÀr ser vi CVE-nivÄn och lÀnkar till exploiter.

Den tredje skĂ€rmdumpen â detaljer om log4j-api-2.7.jar. Vi ser att CVE-nivĂ„erna Ă€r 7.5 och 9.8.

Den fjĂ€rde skĂ€rmdumpen â detaljer om commons-fileupload-1.3.2.jar. Vi ser att CVE-nivĂ„erna Ă€r 7.5 och 9.8.

Om du vill anvĂ€nda gitlab pages, sĂ„ gĂ„r det inte â en misslyckad uppgift kommer inte att skapa artefakter.
Exempel hÀr .
Byggutdata: inga artefakter, jag ser ingen html-rapport. Vi mÄste försöka med Artifact: always

Reglering av CVE-nivÄerna för sÄrbarheter
Den viktigaste raden i filen gitlab-ci.yaml:
mvn $MAVEN_CLI_OPTS test org.owasp:dependency-check-maven:check -DfailBuildOnCVSS=7Med parametern failBuildOnCVSS kan du reglera CVE-nivÄerna pÄ sÄrbarheter som det ska reageras pÄ.
Nedladdning av CVE-databasen (NVD) NIST frÄn internet
Du har mÀrkt att den stÀndigt laddar ner sÄrbarhetsdatabaser (NVD) NIST frÄn internet:

För nedladdning kan du anvÀnda verktyget
Vi installerar och kör den.
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 laddar ner CVE JSON NIST till /var/www/repos/nist-data-mirror/ vid start och uppdaterar datan var 24:e timme.
För att ladda ner CVE JSON NIST mÄste du konfigurera en web server nginx (till exempel pÄ din gitlab-runner).
Exempel pÄ en minimal nginx-konfiguration:
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 {
}
}För att slippa ha en lÄng rad dÀr mvn körs, lÄter vi parametrarna bli en separat variabel DEPENDENCY_OPTS.
Den slutgiltiga minimala konfigurationen .gitlab-ci.yml blir sÄ hÀr:
variabler:
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
KĂ€lla: habr.com
