Oluline osa haavatavuste juhtimisest on hĂ€sti mĂ”ista ja tagada tarkvara koostisosade tarnete ahela turvalisus, millest moodustuvad tĂ€napĂ€evased sĂŒsteemid. Agiilsed ja DevOps meetodeid praktiseerivad meeskonnad kasutavad laialdaselt avatud lĂ€htekoodiga raamatukogusid ja raame, et vĂ€hendada arendamise aega ja kulusid. Kuid sellel medalil on ka teine kĂŒlg: vĂ”imalus pĂ€rida teiste vigasid ja haavatavusi.
Ilmselt peab meeskond kindlasti teadma, millised avatud lÀhtekoodiga komponendid on nende rakendustes, jÀlgima, et usaldusvÀÀrsed versioonid allalaaditakse usaldusvÀÀrsetest allikatest, ning laadima vÀrskendatud versioonid komponente pÀrast hiljuti avastatud haavatavuste parendamist.
Selles postituses vaatleme OWASP Dependency Check kasutamist, et katkestada ehitamine, kui teie koodis tuvastatakse tÔsiseid probleeme.
Raamatus âAgile-projektide arendamise turvalisusâ on see kirjas. OWASP Dependency Check on tasuta skanner, mis kataloogib kĂ”ik rakenduses kasutatavad 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Ă”nede C/C++ projektide jaoks. Dependency Check integreerub laialdaselt kasutatavatesse ehitustööriistadesse, sealhulgas Ant, Maven ja Gradle, ning pideva integreerimise serveritesse nagu Jenkins.
Dependency Check teatab kÔigist komponentidest, millel on tuntud haavatavused, mis on kajastatud Rahvuslikus Haavatavuste Andmebaasis (NVD) NIST ja vÀrskendab andmeid NVD uudiste kanalite alusel.
Ănneks saab seda kĂ”ike automaatselt teha selliste tööriistade abil nagu OWASP Dependency Check projekt vĂ”i kaubanduslikud programmid tĂŒĂŒpi , , , Sonatype ettevĂ”tte poolt vĂ”i .
Need tööriistad saab integreerida ehitustootmisse, et automaatselt koostada avatud lÀhtekoodiga sÔltuvuste loetelu, tuvastada vananenud raamatukogude versioone ja raamatukogusid, mis sisaldavad tuntud haavatavusi, ning peatada ehituse, kui avastatakse tÔsiseid probleeme.
OWASP Dependency Check
Kasutame selle repositooriumi Dependency Check'i testimiseks ja demonstreerimiseks .
HTML-aruande vaatamiseks peate seadistama veebiserveri nginx oma gitlab-runner'is.
NĂ€ide minimaalsetest nginx-i seadistustest:
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 {
}
}Kogumise lÔpus vÔite nÀha sellist pilti:

Minge lingile ja nÀete Dependency Check'i aruannet.
Esimene ekraanipilt â aruande ĂŒlemine osa kokkuvĂ”ttega.

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

Kolmas ekraanipilt log4j-api-2.7.jar detailidest. NĂ€eme, et CVE tasemed on 7.5 ja 9.8.

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

Kui soovite kasutada gitlab pages, siis see ei Ă”nnestu â ebaĂ”nnestunud ĂŒlesanne ei loo artefakti.
NĂ€ide siin .
Kogumise vÀljund: artefakte pole, html aruannet ei nÀe. Peab proovima 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 parameeteriga saate reguleerida CVE haavatavuste taset, millele tuleb reageerida.
Allalaadimine internetist haavatavuste andmebaasist (NVD) NIST
Olete mÀrganud, et allalaadite pidevalt haavatavuste andmebaase (NVD) NIST internetist:

Allalaadimiseks saate 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 alla /var/www/repos/nist-data-mirror/ kÀivitamisel ja uuendab andmeid iga 24 tunni jÀrel.
CVE JSON NIST allalaadimiseks on vaja seadistada web-server nginx (nt teie gitlab-runneris).
NĂ€ide minimaalsetest nginx-i seadistustest:
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 mvn kÀivitamiseks on pikk rida, siis viime parameetrid eraldi muutujasse DEPENDENCY_OPTS.
LÔplik minimaalne .gitlab-ci.yml konfiguratsioon saab olema jÀrgmine:
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"
vahehoidla:
teed:
- .m2/repository
kontroll:
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
