Använda sårbarhetsskannern för använda bibliotek Dependency-Check i GitlabCI

En viktig del av sårbarhetshanteringen är att grundligt förstå och säkra leveranskedjan för de mjukvarukomponenter som utgör moderna system. Agile- och DevOps-team använder i stor utsträckning bibliotek och ramverk med öppen källkod för att minska utvecklingstiden och -kostnaderna. Men den här medaljen har också en baksida: möjligheten att ärva andras misstag och sårbarheter.

Självklart bör teamet vara säker på att veta vilka komponenter med öppen källkod som ingår i dess applikationer, se till att kända tillförlitliga versioner laddas ner från kända tillförlitliga källor och ladda ner uppdaterade versioner av komponenter efter att nyupptäckta sårbarheter har korrigerats.

I det här inlägget kommer vi att titta på att använda OWASP Dependency Check för att avbryta en build om den upptäcker allvarliga problem med din kod.

I boken ”Utvecklingssäkerhet i agila projekt” beskrivs det enligt följande. OWASP Dependency Check är en gratis skanner som katalogiserar alla komponenter med öppen källkod som används i ett program och visar vilka sårbarheter de innehåller. Det finns versioner för Java, .NET, Ruby (gemspec), PHP (kompositör), Node.js och Python, samt för vissa C/C++-projekt. Dependency Check integreras med vanliga byggverktyg, inklusive Ant, Maven och Gradle, och kontinuerliga integrationsservrar som Jenkins.

Dependency Check rapporterar alla komponenter med kända sårbarheter från NIST:s National Vulnerability Database (NVD) och uppdateras med data från NVDs nyhetsflöden.

Lyckligtvis kan allt detta göras automatiskt med hjälp av verktyg som OWASP Dependency Check-projektet eller kommersiella program som Svart Anka, JFrog Xray, Snyk, Nexus livscykel Sonatyp eller SourceClear.

Dessa verktyg kan inkluderas i byggpipelines för att automatiskt inventera beroenden av öppen källkod, identifiera föråldrade versioner av bibliotek och bibliotek som innehåller kända sårbarheter och avbryta byggen om allvarliga problem upptäcks.

OWASP beroendekontroll

För att testa och demonstrera hur beroendekontroll fungerar använder vi det här arkivet beroende-kontroll-exempel.

För att se HTML-rapporten måste du konfigurera nginx-webbservern på din gitlab-runner.

Exempel 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 slutet av monteringen kan du se denna bild:

Använda sårbarhetsskannern för använda bibliotek Dependency-Check i GitlabCI

Följ länken och se rapporten om beroendekontroll.

Den första skärmdumpen är den övre delen av rapporten med en sammanfattning.

Använda sårbarhetsskannern för använda bibliotek Dependency-Check i GitlabCI

Andra skärmdumpdetaljer CVE-2017-5638. Här ser vi CVE-nivån och länkar till exploits.

Använda sårbarhetsskannern för använda bibliotek Dependency-Check i GitlabCI

Den tredje skärmdumpen är detaljer om log4j-api-2.7.jar. Vi ser att CVE-nivåerna är 7.5 och 9.8.

Använda sårbarhetsskannern för använda bibliotek Dependency-Check i GitlabCI

Den fjärde skärmdumpen är detaljerna för commons-fileupload-1.3.2.jar. Vi ser att CVE-nivåerna är 7.5 och 9.8.

Använda sårbarhetsskannern för använda bibliotek Dependency-Check i GitlabCI

Om du vill använda gitlab-sidor kommer det inte att fungera - en fallen uppgift kommer inte att skapa en artefakt.

Exempel här https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages.

Bygg utdata: inga artefakter, jag ser inte html-rapporten. Du bör prova Artifact: alltid

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

Använda sårbarhetsskannern för använda bibliotek Dependency-Check i GitlabCI

Reglera nivån på CVE-sårbarheter

Den viktigaste raden i gitlab-ci.yaml-filen:

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

Med parametern failBuildOnCVSS kan du justera nivån på CVE-sårbarheter som du behöver svara på.

Ladda ner NIST Vulnerability Database (NVD) från Internet

Har du märkt att NIST ständigt laddar ner NIST vulnerability databases (NVD) från Internet:

Använda sårbarhetsskannern för använda bibliotek Dependency-Check i GitlabCI

För att ladda ner kan du använda verktyget nist_data_mirror_golang

Låt oss installera och starta 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 laddar upp NIST JSON CVE till /var/www/repos/nist-data-mirror/ vid uppstart och uppdaterar data var 24:e timme.

För att ladda ner CVE JSON NIST måste du konfigurera nginx-webbservern (till exempel på din gitlab-runner).

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

}

För att inte göra en lång rad där mvn startas kommer vi att flytta parametrarna till en separat variabel DEPENDENCY_OPTS.

Den sista minimala konfigurationen .gitlab-ci.yml kommer att se ut så här:

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

Telegramchatt om DevOps och säkerhet
Telegramkanal DevSecOps / SSDLC - Säker utveckling

Källa: will.com

Lägg en kommentar