Važan dio upravljanja ranjivostima je temeljno razumijevanje i osiguranje lanca nabavke softverskih komponenti koje čine moderne sisteme. Agile i DevOps timovi uveliko koriste biblioteke i okvire otvorenog koda kako bi smanjili vrijeme i troškove razvoja. Ali ova medalja ima i lošu stranu: mogućnost da se naslijede tuđe greške i ranjivosti.
Očigledno, tim bi trebao biti siguran da zna koje su komponente otvorenog koda uključene u njegove aplikacije, osigurati da se poznate pouzdane verzije preuzimaju iz poznatih pouzdanih izvora i preuzimaju ažurirane verzije komponenti nakon što se novootkrivene ranjivosti zakrpe.
U ovom postu ćemo pogledati korištenje OWASP Provjere ovisnosti za prekid izgradnje ako otkrije ozbiljne probleme s vašim kodom.
U knjizi “Razvojna sigurnost u agilnim projektima” opisano je kako slijedi. OWASP Dependency Check je besplatni skener koji katalogizira sve komponente otvorenog koda koje se koriste u aplikaciji i pokazuje ranjivosti koje sadrže. Postoje verzije za Java, .NET, Ruby (gemspec), PHP (kompozitor), Node.js i Python, kao i za neke C/C++ projekte. Dependency Check se integriše sa uobičajenim alatima za pravljenje, uključujući Ant, Maven i Gradle, i serverima za kontinuiranu integraciju kao što je Jenkins.
Provera zavisnosti izveštava o svim komponentama sa poznatim ranjivostima iz NIST-ove Nacionalne baze podataka o ranjivosti (NVD) i ažurira se podacima iz NVD vesti.
Srećom, sve se ovo može obaviti automatski pomoću alata poput projekta OWASP Dependency Check ili komercijalnih programa poput
Ovi alati mogu biti uključeni u cevovode za izgradnju kako bi se automatski inventarizirale ovisnosti otvorenog koda, identificirale zastarjele verzije biblioteka i biblioteka koje sadrže poznate ranjivosti i prekinule gradnje ako se otkriju ozbiljni problemi.
OWASP Provjera ovisnosti
Za testiranje i demonstraciju kako Provjera ovisnosti funkcionira, koristimo ovo spremište
Da biste vidjeli HTML izvještaj, trebate konfigurirati nginx web server na vašem gitlab-runneru.
Primjer minimalne nginx konfiguracije:
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 {
}
}
Na kraju montaže možete vidjeti ovu sliku:
Slijedite vezu i pogledajte izvještaj o provjeri zavisnosti.
Prvi snimak ekrana je gornji deo izveštaja sa rezimeom.
Detalji druge slike ekrana CVE-2017-5638. Ovdje vidimo CVE nivo i veze do eksploatacija.
Treći snimak ekrana su detalji o log4j-api-2.7.jar. Vidimo da su CVE nivoi 7.5 i 9.8.
Četvrti snimak ekrana su detalji commons-fileupload-1.3.2.jar. Vidimo da su CVE nivoi 7.5 i 9.8.
Ako želite da koristite gitlab stranice, onda to neće raditi - pali zadatak neće stvoriti artefakt.
Primjer ovdje
Izlaz gradnje: nema artefakata, ne vidim html izvještaj. Trebali biste isprobati Artifact: uvijek
Regulisanje nivoa CVE ranjivosti
Najvažnija linija u datoteci gitlab-ci.yaml:
mvn $MAVEN_CLI_OPTS test org.owasp:dependency-check-maven:check -DfailBuildOnCVSS=7
Pomoću parametra failBuildOnCVSS možete podesiti razinu CVE ranjivosti na koju trebate odgovoriti.
Preuzimanje NIST baze podataka ranjivosti (NVD) sa Interneta
Jeste li primijetili da NIST stalno preuzima NIST baze podataka ranjivosti (NVD) sa interneta:
Za preuzimanje možete koristiti uslužni program
Hajde da ga instaliramo i pokrenemo.
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 otprema NIST JSON CVE na /var/www/repos/nist-data-mirror/ pri pokretanju i ažurira podatke svaka 24 sata.
Da biste preuzeli CVE JSON NIST, morate konfigurirati nginx web server (na primjer, na vašem gitlab-runneru).
Primjer minimalne nginx konfiguracije:
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 {
}
}
Kako ne bismo napravili dugu liniju gdje je pokrenut mvn, parametre ćemo premjestiti u zasebnu varijablu DEPENDENCY_OPTS.
Konačna minimalna konfiguracija .gitlab-ci.yml će izgledati ovako:
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
izvor: www.habr.com