Použitie skenera zraniteľností v používaných knižniciach Dependency-Check v GitlabCI

Dôležitou súčasťou správy zraniteľností je dobré porozumenie a zabezpečenie dodávateľského reťazca tých softvérových komponentov, z ktorých sú postavené moderné systémy. Tímy, ktoré používajú agilné metódy a DevOps, široko využívajú knižnice a frameworky s otvoreným zdrojovým kódom, aby skrátili čas a náklady na vývoj. Ale táto medaila má aj rubovú stránku: možnosť zdediť cudzí problém a zraniteľnosti.

Je zrejmé, že tím musí vedieť, ktoré komponenty s otvoreným zdrojovým kódom sú zahrnuté v jeho aplikáciách, sledovať, aby sa spoľahlivé verzie sťahovali z dôveryhodných zdrojov a nahrávať aktualizované verzie komponentov po oprave novo objavených zraniteľností.

V tomto príspevku sa pozrieme na použitie OWASP Dependency Check na prerušenie zostavenia v prípade zistenia vážnych problémov s vaším kódom.

V knihe „Bezpečnosť vývoja v Agile projektoch“ je to opísané takto. OWASP Dependency Check je bezplatný skener, ktorý katalogizuje všetky komponenty s otvoreným zdrojovým kódom používané v aplikácii a ukazuje zraniteľnosti, ktoré v nich existujú. Existujú verzie pre Java, .NET, Ruby (gemspec), PHP (composer), Node.js a Python, ako aj pre niektoré projekty v C/C++. Dependency Check sa integruje s bežnými nástrojmi na zostavovanie, ako sú Ant, Maven a Gradle a servery pre kontinuálnu integráciu ako Jenkins.

Dependency Check informuje o všetkých komponentoch so známymi zraniteľnosťami z Národnej databázy zraniteľností (NVD) NIST a aktualizuje sa na základe údajov z novinových kanálov NVD.

Našťastie je možné všetko to automatizovať pomocou takýchto nástrojov, ako je projekt OWASP Dependency Check, alebo komerčných programov typu Black Duck, JFrog Xray, Snyk, Nexus Lifecycle spoločnosti Sonatype alebo SourceClear.

Tieto nástroje je možné integrovať do zostavovacích potrubí, aby automaticky vytvárali zoznam závislostí s otvoreným zdrojovým kódom, odhaľovali zastarané verzie knižníc a knižnice, ktoré obsahujú známe zraniteľnosti, a prerušili zostavenie v prípade zistenia závažných problémov.

OWASP Dependency Check

Na testovanie a demonštráciu funkcie Dependency Check použijeme tento repozitár dependency-check-example.

Na zobrazenie HTML správy je potrebné nastaviť webový server nginx na vašom gitlab-runner.

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 zostavovania môžete vidieť takýto obrazec:

Použitie skenera zraniteľností v používaných knižniciach Dependency-Check v GitlabCI

Prejdeme na odkaz a vidíme správu Dependency Check.

Prvý snímok obrazovky — horná časť správy s krátkym obsahom.

Použitie skenera zraniteľností v používaných knižniciach Dependency-Check v GitlabCI

Druhý snímok obrazovky podrobnosti CVE-2017-5638. Tu vidíme úroveň CVE a odkazy na exploity.

Použitie skenera zraniteľností v používaných knižniciach Dependency-Check v GitlabCI

Tretí snímok obrazovky — podrobnosti log4j-api-2.7.jar. Vidíme, že úrovne CVE sú 7.5 a 9.8.

Použitie skenera zraniteľností v používaných knižniciach Dependency-Check v GitlabCI

Štvrtý snímok obrazovky — podrobnosti commons-fileupload-1.3.2.jar. Vidíme, že úrovne CVE sú 7.5 a 9.8.

Použitie skenera zraniteľností v používaných knižniciach Dependency-Check v GitlabCI

Ak chcete používať gitlab pages, nebude to možné — zlyhaná úloha nevytvorí artefakt.

Príklad tu https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages.

Výstup zostavovania: artefakty nie sú, html správa nie je viditeľná. Musíte vyskúšať Artifact: always

https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages/-/jobs/400004246

Použitie skenera zraniteľností v používaných knižniciach Dependency-Check v GitlabCI

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

Parametrom failBuildOnCVSS môžete regulovať úroveň CVE zraniteľností, na ktoré sa treba reagovať.

Sťahovanie databázy zraniteľností (NVD) NIST z internetu

Už ste si všimli, že neustále sťahuje databázy zraniteľností (NVD) NIST z internetu:

Použitie skenera zraniteľností v používaných knižniciach Dependency-Check v GitlabCI

Na sťahovanie môžete použiť utilitu nist_data_mirror_golang

Nainštalujeme a spustíme ju.

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 sťahuje CVE JSON NIST do /var/www/repos/nist-data-mirror/ pri spustení a aktualizuje dáta každých 24 hodín.

Na sťahovanie CVE JSON NIST je potrebné 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 sme nielen nespoliehali na dlhý riadok, kde sa spúšťa mvn, vystavíme parametre do samostatnej premennej DEPENDENCY_OPTS.

Výsledný minimálny konfiguračný súbor .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

Telegram chat o DevOps a bezpečnosti
Telegram kanál DevSecOps / SSDLC - Bezpečný vývoj

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster