Dôležitou súčasťou správy zraniteľnosti je dôkladné pochopenie a zabezpečenie dodávateľského reťazca softvérových komponentov, ktoré tvoria moderné systémy. Agilné tímy a tímy DevOps vo veľkej miere využívajú knižnice a rámce s otvoreným zdrojovým kódom na zníženie času a nákladov na vývoj. Táto medaila má však aj nevýhodu: možnosť zdediť chyby a zraniteľnosť iných ľudí.
Je zrejmé, že tím by si mal byť istý, že vie, ktoré open source komponenty sú zahrnuté v jeho aplikáciách, zabezpečiť, aby sa známe spoľahlivé verzie stiahli zo známych spoľahlivých zdrojov, a sťahovať aktualizované verzie komponentov po oprave novoobjavených zraniteľností.
V tomto príspevku sa pozrieme na používanie kontroly závislosti OWASP na prerušenie zostavy, ak zistí vážne problémy s vaším kódom.
V knihe „Bezpečnosť vývoja v agilných projektoch“ je to opísané nasledovne. OWASP Dependency Check je bezplatný skener, ktorý katalogizuje všetky open source komponenty používané v aplikácii a zobrazuje zraniteľnosti, ktoré obsahujú. Existujú verzie pre Java, .NET, Ruby (gemspec), PHP (skladateľ), Node.js a Python, ako aj pre niektoré projekty C/C++. Kontrola závislosti sa integruje s bežnými nástrojmi na zostavovanie vrátane Ant, Maven a Gradle a servermi nepretržitej integrácie, ako je Jenkins.
Kontrola závislosti hlási všetky komponenty so známymi zraniteľnosťami z národnej databázy zraniteľností NIST (NVD) a aktualizuje sa údajmi z informačných kanálov NVD.
Našťastie sa to všetko dá urobiť automaticky pomocou nástrojov, ako je projekt OWASP Dependency Check alebo komerčné programy
Tieto nástroje môžu byť zahrnuté do zostavovacích kanálov na automatickú inventarizáciu závislostí open source, identifikáciu zastaraných verzií knižníc a knižníc so známymi zraniteľnosťami a na prerušenie zostavovania, ak sa zistia vážne problémy.
Kontrola závislosti OWASP
Na testovanie a demonštráciu toho, ako funguje Kontrola závislosti, používame toto úložisko
Ak chcete zobraziť správu HTML, musíte na svojom gitlab-runneri nakonfigurovať webový server nginx.
Príklad minimálnej konfigurácie 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 zostavy môžete vidieť tento obrázok:
Kliknite na odkaz a pozrite si prehľad Kontrola závislosti.
Prvá snímka obrazovky je horná časť správy so zhrnutím.
Podrobnosti o druhej snímke obrazovky CVE-2017-5638. Tu vidíme úroveň CVE a odkazy na exploity.
Tretia snímka obrazovky sú podrobnosti o log4j-api-2.7.jar. Vidíme, že úrovne CVE sú 7.5 a 9.8.
Štvrtá snímka obrazovky sú podrobnosti o commons-fileupload-1.3.2.jar. Vidíme, že úrovne CVE sú 7.5 a 9.8.
Ak chcete použiť gitlabové stránky, tak to nepôjde – padnutá úloha nevytvorí artefakt.
Príklad tu
Výstup zostavy: žiadne artefakty, nevidím správu html. Mali by ste vyskúšať Artifact: vždy
Regulácia úrovne CVE zraniteľností
Najdôležitejší riadok v súbore gitlab-ci.yaml:
mvn $MAVEN_CLI_OPTS test org.owasp:dependency-check-maven:check -DfailBuildOnCVSS=7
Pomocou parametra failBuildOnCVSS môžete upraviť úroveň zraniteľností CVE, na ktoré musíte reagovať.
Sťahovanie databázy zraniteľností NIST (NVD) z internetu
Všimli ste si, že NIST neustále sťahuje databázy zraniteľností NIST (NVD) z internetu:
Na stiahnutie môžete použiť obslužný program
Poďme ho nainštalovať a spustiť.
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 odovzdá NIST JSON CVE do /var/www/repos/nist-data-mirror/ pri spustení a aktualizuje údaje každých 24 hodín.
Ak chcete stiahnuť CVE JSON NIST, musíte nakonfigurovať webový server nginx (napríklad na vašom gitlab-runner).
Príklad minimálnej konfigurácie 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 {
}
}
Aby sa nerobil dlhý rad pri spustení mvn, presunieme parametre do samostatnej premennej DEPENDENCY_OPTS.
Konečná minimálna konfigurácia .gitlab-ci.yml bude vyzerať 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: hab.com