Brug af sårbarhedsscanner i de anvendte biblioteker Dependency-Check i GitlabCI

En vigtig del af sårbarhedshåndtering er at forstå og sikre forsyningskæden af softwarekomponenter, som moderne systemer bygges op af. Teams, der praktiserer agile metoder og DevOps, bruger i vid udstrækning biblioteker og rammer med open source for at reducere udviklingstid og -omkostninger. Men denne medalje har også en bagside: muligheden for at arve andres fejl og sårbarheder.

Åbenlyst må teamet vide, hvilke open source-komponenter der er inkluderet i deres applikationer, sørge for, at pålidelige versioner downloades fra pålidelige kilder og opdatere komponenter efter at have rettet nyopdagede sårbarheder.

I dette indlæg vil vi se på brugen af OWASP Dependency Check til at stoppe bygningen, hvis der opdages alvorlige problemer med din kode.

I bogen "Sikkerhed i udvikling af Agile-projekter" beskrives det således. OWASP Dependency Check er en gratis scanner, der katalogiserer alle de open source-komponenter, der anvendes i applikationen, og viser de sårbarheder, der findes i dem. Der findes versioner til Java, .NET, Ruby (gemspec), PHP (composer), Node.js og Python, samt for nogle projekter på C/C++. Dependency Check integreres med almindelige byggeværktøjer, herunder Ant, Maven og Gradle samt CI-servere som Jenkins.

Dependency Check rapporterer om alle komponenter med kendte sårbarheder fra NIST's National Vulnerability Database (NVD) og opdateres baseret på data fra NVD's nyhedskanaler.

Heldigvis kan alt dette gøres automatisk ved hjælp af værktøjer som OWASP Dependency Check-projektet eller kommercielle programmer som Black Duck, JFrog Xray, Snyk, Nexus Lifecycle fra firmaet Sonatype eller SourceClear.

Disse værktøjer kan inkluderes i bygge-pipelines for automatisk at oprette en liste over open source-afhængigheder, identificere forældede versioner af biblioteker og biblioteker med kendte sårbarheder og stoppe bygningen, hvis der opdages alvorlige problemer.

OWASP Dependency Check

Til test og demonstration af Dependency Check bruger vi dette repository dependency-check-example.

For at se HTML-rapporten skal du konfigurere en webserver nginx 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 et billede som dette:

Brug af sårbarhedsscanner i de anvendte biblioteker Dependency-Check i GitlabCI

Vi går til linket og ser rapporten Dependency Check.

Det første screenshot - den øverste del af rapporten med et kort indhold.

Brug af sårbarhedsscanner i de anvendte biblioteker Dependency-Check i GitlabCI

Det andet screenshot detaljer om CVE-2017-5638. Her ser vi CVE-niveauet og links til exploits.

Brug af sårbarhedsscanner i de anvendte biblioteker Dependency-Check i GitlabCI

Det tredje screenshot - detaljer om log4j-api-2.7.jar. Vi ser at CVE-niveauerne er 7,5 og 9,8.

Brug af sårbarhedsscanner i de anvendte biblioteker Dependency-Check i GitlabCI

Det fjerde screenshot - detaljer om commons-fileupload-1.3.2.jar. Vi ser at CVE-niveauerne er 7,5 og 9,8.

Brug af sårbarhedsscanner i de anvendte biblioteker Dependency-Check i GitlabCI

Hvis du vil bruge gitlab pages, så vil det ikke fungere - en mislykket opgave vil ikke skabe et artefakt.

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

Udfaldet af samlingen: der er ingen artefakter, jeg kan ikke se html-rapporten. Skal prøve Artifact: always

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

Brug af sårbarhedsscanner i de anvendte biblioteker Dependency-Check i GitlabCI

Regulering af CVE-niveauet for sårbarheder

Den vigtigste linje i filen gitlab-ci.yaml:

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

Med parameteren failBuildOnCVSS kan du regulere CVE-niveauet for sårbarheder, som der skal reageres på.

Download af sårbarhedsdatabasen (NVD) NIST fra internettet

Du har bemærket, at den konstant downloader sårbarhedsdatabaser (NVD) NIST fra internettet:

Brug af sårbarhedsscanner i de anvendte biblioteker Dependency-Check i GitlabCI

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

For at downloade CVE JSON NIST skal du konfigurere webserveren nginx (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 at undgå at lave en lang linje hvor mvn køres, lad os flytte parametrene til en separat variabel DEPENDENCY_OPTS.

Den resulterende minimale konfiguration .gitlab-ci.yml vil se således ud:

variabler:
  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 om DevOps og sikkerhed
Telegram-kanal DevSecOps / SSDLC - Sikker udvikling

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster