Použití skeneru zranitelností v používaných knihovnách Dependency-Check v GitlabCI

Důležitou součástí správy zranitelností je dobré porozumění a zajištění bezpečnosti dodavatelského řetězce softwarových komponent, ze kterých jsou moderní systémy budovány. Týmy praktikující flexibilní metody a DevOps široce využívají knihovny a rámce s otevřeným zdrojovým kódem, aby snížily čas a náklady na vývoj. Tato medaile má však i druhou stranu: možnost zdědit cizí chyby a zranitelnosti.

Je zřejmé, že tým musí mít povědomí o tom, jaké komponenty s otevřeným zdrojovým kódem jsou zahrnuty do jeho aplikací, sledovat, aby stažení spolehlivých verzí probíhalo z důvěryhodných zdrojů, a nahrávat 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í v případě zjištění závažných problémů s vaším kódem.

V knize „Bezpečnost vývoje v Agile projektech“ je to popsáno takto. OWASP Dependency Check je bezplatný skener, který katalogizuje všechny komponenty s otevřeným zdrojovým kódem používané v aplikaci a ukazuje existující zranitelnosti. Existují verze pro Java, .NET, Ruby (gemspec), PHP (composer), Node.js a Python, stejně jako pro některé projekty v C/C++. Dependency Check se integruje s běžnými nástroji na sestavení, včetně Ant, Maven a Gradle, a s nepřetržitými integračními servery jako Jenkins.

Dependency Check hlásí všechny komponenty s známými zranitelnostmi z Národní databáze zranitelností (NVD) NIST a je aktualizován na základě informací z novinových kanálů NVD.

Naštěstí lze vše to automatizovat pomocí takových nástrojů, jako je projekt OWASP Dependency Check nebo komerční programy typu Black Duck, JFrog Xray, Snyk, Nexus Lifecycle společnosti Sonatype nebo SourceClear.

Tyto nástroje lze zahrnout do sestavovacích toků, aby se automaticky vytvářel seznam závislostí s otevřeným zdrojovým kódem, identifikovaly staré verze knihoven a knihovny obsahující známé zranitelnosti a přerušilo se sestavení v případě zjištění závažných problémů.

OWASP Dependency Check

Pro testování a demonstraci funkce Dependency Check použijeme toto úložiště dependency-check-example.

Pro zobrazení HTML zprávy je nutné nakonfigurovat webový server nginx na vašem gitlab-runner.

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 sestavení vidíte takový obrazec:

Použití skeneru zranitelností v používaných knihovnách Dependency-Check v GitlabCI

Přejděte na odkaz a uvidíte zprávu Dependency Check.

První screenshot — horní část zprávy s krátkým shrnutím.

Použití skeneru zranitelností v používaných knihovnách Dependency-Check v GitlabCI

Druhý screenshot podrobnosti o CVE-2017-5638. Zde vidíme úroveň CVE a odkazy na exploit.

Použití skeneru zranitelností v používaných knihovnách Dependency-Check v GitlabCI

Třetí screenshot — podrobnosti o log4j-api-2.7.jar. Vidíme, že úrovně CVE jsou 7.5 a 9.8.

Použití skeneru zranitelností v používaných knihovnách Dependency-Check v GitlabCI

Čtvrtý screenshot — podrobnosti o commons-fileupload-1.3.2.jar. Vidíme, že úrovně CVE jsou 7.5 a 9.8.

Použití skeneru zranitelností v používaných knihovnách Dependency-Check v GitlabCI

Pokud chcete používat gitlab pages, nebude to fungovat — selhávající úkol nevytvoří artefakt.

Příklad zde https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages.

Výstup sestavení: artefakty nejsou, zprávu HTML nevidím. Měl bych zkusit Artifact: always

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

Použití skeneru zranitelností v používaných knihovnách Dependency-Check v GitlabCI

Regulace úrovně CVE zranitelností

Nejdůležitější řádek v souboru gitlab-ci.yaml:

mvn $MAVEN_CLI_OPTS test org.owasp:dependency-check-maven:check -DfailBuildOnCVSS=7

Parametrem failBuildOnCVSS můžete regulovat úroveň CVE zranitelností, na které je třeba reagovat.

Stahování databáze zranitelností (NVD) NIST z internetu

Zaznamenali jste, že neustále stahuje databáze zranitelností (NVD) NIST z internetu:

Použití skeneru zranitelností v používaných knihovnách Dependency-Check v GitlabCI

Pro stahování můžete použít utilitu nist_data_mirror_golang

Nainstalujeme a spustíme ji.

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 stahuje CVE JSON NIST do /var/www/repos/nist-data-mirror/ při spuštění a aktualizuje data každých 24 hodin.

Pro stahování CVE JSON NIST je třeba nastavit 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 nemuseli psát dlouhý řetězec, kde se spouští mvn, vyjmeme parametry do samostatné proměnné DEPENDENCY_OPTS.

Konečný minimální konfigurační soubor .gitlab-ci.yml bude vypadat takto:

proměnné:
  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:
  cesty:
    - .m2/repository

ověření:
  fáze: test
  skript:
    - 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}
  štítky:
    - shell

Telegram chat o DevOps a zabezpečení
Telegram kanál DevSecOps / SSDLC - Bezpečný vývoj

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster