Oluline osa haavatavuste haldamisest seisneb selles, et mĂ”ista ja tagada tarkvara komponentide tarneahela turvalisus, millest tĂ€napĂ€evased sĂŒsteemid koosnevad. Meeskonnad, kes praktiseerivad paindlikke meetodeid ja DevOps'i, kasutavad laialdaselt avatud lĂ€htekoodiga raamatukogusid ja raame, et vĂ€hendada arendamise aega ja kulusid. Kuid sellel medalil on ka tagumine pool: vĂ”imalus pĂ€rida teiste vigu ja haavatavusi.
Ilmselt peab meeskond kindlasti teadma, millised avatud lĂ€htekoodiga komponendid on nende rakendustes, jĂ€lgima, et usaldusvÀÀrsed versioonid laaditakse alla usaldusvÀÀrsetest allikatest, ning laadima ĂŒles vĂ€rskendatud versioonid komponentidest pĂ€rast Ă€sja avastatud haavatavuste parandamist.
Selles postituses vaatame, kuidas kasutada OWASP Dependency Check'i, et peatada kokkupanek, kui teie koodis avastatakse tÔsiseid probleeme.
Raamatust «Agile-projektide arenduse turvalisus» on selgitatud jÀrgmist. OWASP Dependency Check on tasuta skanner, mis katalogiseerib kÔik rakenduses kasutatud avatud lÀhtekoodiga komponendid ja nÀitab nende haavatavusi. Saadaval on versioonid Java, .NET, Ruby (gemspec), PHP (composer), Node.js ja Python jaoks, samuti mÔne C/C++ projekti jaoks. Dependency Check integreerub levinud kogu loomisvahenditega, sealhulgas Ant, Maven ja Gradle ning pideva integreerimise serveritega nagu Jenkins.
Dependency Check teatab kÔigist komponentidest, kus on teadaolevad haavatavused, USA Rahvusliku Haavatavuste Andmebaasi (NVD) NIST, ja see uuendatakse NVD uudiste kanalite andmete pÔhjal.
Ănneks saab seda kĂ”ike automaatselt teha selliste tööriistade abil nagu OWASP Dependency Check projekt vĂ”i kommertstooted, nĂ€iteks , , , Sonatype'i ettevĂ”tte vĂ”i .
Need tööriistad saab integreerida kokkupaneku torustikesse, et automaatselt koostada avatud lÀhtekoodiga sÔltuvuste loetelu, tuvastada aegunud raamatukogude versioonid ja raamatukogud, mis sisaldavad teadaolevaid haavatavusi, ning peatada kokkupanek tÔsiste probleemide avastamisel.
OWASP Dependency Check
Dependency Check'i testimiseks ja demonstreerimiseks kasutame seda repositsiooni .
HTML-aruande vaatamiseks tuleb seadistada nginx veebiserver teie gitlab-runner'is.
Nginx'i minimaalse konfiguratsiooni nÀide:
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 {
}
}Kohe kogumise lÔpus nÀete sellist pilti:

Liigume lingile ja nÀeme Dependency Checki aruannet.
Esimene ekraanipilt on aruande ĂŒlemine osa koos lĂŒhikese sisuga.

Teine ekraanipilt nÀitab CVE-2017-5638 detaile. Siin nÀeme CVE taset ja linke eksploitidele.

Kolmas ekraanipilt toob vÀlja log4j-api-2.7.jar detailid. NÀeme, et CVE tasemed on 7.5 ja 9.8.

Neljas ekraanipilt keskendub commons-fileupload-1.3.2.jar detailidele. NĂ€eme, et CVE tasemed on 7.5 ja 9.8.

Kui soovite kasutada gitlab lehti, siis ei Ă”nnestu â ebaĂ”nnestunud ĂŒlesanne ei loo artefakti.
NĂ€ide siin .
Kogumise vÀljund: artefakte pole, html aruannet ei nÀe. Tuleb proovida Artifact: always

CVE haavatavuste taseme reguleerimine
KÔige olulisem rida failis gitlab-ci.yaml:
mvn $MAVEN_CLI_OPTS test org.owasp:dependency-check-maven:check -DfailBuildOnCVSS=7FailBuildOnCVSS parameetriga saate reguleerida CVE haavatavuste taset, millele tuleb reageerida.
Veebi kaudu haavatavuste (NVD) NIST andmebaasi allalaadimine
Olete mÀrganud, et allalaaditakse pidevalt haavatavuste (NVD) NIST andmebaas:

Allalaadimiseks saab kasutada utiliiti
Paigaldame ja kÀivitame selle.
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 laadib CVE JSON NIST andmed kausta /var/www/repos/nist-data-mirror/ kÀivitamisel ja vÀrskendab andmeid iga 24 tunni jÀrel.
CVE JSON NIST allalaadimiseks on vaja seadistada web-server nginx (nÀiteks teie gitlab-runneri peal).
Nginx'i minimaalse konfiguratsiooni nÀide:
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 {
}
}Kuna ei soovi teha pikka rida, kus mvn kÀivitatakse, tÔstame parameetrid eraldi muutuja DEPENDENCY_OPTS.
LÔplik minimaalne konfi .gitlab-ci.yml nÀeb vÀlja selline:
muutujad:
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"
vahemÀlu:
teed:
- .m2/repository
kontrolli:
etapp: test
skript:
- 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}
sildid:
- shell
Allikas: habr.com
