Důležitou součástí správy zranitelnosti je důkladné pochopení a zabezpečení dodavatelského řetězce softwarových komponent, které tvoří moderní systémy. Agilní týmy a týmy DevOps široce využívají knihovny a rámce s otevřeným zdrojovým kódem, aby zkrátily dobu a náklady na vývoj. Ale tato medaile má také nevýhodu: příležitost zdědit chyby a zranitelnost jiných lidí.
Tým by si samozřejmě měl být jistý, že ví, které open source komponenty jsou zahrnuty v jeho aplikacích, zajistit stahování známých spolehlivých verzí ze známých spolehlivých zdrojů a stahovat aktualizované verze komponent po opravě nově objevených zranitelností.
V tomto příspěvku se podíváme na použití OWASP Dependency Check k přerušení sestavení, pokud zjistí vážné problémy s vaším kódem.
V knize „Development Security in Agile Projects“ je to popsáno následovně. OWASP Dependency Check je bezplatný skener, který katalogizuje všechny open source komponenty používané v aplikaci a ukazuje zranitelnosti, které obsahují. Existují verze pro Java, .NET, Ruby (gemspec), PHP (skladatel), Node.js a Python a také pro některé projekty C/C++. Dependency Check se integruje s běžnými nástroji pro vytváření, včetně Ant, Maven a Gradle, a servery pro nepřetržitou integraci, jako je Jenkins.
Kontrola závislostí hlásí všechny komponenty se známými zranitelnostmi z Národní databáze zranitelností NIST (NVD) a je aktualizována daty ze zpravodajských kanálů NVD.
Naštěstí to vše lze provést automaticky pomocí nástrojů, jako je projekt OWASP Dependency Check nebo komerční programy jako
Tyto nástroje mohou být zahrnuty do sestavovacích kanálů pro automatickou inventarizaci závislostí s otevřeným zdrojovým kódem, identifikaci zastaralých verzí knihoven a knihoven obsahujících známá zranitelnost a přerušení sestavení, pokud jsou zjištěny závažné problémy.
Kontrola závislosti OWASP
K otestování a předvedení toho, jak funguje Kontrola závislostí, používáme toto úložiště
Chcete-li zobrazit zprávu HTML, musíte nakonfigurovat webový server nginx na vašem gitlab-runneru.
Příklad minimální konfigurace 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 {
}
}
Na konci sestavy můžete vidět tento obrázek:
Klikněte na odkaz a podívejte se na zprávu Kontrola závislosti.
První snímek obrazovky je horní část zprávy se shrnutím.
Podrobnosti o druhém snímku obrazovky CVE-2017-5638. Zde vidíme úroveň CVE a odkazy na exploity.
Třetí snímek obrazovky jsou podrobnosti o log4j-api-2.7.jar. Vidíme, že úrovně CVE jsou 7.5 a 9.8.
Čtvrtý snímek obrazovky jsou podrobnosti o commons-fileupload-1.3.2.jar. Vidíme, že úrovně CVE jsou 7.5 a 9.8.
Pokud chcete používat gitlabové stránky, tak to nepůjde – padlý úkol nevytvoří artefakt.
Příklad zde
Výstup sestavení: žádné artefakty, nevidím zprávu html. Měli byste zkusit Artifact: vždy
Regulace úrovně zranitelností CVE
Nejdůležitější řádek v souboru gitlab-ci.yaml:
mvn $MAVEN_CLI_OPTS test org.owasp:dependency-check-maven:check -DfailBuildOnCVSS=7
Pomocí parametru failBuildOnCVSS můžete upravit úroveň zranitelností CVE, na které musíte reagovat.
Stažení NIST Vulnerability Database (NVD) z internetu
Všimli jste si, že NIST neustále stahuje databáze zranitelností NIST (NVD) z internetu:
Ke stažení můžete použít utilitu
Pojďme jej nainstalovat a spustit.
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 nahraje NIST JSON CVE do /var/www/repos/nist-data-mirror/ při spuštění a aktualizuje data každých 24 hodin.
Chcete-li stáhnout CVE JSON NIST, musíte nakonfigurovat webový server nginx (například na vašem gitlab-runner).
Příklad minimální konfigurace 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 {
}
}
Abychom nedělali dlouhou řadu při spuštění mvn, přesuneme parametry do samostatné proměnné DEPENDENCY_OPTS.
Finální minimální konfigurace .gitlab-ci.yml bude vypadat takto:
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
Zdroj: www.habr.com