Bruk av sårbarhetsskanneren for brukte biblioteker Dependency-Check i GitlabCI

En viktig del av sårbarhetshåndtering er å grundig forstå og sikre forsyningskjeden til programvarekomponentene som utgjør moderne systemer. Agile- og DevOps-team bruker i stor grad åpen kildekode-biblioteker og rammeverk for å redusere utviklingstiden og -kostnadene. Men denne medaljen har også en bakside: muligheten til å arve andres feil og sårbarheter.

Selvfølgelig bør teamet være sikker på å vite hvilke åpen kildekode-komponenter som er inkludert i applikasjonene, sørge for at kjente pålitelige versjoner lastes ned fra kjente pålitelige kilder, og laste ned oppdaterte versjoner av komponenter etter at nylig oppdagede sårbarheter er korrigert.

I dette innlegget skal vi se på bruk av OWASP Dependency Check for å avbryte en build hvis den oppdager alvorlige problemer med koden din.

I boken «Utviklingssikkerhet i smidige prosjekter» er det beskrevet som følger. OWASP Dependency Check er en gratis skanner som katalogiserer alle åpen kildekodekomponenter som brukes i en applikasjon og viser sårbarhetene de inneholder. Det finnes versjoner for Java, .NET, Ruby (gemspec), PHP (komponist), Node.js og Python, samt for noen C/C++-prosjekter. Dependency Check integreres med vanlige byggeverktøy, inkludert Ant, Maven og Gradle, og kontinuerlige integrasjonsservere som Jenkins.

Dependency Check rapporterer alle komponenter med kjente sårbarheter fra NISTs National Vulnerability Database (NVD) og oppdateres med data fra NVD-nyhetsfeeds.

Heldigvis kan alt dette gjøres automatisk ved hjelp av verktøy som OWASP Dependency Check-prosjektet eller kommersielle programmer som Svart and, JFrog røntgen, Snyk, Nexus livssyklus Sonatype eller SourceClear.

Disse verktøyene kan inkluderes i bygge-pipelines for å automatisk inventere åpen kildekode-avhengigheter, identifisere utdaterte versjoner av biblioteker og biblioteker som inneholder kjente sårbarheter, og avbryte builds hvis alvorlige problemer oppdages.

OWASP-avhengighetssjekk

For å teste og demonstrere hvordan Dependency Check fungerer, bruker vi dette depotet avhengighetssjekk-eksempel.

For å se HTML-rapporten må du konfigurere nginx-webserveren på gitlab-runneren din.

Eksempel på en minimal nginx-konfigurasjon:

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 {
    }
}

På slutten av monteringen kan du se dette bildet:

Bruk av sårbarhetsskanneren for brukte biblioteker Dependency-Check i GitlabCI

Følg lenken og se rapporten om avhengighetssjekk.

Det første skjermbildet er den øverste delen av rapporten med et sammendrag.

Bruk av sårbarhetsskanneren for brukte biblioteker Dependency-Check i GitlabCI

Andre skjermbildedetaljer CVE-2017-5638. Her ser vi CVE-nivået og lenker til utnyttelser.

Bruk av sårbarhetsskanneren for brukte biblioteker Dependency-Check i GitlabCI

Det tredje skjermbildet er detaljer om log4j-api-2.7.jar. Vi ser at CVE-nivåene er 7.5 og 9.8.

Bruk av sårbarhetsskanneren for brukte biblioteker Dependency-Check i GitlabCI

Det fjerde skjermbildet er detaljene til commons-fileupload-1.3.2.jar. Vi ser at CVE-nivåene er 7.5 og 9.8.

Bruk av sårbarhetsskanneren for brukte biblioteker Dependency-Check i GitlabCI

Hvis du vil bruke gitlab-sider, vil det ikke fungere - en falt oppgave vil ikke skape en artefakt.

Eksempel her https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages.

Bygg utdata: ingen artefakter, jeg ser ikke html-rapporten. Du bør prøve Artifact: alltid

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

Bruk av sårbarhetsskanneren for brukte biblioteker Dependency-Check i GitlabCI

Regulerer nivået av CVE-sårbarheter

Den viktigste linjen i gitlab-ci.yaml-filen:

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

Med failBuildOnCVSS-parameteren kan du justere nivået av CVE-sårbarheter som du må svare på.

Laster ned NIST Vulnerability Database (NVD) fra Internett

Har du lagt merke til at NIST konstant laster ned NIST sårbarhetsdatabaser (NVD) fra Internett:

Bruk av sårbarhetsskanneren for brukte biblioteker Dependency-Check i GitlabCI

For å laste ned kan du bruke verktøyet nist_data_mirror_golang

La oss installere og starte den.

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 laster opp NIST JSON CVE til /var/www/repos/nist-data-mirror/ ved oppstart og oppdaterer dataene hver 24. time.

For å laste ned CVE JSON NIST, må du konfigurere nginx-webserveren (for eksempel på gitlab-runner).

Eksempel på en minimal nginx-konfigurasjon:

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 {
    }

}

For ikke å lage en lang linje hvor mvn er lansert, vil vi flytte parameterne inn i en egen variabel DEPENDENCY_OPTS.

Den siste minimale konfigurasjonen .gitlab-ci.yml vil se slik ut:

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

Telegramchat om DevOps og sikkerhet
Telegramkanal DevSecOps / SSDLC - Sikker utvikling

Kilde: www.habr.com

Legg til en kommentar