Važan dio upravljanja ranjivostima je temeljito razumijevanje i osiguranje opskrbnog lanca softverskih komponenti koje čine moderne sustave. Agile i DevOps timovi intenzivno koriste biblioteke i okvire otvorenog koda kako bi smanjili vrijeme i troškove razvoja. Ali ova medalja ima i lošu stranu: priliku naslijediti tuđe pogreške i ranjivosti.
Očito, tim bi trebao znati koje su komponente otvorenog koda uključene u njegove aplikacije, osigurati da se poznate pouzdane verzije preuzimaju iz poznatih pouzdanih izvora i preuzeti ažurirane verzije komponenti nakon što su novootkrivene ranjivosti zakrpane.
U ovom ćemo postu pogledati korištenje OWASP-ove provjere ovisnosti za prekid izgradnje ako otkrije ozbiljne probleme s vašim kodom.
U knjizi “Sigurnost razvoja u agilnim projektima” to je opisano na sljedeći način. OWASP Dependency Check besplatni je skener koji katalogizira sve komponente otvorenog koda koje se koriste u aplikaciji i prikazuje ranjivosti koje sadrže. Postoje verzije za Javu, .NET, Ruby (gemspec), PHP (kompozitor), Node.js i Python, kao i za neke C/C++ projekte. Provjera ovisnosti integrira se s uobičajenim alatima za izradu, uključujući Ant, Maven i Gradle, te kontinuiranim integracijskim poslužiteljima poput Jenkinsa.
Provjera ovisnosti izvještava o svim komponentama s poznatim ranjivostima iz NIST-ove nacionalne baze podataka o ranjivostima (NVD) i ažurira se podacima iz NVD izvora vijesti.
Srećom, sve se to može učiniti automatski pomoću alata poput OWASP projekta Provjera ovisnosti ili komercijalnih programa poput
Ovi se alati mogu uključiti u cjevovode za izradu za automatsku inventarizaciju ovisnosti otvorenog koda, identificiranje zastarjelih verzija biblioteka i biblioteka koje sadrže poznate ranjivosti i prekid izgradnje ako se otkriju ozbiljni problemi.
OWASP provjera ovisnosti
Da bismo testirali i demonstrirali kako funkcionira Provjera ovisnosti, koristimo ovo spremište
Za pregled HTML izvješća morate konfigurirati nginx web poslužitelj na svom gitlab-runner-u.
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šće Provjera ovisnosti.
Prva snimka zaslona je gornji dio izvješća sa sažetkom.
Druga snimka zaslona s detaljima CVE-2017-5638. Ovdje vidimo CVE razinu i poveznice na exploite.
Treća snimka zaslona je detalji log4j-api-2.7.jar. Vidimo da su CVE razine 7.5 i 9.8.
Četvrta snimka zaslona je detalji o commons-fileupload-1.3.2.jar. Vidimo da su CVE razine 7.5 i 9.8.
Ako želite koristiti gitlab stranice, onda to neće raditi - pali zadatak neće stvoriti artefakt.
Primjer ovdje
Izlaz međuverzije: nema artefakata, ne vidim html izvješće. Trebali biste isprobati Artifact: uvijek
Reguliranje razine CVE ranjivosti
Najvažniji redak 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 koje trebate odgovoriti.
Preuzimanje NIST Vulnerability Database (NVD) s Interneta
Jeste li primijetili da NIST neprestano preuzima NIST baze podataka ranjivosti (NVD) s Interneta:
Za preuzimanje možete koristiti uslužni program
Instalirajmo ga i pokrenimo.
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 učitava NIST JSON CVE na /var/www/repos/nist-data-mirror/ prilikom pokretanja i ažurira podatke svaka 24 sata.
Da biste preuzeli CVE JSON NIST, trebate konfigurirati nginx web poslužitelj (na primjer, na vašem gitlab-runner-u).
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 pravili dugačak red gdje se pokreće mvn, parametre ćemo premjestiti u zasebnu varijablu DEPENDENCY_OPTS.
Konačna minimalna konfiguracija .gitlab-ci.yml izgledat će 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