βn Belangrike deel van kwesbaarheidsbestuur is om die voorsieningsketting van die sagtewarekomponente waaruit moderne stelsels bestaan, deeglik te verstaan ββen te beveilig. Agile en DevOps-spanne maak uitgebreide gebruik van oopbronbiblioteke en -raamwerke om ontwikkelingstyd en -koste te verminder. Maar hierdie medalje het ook 'n nadeel: die geleentheid om ander mense se foute en kwesbaarhede te erf.
Uiteraard moet die span seker wees om te weet watter oopbronkomponente by sy toepassings ingesluit is, seker te maak dat bekende betroubare weergawes van bekende betroubare bronne afgelaai word, en opgedateerde weergawes van komponente af te laai nadat nuut ontdekte kwesbaarhede reggemaak is.
In hierdie pos sal ons kyk na die gebruik van OWASP Afhanklikheidkontrole om 'n bou te staak as dit ernstige probleme met jou kode opspoor.
In die boek βOntwikkelingssekuriteit in Agile Projectsβ word dit soos volg beskryf. OWASP Dependency Check is 'n gratis skandeerder wat alle oopbronkomponente wat in 'n toepassing gebruik word, katalogiseer en die kwesbaarhede wat dit bevat, wys. Daar is weergawes vir Java, .NET, Ruby (gemspec), PHP (komponis), Node.js en Python, asook vir sommige C/C++-projekte. Dependency Check integreer met algemene bounutsgoed, insluitend Ant, Maven en Gradle, en deurlopende integrasiebedieners soos Jenkins.
Dependency Check rapporteer alle komponente met bekende kwesbaarhede van NIST se National Vulnerability Database (NVD) en word opgedateer met data van NVD-nuusstrome.
Gelukkig kan dit alles outomaties gedoen word met behulp van gereedskap soos die OWASP Dependency Check-projek of kommersiΓ«le programme soos
Hierdie nutsmiddels kan ingesluit word by die bou van pyplyne om oopbronafhanklikhede outomaties inventaris te maak, verouderde weergawes van biblioteke en biblioteke te identifiseer wat bekende kwesbaarhede bevat, en bouwerk te staak indien ernstige probleme bespeur word.
OWASP-afhanklikheidkontrole
Om te toets en te demonstreer hoe afhanklikheidkontrole werk, gebruik ons ββhierdie bewaarplek
Om die HTML-verslag te sien, moet jy die nginx-webbediener op jou gitlab-runner instel.
Voorbeeld van 'n minimale nginx-konfigurasie:
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 die einde van die samestelling kan jy hierdie prentjie sien:
Volg die skakel en sien die Afhanklikheidskontrole-verslag.
Die eerste skermskoot is die boonste deel van die verslag met 'n opsomming.
Tweede skermkiekiebesonderhede CVE-2017-5638. Hier sien ons die CVE-vlak en skakels na uitbuitings.
Die derde skermkiekie is besonderhede van log4j-api-2.7.jar. Ons sien dat CVE-vlakke 7.5 en 9.8 is.
Die vierde skermkiekie is die besonderhede van commons-fileupload-1.3.2.jar. Ons sien dat CVE-vlakke 7.5 en 9.8 is.
As jy gitlab-bladsye wil gebruik, sal dit nie werk nie - 'n gevalle taak sal nie 'n artefak skep nie.
Voorbeeld hier
Bou uitset: geen artefakte nie, ek sien nie die html-verslag nie. Jy moet Artifact probeer: altyd
Regulering van die vlak van CVE-kwesbaarhede
Die belangrikste reΓ«l in die gitlab-ci.yaml lΓͺer:
mvn $MAVEN_CLI_OPTS test org.owasp:dependency-check-maven:check -DfailBuildOnCVSS=7
Met die failBuildOnCVSS-parameter kan jy die vlak van CVE-kwesbaarhede aanpas waarop jy moet reageer.
Laai die NIST Vulnerability Database (NVD) van die internet af
Het jy opgemerk dat NIST voortdurend die NIST-kwesbaarheidsdatabasisse (NVD) van die internet aflaai:
Om af te laai, kan jy die nut gebruik
Kom ons installeer en begin dit.
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 laai die NIST JSON CVE op na /var/www/repos/nist-data-mirror/ by opstart en werk die data elke 24 uur op.
Om CVE JSON NIST af te laai, moet jy die nginx-webbediener opstel (byvoorbeeld op jou gitlab-runner).
Voorbeeld van 'n minimale nginx-konfigurasie:
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 nie 'n lang lyn te maak waar mvn geloods word nie, sal ons die parameters na 'n aparte veranderlike DEPENDENCY_OPTS skuif.
Die finale minimale konfigurasie .gitlab-ci.yml sal soos volg lyk:
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: will.com