Verwenden des Vulnerability Scanners in in GitlabCI verwendeten Abhängigkeitsprüfungsbibliotheken

Ein wichtiger Bestandteil des Schwachstellenmanagements ist das Verständnis und die Gewährleistung der Sicherheit der Lieferkette der Softwarekomponenten, aus denen moderne Systeme bestehen. Agile Teams und DevOps nutzen Open Source-Bibliotheken und Frameworks in großem Umfang, um Entwicklungszeit und -kosten zu reduzieren. Aber diese Medaille hat einen Nachteil: die Fähigkeit, die Fehler und Schwachstellen anderer Menschen zu erben.


Das Team muss natürlich wissen, welche Open-Source-Komponenten in seinen Anwendungen enthalten sind, sicherstellen, dass bekanntermaßen zuverlässige Versionen von bekanntermaßen zuverlässigen Quellen heruntergeladen werden, und aktualisierte Versionen der Komponenten herunterladen, nachdem neu entdeckte Sicherheitsanfälligkeiten behoben wurden.


In diesem Beitrag wird die Verwendung der OWASP-Abhängigkeitsprüfung zum Unterbrechen eines Builds untersucht, wenn schwerwiegende Probleme mit Ihrem Code auftreten.


Das Buch "Entwicklungssicherheit in agilen Projekten" wird wie folgt beschrieben. OWASP Dependency Check ist ein kostenloser Scanner, der alle in der Anwendung verwendeten Open Source-Komponenten katalogisiert und die darin vorhandenen Schwachstellen aufzeigt. Es gibt Versionen für Java, .NET, Ruby (gemspec), PHP (composer), Node.js und Python sowie für einige C / C ++ - Projekte. Der Abhängigkeits-Check lässt sich in gängige Build-Tools wie Ant, Maven und Gradle sowie in Continuous-Integration-Server wie Jenkins integrieren.


Die Abhängigkeitsprüfung meldet alle Komponenten mit bekannten Schwachstellen aus der NIST National Vulnerability Database (NVD) und wird basierend auf Daten aus den NVD-Nachrichtenkanälen aktualisiert.


Glücklicherweise kann dies alles automatisch mithilfe von Tools wie dem OWASP Dependency Check-Projekt oder kommerziellen Programmen wie Black Duck , JFrog Xray , Snyk , Nexus Lifecycle von Sonatype oder SourceClear erfolgen .


Diese Tools können in Assembly-Pipelines enthalten sein, um automatisch eine Open-Source-Abhängigkeitsliste zu kompilieren, veraltete Versionen von Bibliotheken und Bibliotheken mit bekannten Schwachstellen zu identifizieren und den Build zu unterbrechen, wenn schwerwiegende Probleme festgestellt werden.


OWASP-Abhängigkeitsprüfung


Um zu testen und zu demonstrieren, wie die Abhängigkeitsprüfung funktioniert, verwenden wir dieses Beispielrepository für die Abhängigkeitsprüfung .


Um den HTML-Bericht anzuzeigen, müssen Sie den nginx-Webserver auf Ihrem gitlab-runner konfigurieren.


Beispiel für eine minimale 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 { } } 

Am Ende der Montage sehen Sie folgendes Bild:



Wir folgen dem Link und sehen den Bericht Abhängigkeitsprüfung.


Der erste Screenshot befindet sich oben im Bericht und enthält eine Zusammenfassung.



Details zum zweiten Screenshot CVE-2017-5638. Hier sehen wir die CVE-Ebene und Links zu Exploits.



Der dritte Screenshot zeigt die Details von log4j-api-2.7.jar. Wir sehen, dass die Niveaus von CVE 7.5 und 9.8.



Vierter Screenshot - Details der Datei commons-fileupload-1.3.2.jar. Wir sehen, dass die Niveaus von CVE 7.5 und 9.8.



Wenn Sie gitlab-Seiten verwenden möchten, funktioniert dies nicht - eine gelöschte Aufgabe erzeugt kein Artefakt.


Ein Beispiel ist hier https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages .


Fazit der Versammlung: Es gibt keine Artefakte. Ich sehe den HTML-Bericht nicht. Wir müssen Artefakt versuchen: immer


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



CVE-Schwachstellenmanagement

Die wichtigste Zeile in der Datei gitlab-ci.yaml:


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

Mit dem Parameter failBuildOnCVSS können Sie die Ebene der CVE-Sicherheitsanfälligkeiten steuern, auf die Sie reagieren müssen.


NIST Vulnerability Database (NVD) herunterladen

Sie haben festgestellt, dass Sie die NIST Vulnerability Database (NVD) ständig aus dem Internet herunterladen:



Sie können das Dienstprogramm nist_data_mirror_golang zum Herunterladen verwenden


Installieren Sie es und führen Sie es aus.


 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 lädt CVE JSON NIST beim Start nach / var / www / repos / nist-data-mirror / herunter und aktualisiert die Daten alle 24 Stunden.


Um CVE JSON NIST herunterzuladen, müssen Sie den Nginx-Webserver konfigurieren (z. B. auf Ihrem Gitlab-Runner).


Beispiel für eine minimale 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 { } } 

Um keine lange Zeile zu machen, in der mvn gestartet wird, geben wir die Parameter in einer separaten Variablen DEPENDENCY_OPTS aus.


Die endgültige minimale config .gitlab-ci.yml sieht dann so aus:


 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 

Telegramm-Chat über DevOps und Sicherheit
Telegrammkanal DevSecOps / SSDLC - Sichere Entwicklung

Source: https://habr.com/ru/post/de483716/


All Articles