Brug af sårbarhedsscanneren til brugte biblioteker Dependency-Check i GitlabCI

En vigtig del af sårbarhedshåndtering er grundigt at forstå og sikre forsyningskæden af ​​de softwarekomponenter, der udgør moderne systemer. Agile- og DevOps-teams gør udstrakt brug af open source-biblioteker og rammer for at reducere udviklingstid og omkostninger. Men denne medalje har også en bagside: Muligheden for at arve andres fejl og sårbarheder.

Teamet skal naturligvis være sikker på at vide, hvilke open source-komponenter der er inkluderet i dets applikationer, sikre, at kendte pålidelige versioner downloades fra kendte pålidelige kilder og downloade opdaterede versioner af komponenter, efter at nyopdagede sårbarheder er rettet.

I dette indlæg vil vi se på at bruge OWASP Dependency Check til at afbryde en build, hvis den opdager alvorlige problemer med din kode.

I bogen “Udviklingssikkerhed i agile projekter” er det beskrevet som følger. OWASP Dependency Check er en gratis scanner, der katalogiserer alle open source-komponenter, der bruges i et program, og viser de sårbarheder, de indeholder. Der er versioner til Java, .NET, Ruby (gemspec), PHP (komponist), Node.js og Python, samt til nogle C/C++-projekter. Dependency Check integreres med almindelige byggeværktøjer, herunder Ant, Maven og Gradle, og kontinuerlige integrationsservere som Jenkins.

Dependency Check rapporterer alle komponenter med kendte sårbarheder fra NIST's National Vulnerability Database (NVD) og opdateres med data fra NVD-nyhedsfeeds.

Heldigvis kan alt dette gøres automatisk ved hjælp af værktøjer som OWASP Dependency Check-projektet eller kommercielle programmer som f.eks. Sort And, JFrog røntgen, SNYK, Nexus livscyklus Sonatype eller SourceClear.

Disse værktøjer kan inkluderes i build-pipelines til automatisk at inventere open source-afhængigheder, identificere forældede versioner af biblioteker og biblioteker, der indeholder kendte sårbarheder, og afbryde builds, hvis der opdages alvorlige problemer.

OWASP afhængighedstjek

For at teste og demonstrere, hvordan afhængighedstjek fungerer, bruger vi dette lager afhængighedstjek-eksempel.

For at se HTML-rapporten skal du konfigurere nginx-webserveren på din gitlab-runner.

Eksempel på en minimal nginx-konfiguration:

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

I slutningen af ​​samlingen kan du se dette billede:

Brug af sårbarhedsscanneren til brugte biblioteker Dependency-Check i GitlabCI

Følg linket og se rapporten om afhængighedstjek.

Det første skærmbillede er den øverste del af rapporten med et resumé.

Brug af sårbarhedsscanneren til brugte biblioteker Dependency-Check i GitlabCI

Andet skærmbillede detaljer CVE-2017-5638. Her ser vi CVE-niveauet og links til exploits.

Brug af sårbarhedsscanneren til brugte biblioteker Dependency-Check i GitlabCI

Det tredje skærmbillede er detaljer om log4j-api-2.7.jar. Vi ser, at CVE-niveauer er 7.5 og 9.8.

Brug af sårbarhedsscanneren til brugte biblioteker Dependency-Check i GitlabCI

Det fjerde skærmbillede er detaljerne i commons-fileupload-1.3.2.jar. Vi ser, at CVE-niveauer er 7.5 og 9.8.

Brug af sårbarhedsscanneren til brugte biblioteker Dependency-Check i GitlabCI

Hvis du vil bruge gitlab-sider, så virker det ikke - en faldet opgave vil ikke skabe en artefakt.

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

Byg output: ingen artefakter, jeg kan ikke se html-rapporten. Du bør prøve Artifact: altid

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

Brug af sårbarhedsscanneren til brugte biblioteker Dependency-Check i GitlabCI

Regulering af niveauet af CVE-sårbarheder

Den vigtigste linje i gitlab-ci.yaml filen:

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

Med parameteren failBuildOnCVSS kan du justere niveauet af CVE-sårbarheder, som du skal reagere på.

Download af NIST Vulnerability Database (NVD) fra internettet

Har du bemærket, at NIST konstant downloader NIST sårbarhedsdatabaserne (NVD) fra internettet:

Brug af sårbarhedsscanneren til brugte biblioteker Dependency-Check i GitlabCI

For at downloade kan du bruge værktøjet nist_data_mirror_golang

Lad os installere og starte det.

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 uploader NIST JSON CVE til /var/www/repos/nist-data-mirror/ ved opstart og opdaterer dataene hver 24 timer.

For at downloade CVE JSON NIST skal du konfigurere nginx-webserveren (for eksempel på din gitlab-runner).

Eksempel på en minimal nginx-konfiguration:

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 at lave en lang linje, hvor mvn startes, flytter vi parametrene til en separat variabel DEPENDENCY_OPTS.

Den sidste minimale konfiguration .gitlab-ci.yml vil se sådan ud:

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 sikkerhed
Telegramkanal DevSecOps / SSDLC - Sikker udvikling

Kilde: www.habr.com

Tilføj en kommentar