Një pjesë e rëndësishme e menaxhimit të dobësive është të kuptosh mirë dhe të sigurosh sigurinë e zinxhirit të furnizimit të komponenteve software nga të cilat ndërtohen sistemet moderne. Ekipet që praktikojnë metoda të shpejta dhe DevOps përdorin gjerësisht biblioteka dhe kuadrove me kod të hapur për të shkurtuar kohën dhe kostot e zhvillimit. Por kjo medalje ka edhe anën e saj negative: mundësinë për të trashëguar gabimet dhe dobësitë e tjerëve.
Sigurisht, ekipi duhet të dijë patjetër se cilat komponente me kod të hapur janë të përfshira në aplikacionet e tij, të kujdeset që versionet e besueshme të shkarkohen nga burime të besueshme dhe të ngarkojë versionet e përditësuara të komponenteve pas zgjidhjes së dobësive të reja të zbuluara.
Në këtë postim do të shqyrtojmë përdorimin e OWASP Dependency Check për të ndërprerë ndërtimin në rast se zbulohen probleme serioze me kodin tuaj.
Në librin "Siguria e zhvillimit në projektet Agile" përshkruhet kështu. OWASP Dependency Check është një skaner falas që katalogon të gjithë komponentët e përdorur në aplikacion me kod të hapur dhe tregon vulnerabilitetet që ekzistojnë në to. Ka versione për Java, .NET, Ruby (gemspec), PHP (composer), Node.js dhe Python, si dhe për disa projekte në C/C++. Dependency Check integrohet me mjete të njohura ndërtimi, duke përfshirë Ant, Maven dhe Gradle dhe serverë të integrimit të vazhdueshëm si Jenkins.
Dependency Check raporton për të gjithë komponentët me vulnerabilitete të njohura nga Bazat Kombëtare të të Dhënave të Vulnerabiliteteve (NVD) NIST dhe përditësohet mbi bazën e të dhënave nga kanalet e lajmeve të NVD.
Me fat, të gjitha këto mund të bëhen automatikisht me ndihmën e mjeteve si projekti OWASP Dependency Check, ose programeve tregtare si , , , kompanisë Sonatype ose .
Këto mjete mund të përshtaten në kanalet e ndërtimit për të krijuar automatikisht një inventar të varësive me kod të hapur, për të identifikuar versione të skaduara të bibliotekave dhe bibliotekat që përmbajnë vulnerabilitete të njohura, dhe për të ndërprerë ndërtimin në rast se përfshihen probleme serioze.
OWASP Dependency Check
Për testim dhe demonstruar funksionimin e Dependency Check, përdorim këtë repository .
Për të parë raportin HTML, duhet të konfiguroni një server web nginx në gitlab-runner tuaj.
Shembulli i konfigurimit minimal të nginx:
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 {
}
}Në fund të ndërtimit, mund të shihni këtë pamje:

Shkoni në lidhje dhe shihni raportin Dependency Check.
Screenshoti i parĂ« â pjesa e sipĂ«rme e raportit me pĂ«rmbajtje tĂ« shkurtĂ«r.

Screenshoti i dytë detajet e CVE-2017-5638. Këtu shohim nivelin e CVE dhe lidhjet për eksploitat.

Screenshoti i tretĂ« â detajet e log4j-api-2.7.jar. Shohim qĂ« nivelet e CVE janĂ« 7.5 dhe 9.8.

Screenshoti i katĂ«rt â detajet e commons-fileupload-1.3.2.jar. Shohim qĂ« nivelet e CVE janĂ« 7.5 dhe 9.8.

NĂ«se dĂ«shironi tĂ« pĂ«rdorni gitlab pages, nuk Ă«shtĂ« e mundur â njĂ« detyrĂ« e dĂ«shtuar nuk do tĂ« krijojĂ« artefakt.
Shembulli këtu .
Dalja e ndërtimit: nuk ka artefakte, nuk shoh raportin html. Duhet të provoj Artifact: always

Rregullimi i nivelit CVE të vulnerabiliteteve
Rreshti më i rëndësishëm në skedarin gitlab-ci.yaml:
mvn $MAVEN_CLI_OPTS test org.owasp:dependency-check-maven:check -DfailBuildOnCVSS=7Me parametërn failBuildOnCVSS mund të rregulloni nivelin e CVE vulnerabilities që duhet të përgjigjeni.
Shkarkimi i bazës së të dhënave të dobësive (NVD) NIST nga interneti
Keni vënë re se vazhdimisht shkarkoni bazat e të dhënave të dobësive (NVD) NIST nga interneti:

Për shkarkimin mund të përdorni utilitarin
Le të instalojmë dhe ta nisim atë.
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 shkarkon CVE JSON NIST në /var/www/repos/nist-data-mirror/ gjatë nisjes dhe përditëson të dhënat çdo 24 orë.
Për të shkarkuar CVE JSON NIST është e nevojshme të konfigurohet web-serveri nginx (për shembull, në gitlab-runner tuaj).
Shembulli i konfigurimit minimal të nginx:
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 {
}
}Në mënyrë që të mos krijoni një varg të gjatë ku nisni mvn, do ta nxjerrim parametrit në një variabël të veçantë DEPENDENCY_OPTS.
Konfigurimi minimal përfundimtar i .gitlab-ci.yml do të duket si më poshtë:
variablat:
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
verifikimi:
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 Raporti i varësisë kontrollit.html *************************"
- echo "http://$HOSTNAME:9999$PATH_WITHOUT_HOME/target/dependency-check-report.html"
- set -e
- exit ${EXIT_CODE}
tags:
- shell
Burimi: habr.com
