Gebruik van de kwetsbaarheidsscanner voor gebruikte bibliotheken Dependency-Check in GitlabCI

Een belangrijk onderdeel van kwetsbaarheidsbeheer is het grondig begrijpen en beveiligen van de toeleveringsketen van de softwarecomponenten waaruit moderne systemen bestaan. Agile- en DevOps-teams maken uitgebreid gebruik van open source-bibliotheken en -frameworks om de ontwikkelingstijd en -kosten te verminderen. Maar deze medaille heeft ook een keerzijde: de mogelijkheid om de fouten en kwetsbaarheden van anderen te erven.

Uiteraard moet het team er zeker van zijn dat het weet welke open source-componenten in zijn applicaties zijn opgenomen, ervoor moet zorgen dat bekende betrouwbare versies worden gedownload van bekende betrouwbare bronnen, en bijgewerkte versies van componenten moet downloaden nadat nieuw ontdekte kwetsbaarheden zijn gepatcht.

In dit bericht zullen we kijken naar het gebruik van OWASP Dependency Check om een ​​build af te breken als er ernstige problemen met uw code worden gedetecteerd.

In het boek “Development Security in Agile Projects” wordt het als volgt beschreven. OWASP Dependency Check is een gratis scanner die alle open source-componenten die in een applicatie worden gebruikt catalogiseert en de kwetsbaarheden toont die ze bevatten. Er zijn versies voor Java, .NET, Ruby (gemspec), PHP (componist), Node.js en Python, maar ook voor sommige C/C++-projecten. Dependency Check kan worden geïntegreerd met veelgebruikte buildtools, waaronder Ant, Maven en Gradle, en continue integratieservers zoals Jenkins.

Dependency Check rapporteert alle componenten met bekende kwetsbaarheden uit de National Vulnerability Database (NVD) van NIST en wordt bijgewerkt met gegevens uit NVD-nieuwsfeeds.

Gelukkig kan dit allemaal automatisch worden gedaan met behulp van tools zoals het OWASP Dependency Check-project of commerciële programma's zoals Black Duck, JFrog-röntgenfoto, Snyk, Nexus-levenscyclus Sonatype of BronClear.

Deze tools kunnen worden opgenomen in build-pijplijnen om open source-afhankelijkheden automatisch te inventariseren, verouderde versies van bibliotheken en bibliotheken met bekende kwetsbaarheden te identificeren, en builds af te breken als er ernstige problemen worden gedetecteerd.

OWASP-afhankelijkheidscontrole

Om te testen en te demonstreren hoe Dependency Check werkt, gebruiken we deze repository afhankelijkheid-check-voorbeeld.

Om het HTML-rapport te bekijken, moet je de nginx-webserver op je gitlab-runner configureren.

Voorbeeld van een minimale nginx-configuratie:

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

Aan het einde van de montage ziet u deze foto:

Gebruik van de kwetsbaarheidsscanner voor gebruikte bibliotheken Dependency-Check in GitlabCI

Volg de link en bekijk het rapport Dependency Check.

De eerste schermafbeelding is het bovenste gedeelte van het rapport met een samenvatting.

Gebruik van de kwetsbaarheidsscanner voor gebruikte bibliotheken Dependency-Check in GitlabCI

Tweede screenshotdetails CVE-2017-5638. Hier zien we het CVE-niveau en links naar exploits.

Gebruik van de kwetsbaarheidsscanner voor gebruikte bibliotheken Dependency-Check in GitlabCI

De derde schermafbeelding bevat details van log4j-api-2.7.jar. We zien dat de CVE-niveaus 7.5 en 9.8 zijn.

Gebruik van de kwetsbaarheidsscanner voor gebruikte bibliotheken Dependency-Check in GitlabCI

De vierde schermafbeelding zijn de details van commons-fileupload-1.3.2.jar. We zien dat de CVE-niveaus 7.5 en 9.8 zijn.

Gebruik van de kwetsbaarheidsscanner voor gebruikte bibliotheken Dependency-Check in GitlabCI

Als je gitlab-pagina's wilt gebruiken, zal het niet werken - een gevallen taak zal geen artefact creëren.

Voorbeeld hier https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages.

Bouw uitvoer: geen artefacten, ik zie het HTML-rapport niet. Probeer Artefact: altijd

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

Gebruik van de kwetsbaarheidsscanner voor gebruikte bibliotheken Dependency-Check in GitlabCI

Het reguleren van het niveau van CVE-kwetsbaarheden

De belangrijkste regel in het gitlab-ci.yaml bestand:

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

Met de parameter failBuildOnCVSS kunt u het niveau van CVE-kwetsbaarheden aanpassen waarop u moet reageren.

De NIST Vulnerability Database (NVD) downloaden van internet

Is het u opgevallen dat NIST voortdurend de NIST-kwetsbaarheidsdatabases (NVD) downloadt van internet:

Gebruik van de kwetsbaarheidsscanner voor gebruikte bibliotheken Dependency-Check in GitlabCI

Om te downloaden kunt u het hulpprogramma gebruiken nist_data_mirror_golang

Laten we het installeren en starten.

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 uploadt de NIST JSON CVE naar /var/www/repos/nist-data-mirror/ bij het opstarten en werkt de gegevens elke 24 uur bij.

Om CVE JSON NIST te downloaden, moet je de nginx-webserver configureren (bijvoorbeeld op je gitlab-runner).

Voorbeeld van een minimale nginx-configuratie:

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

}

Om geen lange regel te maken waar mvn wordt gestart, verplaatsen we de parameters naar een aparte variabele DEPENDENCY_OPTS.

De uiteindelijke minimale configuratie .gitlab-ci.yml zal er als volgt uitzien:

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

Telegram-chat over DevOps en beveiliging
Telegramkanaal DevSecOps / SSDLC - Veilige ontwikkeling

Bron: www.habr.com

Voeg een reactie