AnvÀndning av sÄrbarhetssökare i de bibliotek som anvÀnds i Dependency-Check i GitlabCI

En viktig del av sÄrbarhetshantering Àr att förstÄ och sÀkerstÀlla sÀkerheten i leveranskedjan för mjukvarukomponenter som moderna system bygger pÄ. Team som praktiserar agila metoder och DevOps anvÀnder i stor utstrÀckning bibliotek och ramverk med öppen kÀllkod för att minska utvecklingstid och kostnader. Men denna medalj har ocksÄ en baksida: risken att Àrva andras misstag och sÄrbarheter.

Det Àr uppenbart att teamet mÄste veta vilka komponenter med öppen kÀllkod som ingÄr i deras applikationer, se till att betrodda versioner laddas ner frÄn pÄlitliga kÀllor och ladda ner uppdaterade versioner av komponenter efter att nyupptÀckta sÄrbarheter har ÄtgÀrdats.

I det hÀr inlÀgget kommer vi att titta pÄ hur man anvÀnder OWASP Dependency Check för att avbryta byggprocessen om allvarliga problem upptÀcks i din kod.

I boken "SÀkerhet i utveckling av Agile-projekt" beskrivs det sÄ. OWASP Dependency Check Àr en gratis skanner som katalogiserar alla komponenter med öppen kÀllkod som anvÀnds i applikationen och visar kÀnda sÄrbarheter. Det finns versioner för Java, .NET, Ruby (gemspec), PHP (composer), Node.js och Python samt vissa projekt pÄ C/C++. Dependency Check integreras med vanliga byggverktyg som Ant, Maven och Gradle samt CI-servrar som Jenkins.

Dependency Check rapporterar alla komponenter med kÀnda sÄrbarheter frÄn NIST:s National Vulnerability Database (NVD) och uppdateras baserat pÄ data frÄn NVD:s nyhetskanaler.

Lyckligtvis kan allt detta automatiseras med hjÀlp av verktyg som OWASP Dependency Check-projektet, eller kommersiella program som Black Duck, JFrog Xray, Snyk, Nexus Lifecycle frÄn Sonatype eller SourceClear.

Dessa verktyg kan integreras i byggprocesser för att automatiskt skapa en inventering av beroenden med öppen kÀllkod, identifiera förÄldrade versioner av bibliotek och bibliotek som innehÄller kÀnda sÄrbarheter, samt avbryta byggprocessen vid upptÀckte allvarliga problem.

OWASP Dependency Check

För att testa och demonstrera hur Dependency Check fungerar anvÀnder vi detta repository dependency-check-example.

För att visa HTML-rapporten behöver du konfigurera en webserver nginx 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 byggprocessen kan du se en sÄdan bild:

AnvÀndning av sÄrbarhetssökare i de bibliotek som anvÀnds i Dependency-Check i GitlabCI

Vi gÄr till lÀnken och ser rapporten Dependency Check.

Den första skĂ€rmdumpen — den övre delen av rapporten med en sammanfattning.

AnvÀndning av sÄrbarhetssökare i de bibliotek som anvÀnds i Dependency-Check i GitlabCI

Den andra skÀrmdumpen detaljer om CVE-2017-5638. HÀr ser vi CVE-nivÄn och lÀnkar till exploiter.

AnvÀndning av sÄrbarhetssökare i de bibliotek som anvÀnds i Dependency-Check i GitlabCI

Den tredje skĂ€rmdumpen — detaljer om log4j-api-2.7.jar. Vi ser att CVE-nivĂ„erna Ă€r 7.5 och 9.8.

AnvÀndning av sÄrbarhetssökare i de bibliotek som anvÀnds i Dependency-Check i GitlabCI

Den fjĂ€rde skĂ€rmdumpen — detaljer om commons-fileupload-1.3.2.jar. Vi ser att CVE-nivĂ„erna Ă€r 7.5 och 9.8.

AnvÀndning av sÄrbarhetssökare i de bibliotek som anvÀnds i Dependency-Check i GitlabCI

Om du vill anvĂ€nda gitlab pages, sĂ„ gĂ„r det inte — en misslyckad uppgift kommer inte att skapa artefakter.

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

Byggutdata: inga artefakter, jag ser ingen html-rapport. Vi mÄste försöka med Artifact: always

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

AnvÀndning av sÄrbarhetssökare i de bibliotek som anvÀnds i Dependency-Check i GitlabCI

Reglering av CVE-nivÄerna för sÄrbarheter

Den viktigaste raden i filen gitlab-ci.yaml:

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

Med parametern failBuildOnCVSS kan du reglera CVE-nivÄerna pÄ sÄrbarheter som det ska reageras pÄ.

Nedladdning av CVE-databasen (NVD) NIST frÄn internet

Du har mÀrkt att den stÀndigt laddar ner sÄrbarhetsdatabaser (NVD) NIST frÄn internet:

AnvÀndning av sÄrbarhetssökare i de bibliotek som anvÀnds i Dependency-Check i GitlabCI

För nedladdning kan du anvÀnda verktyget nist_data_mirror_golang

Vi installerar och kör 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 laddar ner CVE JSON NIST till /var/www/repos/nist-data-mirror/ vid start och uppdaterar datan var 24:e timme.

För att ladda ner CVE JSON NIST mÄste du konfigurera en web server nginx (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 slippa ha en lÄng rad dÀr mvn körs, lÄter vi parametrarna bli en separat variabel DEPENDENCY_OPTS.

Den slutgiltiga minimala konfigurationen .gitlab-ci.yml blir sÄ hÀr:

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-grupp om DevOps och sÀkerhet
Telegram-kanal DevSecOps / SSDLC - SĂ€kert utveckling

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster