Svarīga ievainojamības pārvaldības daļa ir rūpīgi izprast un nodrošināt to programmatūras komponentu piegādes ķēdi, kas veido mūsdienu sistēmas. Agile un DevOps komandas plaši izmanto atvērtā pirmkoda bibliotēkas un ietvarus, lai samazinātu izstrādes laiku un izmaksas. Taču šai medaļai ir arī mīnuss: iespēja mantot citu cilvēku kļūdas un ievainojamības.
Acīmredzot komandai noteikti jāzina, kuri atvērtā pirmkoda komponenti ir iekļauti tās lietojumprogrammās, jānodrošina, lai zināmās uzticamās versijas tiktu lejupielādētas no zināmiem uzticamiem avotiem, un pēc jaunatklāto ievainojamību novēršanas jālejupielādē atjauninātas komponentu versijas.
Šajā ziņā mēs apskatīsim OWASP atkarības pārbaudes izmantošanu, lai pārtrauktu būvniecību, ja tā atklāj nopietnas problēmas ar jūsu kodu.
Grāmatā “Attīstības drošība veiklos projektos” tas aprakstīts šādi. OWASP atkarības pārbaude ir bezmaksas skeneris, kas kataloģizē visus lietojumprogrammā izmantotos atvērtā pirmkoda komponentus un parāda tajos esošās ievainojamības. Ir versijas Java, .NET, Ruby (gemspec), PHP (komponists), Node.js un Python, kā arī dažiem C/C++ projektiem. Atkarības pārbaude tiek integrēta ar plaši izplatītiem veidošanas rīkiem, tostarp Ant, Maven un Gradle, un nepārtrauktas integrācijas serveriem, piemēram, Jenkins.
Atkarības pārbaude ziņo par visiem komponentiem ar zināmām ievainojamībām no NIST Nacionālās ievainojamības datu bāzes (NVD) un tiek atjaunināta ar datiem no NVD ziņu plūsmām.
Par laimi, to visu var izdarīt automātiski, izmantojot tādus rīkus kā OWASP atkarības pārbaudes projekts vai tādas komerciālas programmas kā
Šos rīkus var iekļaut būvēšanas cauruļvados, lai automātiski uzskaitītu atvērtā pirmkoda atkarības, identificētu novecojušas bibliotēku versijas un bibliotēku, kurās ir zināmas ievainojamības, un pārtrauktu būvējumus, ja tiek atklātas nopietnas problēmas.
OWASP atkarības pārbaude
Lai pārbaudītu un demonstrētu, kā darbojas atkarības pārbaude, mēs izmantojam šo repozitoriju
Lai skatītu HTML pārskatu, gitlab-runner ir jākonfigurē nginx tīmekļa serveris.
Minimālās nginx konfigurācijas piemērs:
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 {
}
}
Montāžas beigās jūs varat redzēt šo attēlu:
Sekojiet saitei un skatiet atkarības pārbaudes pārskatu.
Pirmais ekrānuzņēmums ir pārskata augšējā daļa ar kopsavilkumu.
Otrā ekrānuzņēmuma informācija CVE-2017-5638. Šeit mēs redzam CVE līmeni un saites uz ļaunprātīgām darbībām.
Trešais ekrānuzņēmums ir informācija par log4j-api-2.7.jar. Mēs redzam, ka CVE līmenis ir 7.5 un 9.8.
Ceturtais ekrānuzņēmums ir informācija par Commons-fileupload-1.3.2.jar. Mēs redzam, ka CVE līmenis ir 7.5 un 9.8.
Ja vēlaties izmantot gitlab lapas, tad tas nedarbosies - nokritis uzdevums neradīs artefaktu.
Piemērs šeit
Būvējuma izvade: nav artefaktu, es neredzu html pārskatu. Jums vajadzētu izmēģināt Artifact: vienmēr
CVE ievainojamību līmeņa regulēšana
Vissvarīgākā rinda failā gitlab-ci.yaml:
mvn $MAVEN_CLI_OPTS test org.owasp:dependency-check-maven:check -DfailBuildOnCVSS=7
Izmantojot parametru failBuildOnCVSS, varat pielāgot CVE ievainojamību līmeni, uz kuru jums jāreaģē.
NIST ievainojamības datu bāzes (NVD) lejupielāde no interneta
Vai esat ievērojuši, ka NIST pastāvīgi lejupielādē NIST ievainojamības datu bāzes (NVD) no interneta:
Lai lejupielādētu, varat izmantot utilītu
Instalēsim un palaidīsim to.
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 startēšanas laikā augšupielādē NIST JSON CVE mapē /var/www/repos/nist-data-mirror/ un atjaunina datus ik pēc 24 stundām.
Lai lejupielādētu CVE JSON NIST, jums ir jākonfigurē nginx tīmekļa serveris (piemēram, gitlab-runner).
Minimālās nginx konfigurācijas piemērs:
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 {
}
}
Lai nebūtu gara rinda, kur tiek palaists mvn, mēs pārvietosim parametrus atsevišķā mainīgajā DEPENDENCY_OPTS.
Galīgā minimālā konfigurācija .gitlab-ci.yml izskatīsies šādi:
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
Avots: www.habr.com