Dependency-Check ist ein SCA-Tool (Software Composition Analysis), das versucht, öffentlich bekannt gegebene Schwachstellen in den Abhängigkeiten eines Projekts zu erkennen. Dazu wird ermittelt, ob für eine bestimmte Abhängigkeit eine CPE-Kennung (Common Platform Enumeration) vorhanden ist. Wenn es gefunden wird, wird ein Bericht generiert, der auf die zugehörigen CVE-Einträge verweist.
Dokumentation und Links zu Produktionsbinärversionen finden Sie auf den Github-Seiten. Darüber hinaus finden Sie im Wiki weitere Informationen zur Architektur und Möglichkeiten zur Erweiterung der Abhängigkeitsprüfung.
Dieses Produkt verwendet die NVD-API, ist jedoch nicht vom NVD unterstützt oder zertifiziert.
Java 11 ist jetzt erforderlich, um die Abhängigkeitsprüfung 11.0.0 oder höher auszuführen
H2-Datenbank-Upgrade
11.0.0 enthält wichtige Änderungen, die die lokale H2-Datenbank nutzen. Es erfolgt ein vollständiger Download der NVD-Daten. Beachten Sie, dass die h2-Datenbankdatei nicht mit älteren Versionen der Abhängigkeitsprüfung kompatibel ist, wenn Sie ein gemeinsam genutztes Datenverzeichnis verwenden. Wenn Probleme auftreten, müssen Sie möglicherweise eine Bereinigung durchführen:
./gradlew dependencyCheckPurge
mvn org.owasp:dependency-check-maven:9.0.0:purge
dependency-check.sh --purge
Ein Upgrade auf 10.0.2 oder höher ist obligatorisch
Ältere Versionen der Abhängigkeitsprüfung verursachen zahlreiche doppelte Anfragen, die zu Verarbeitungsfehlern führen und die NVD-API unnötig belasten. Die Abhängigkeitsprüfung 10.0.2 verwendet einen aktualisierten User-Agent
Header, der es dem NVD ermöglicht, Anrufe vom älteren Client zu blockieren.
Die Abhängigkeitsprüfung wurde von der Verwendung des NVD-Datenfeeds auf die NVD-API umgestellt. Benutzern der Abhängigkeitsprüfung wird dringend empfohlen, einen NVD-API-Schlüssel zu erhalten. siehe https://nvd.nist.gov/developers/request-an-api-key. Ohne einen NVD-API-Schlüssel sind die Aktualisierungen der Abhängigkeitsprüfung extrem langsam . Informationen zum Festlegen des NVD-API-Schlüssels finden Sie in der Dokumentation zu den CLI-, Maven-, Gradle- oder Ant-Integrationen.
Die NVD-API hat erzwungene Ratenbeschränkungen. Wenn Sie einen einzelnen API-SCHLÜSSEL verwenden und mehrere Builds ausgeführt werden, kann es sein, dass Sie das Ratenlimit erreichen und 403-Fehler erhalten. In einer CI-Umgebung muss eine Caching-Strategie verwendet werden.
Mit 9.0.0 können Benutzer aufgrund der Abhängigkeitsauflösung auf Probleme mit NoSuchMethodError
-Ausnahmen stoßen. Wenn dieses Problem auftritt, müssen Sie einige der transitiven Abhängigkeiten der Abhängigkeitsprüfung an bestimmte Versionen anheften. Zum Beispiel:
/buildSrc/build.gradle
dependencies {
constraints {
// org.owasp.dependencycheck needs at least this version of jackson. Other plugins pull in older versions..
add( " implementation " , " com.fasterxml.jackson:jackson-bom:2.16.1 " )
// org.owasp.dependencycheck needs these versions. Other plugins pull in older versions..
add( " implementation " , " org.apache.commons:commons-lang3:3.14.0 " )
add( " implementation " , " org.apache.commons:commons-text:1.11.0 " )
}
}
Mindest-Java-Version: Java 11
Die OWASP-Abhängigkeitsprüfung erfordert Zugriff auf mehrere extern gehostete Ressourcen. Weitere Informationen finden Sie unter Internetzugang erforderlich.
Um einige Technologie-Stacks für die Abhängigkeitsprüfung zu analysieren, ist möglicherweise die Installation anderer Entwicklungstools erforderlich. Einige der unten aufgeführten Analysen können experimenteller Natur sein und erfordern die Aktivierung der experimentellen Analysegeräte.
go
installiert sein.Elixir
-Projekten erfordert mix_audit
.npm
, pnpm
und yarn
erfordert die Installation von npm
, pnpm
oder yarn
.audit
.bundle-audit
, der installiert werden muss. Anweisungen zur Verwendung des Jenkins-Plugins finden Sie auf der Seite „OWASP Dependency-Check Plugin“.
Ausführlichere Anweisungen finden Sie auf den Github-Seiten zur Abhängigkeitsprüfung. Die neueste CLI kann von Github im Abschnitt „Releases“ heruntergeladen werden.
Laden Sie die neueste Version herunter:
$ VERSION=$(curl -s https://jeremylong.github.io/DependencyCheck/current.txt)
$ curl -Ls "https://github.com/jeremylong/DependencyCheck/releases/download/v$VERSION/dependency-check-$VERSION-release.zip" --output dependency-check.zip
Auf *nix
$ ./bin/dependency-check.sh -h
$ ./bin/dependency-check.sh --out . --scan [path to jar files to be scanned]
Unter Windows
> .bindependency-check.bat -h
> .bindependency-check.bat --out . --scan [path to jar files to be scanned]
Auf Mac mit Homebrew Hinweis: Homebrew-Benutzer, die von 5.x auf 6.0.0 aktualisieren, müssen dependency-check.sh --purge
ausführen.
$ brew update && brew install dependency-check
$ dependency-check -h
$ dependency-check --out . --scan [path to jar files to be scanned]
Ausführlichere Anweisungen finden Sie auf den Github-Seiten dependency-check-maven. Standardmäßig ist das Plugin an die verify
gebunden (z. B. mvn verify
). Alternativ kann man das Plugin direkt über mvn org.owasp:dependency-check-maven:check
aufrufen.
Das Abhängigkeitsprüfungs-Plugin kann wie folgt konfiguriert werden:
< project >
< build >
< plugins >
...
< plugin >
< groupId >org.owasp groupId >
< artifactId >dependency-check-maven artifactId >
< executions >
< execution >
< goals >
< goal >check goal >
goals >
execution >
executions >
plugin >
...
plugins >
...
build >
...
project >
Anweisungen zur Verwendung des Gradle-Plugins finden Sie auf der Github-Seite dependency-check-gradle.
Anweisungen zur Verwendung des Ant Task finden Sie auf der Github-Seite dependency-check-ant.
Damit die Installation erfolgreich ist, müssen die folgenden Komponenten installiert sein:
java -version
11.0mvn -version
3.5.0 und höherTestfälle erfordern:
go version
1.12 und höherDie folgenden Anweisungen beschreiben, wie Sie den aktuellen Snapshot kompilieren und verwenden. Obwohl die Absicht darin besteht, einen stabilen Snapshot aufrechtzuerhalten, wird empfohlen, die oben aufgeführten Release-Versionen zu verwenden.
Das Repository enthält aufgrund von Testressourcen einige große Dateien. Das Team hat versucht, die Geschichte so weit wie möglich zu bereinigen. Es wird jedoch empfohlen, einen flachen Klon durchzuführen, um Zeit zu sparen:
git clone --depth 1 https://github.com/jeremylong/DependencyCheck.git
Auf *nix
$ mvn -s settings.xml install
$ ./cli/target/release/bin/dependency-check.sh -h
$ ./cli/target/release/bin/dependency-check.sh --out . --scan ./src/test/resources
Unter Windows
> mvn -s settings.xml install
> .clitargetreleasebindependency-check.bat -h
> .clitargetreleasebindependency-check.bat --out . --scan ./src/test/resources
Laden Sie dann die resultierende Datei „dependency-check-report.html“ in Ihren bevorzugten Browser.
Um Ihre Durchlaufzeiten zu verkürzen, können Sie auch kompilieren, ohne die Tests jedes Mal auszuführen:
mvn -s settings.xml install -DskipTests=true
Bitte denken Sie daran, die Tests mindestens einmal durchzuführen, bevor Sie die PR öffnen. :) :)
Um Ihre Tests in IntelliJ Idea debuggen zu können, können Sie eine Maven-Konfiguration einführen, die Ihren Test ausführt und das Debuggen mit Haltepunkten usw. ermöglicht.
Im Grunde tun Sie das, was unter https://www.jetbrains.com/help/idea/work-with-tests-in-maven.html#run_single_test beschrieben ist, und setzen den forkCount
auf 0, sonst funktioniert das Debuggen nicht.
Schritt für Schritt:
Run -> Edit Configurations
+ (Add new configuration) -> Maven
Run tests
core
command line
-DforkCount=0 -f pom.xml -s ../settings.xml test
einOK
Run -> Debug
und dann die neu erstellte Ausführungskonfiguration auswählen IntelliJ führt nun den Testlauf für das core
mit aktiviertem Debugging durch. An einer beliebigen Stelle im Code festgelegte Haltepunkte sollten funktionieren.
Wenn Sie Ihre Durchlaufzeiten verkürzen möchten, können Sie auch nur eine Funktion oder eine Testklasse testen.
Dies funktioniert durch Hinzufügen von -Dtest=MyTestClass
oder -Dtest=MyTestClass#myTestFunction
zur Laufkonfiguration. Die vollständige Befehlszeile in der Ausführungskonfiguration wäre dann:
-Dtest=MyTestClass#myTestFunction -DforkCount=0 -f pom.xml -s ../settings.xml test
Im folgenden Beispiel wird davon ausgegangen, dass sich die zu überprüfende Quelle im aktuellen Arbeitsverzeichnis befindet und die Berichte in $(pwd)/odc-reports
geschrieben werden. Es werden persistente Daten- und Cache-Verzeichnisse verwendet, sodass Sie den Container nach der Ausführung zerstören können.
Für Linux:
#! /bin/sh
DC_VERSION= " latest "
DC_DIRECTORY= $HOME /OWASP-Dependency-Check
DC_PROJECT= " dependency-check scan: $( pwd ) "
DATA_DIRECTORY= " $DC_DIRECTORY /data "
CACHE_DIRECTORY= " $DC_DIRECTORY /data/cache "
if [ ! -d " $DATA_DIRECTORY " ] ; then
echo " Initially creating persistent directory: $DATA_DIRECTORY "
mkdir -p " $DATA_DIRECTORY "
fi
if [ ! -d " $CACHE_DIRECTORY " ] ; then
echo " Initially creating persistent directory: $CACHE_DIRECTORY "
mkdir -p " $CACHE_DIRECTORY "
fi
# Make sure we are using the latest version
docker pull owasp/dependency-check: $DC_VERSION
docker run --rm
-e user= $USER
-u $( id -u ${USER} ) : $( id -g ${USER} )
--volume $( pwd ) :/src:z
--volume " $DATA_DIRECTORY " :/usr/share/dependency-check/data:z
--volume $( pwd ) /odc-reports:/report:z
owasp/dependency-check: $DC_VERSION
--scan /src
--format " ALL "
--project " $DC_PROJECT "
--out /report
# Use suppression like this: (where /src == $pwd)
# --suppression "/src/security/dependency-check-suppression.xml"
Für Windows:
@ echo off
set DC_VERSION = " latest "
set DC_DIRECTORY = %USERPROFILE% OWASP-Dependency-Check
SET DC_PROJECT = " dependency-check scan: %CD% "
set DATA_DIRECTORY = " %DC_DIRECTORY% data "
set CACHE_DIRECTORY = " %DC_DIRECTORY% datacache "
IF NOT EXIST %DATA_DIRECTORY% (
echo Initially creating persistent directory: %DATA_DIRECTORY%
mkdir %DATA_DIRECTORY%
)
IF NOT EXIST %CACHE_DIRECTORY% (
echo Initially creating persistent directory: %CACHE_DIRECTORY%
mkdir %CACHE_DIRECTORY%
)
rem Make sure we are using the latest version
docker pull owasp/dependency-check: %DC_VERSION%
docker run --rm ^
--volume %CD% :/src ^
--volume %DATA_DIRECTORY% :/usr/share/dependency-check/data ^
--volume %CD% /odc-reports:/report ^
owasp/dependency-check: %DC_VERSION% ^
--scan /src ^
--format " ALL " ^
--project " %DC_PROJECT% " ^
--out /report
rem Use suppression like this: (where /src == %CD%)
rem --suppression "/src/security/dependency-check-suppression.xml"
Um eine Abhängigkeitsprüfung zu erstellen (mit Java 11), führen Sie den folgenden Befehl aus:
mvn -s settings.xml install
Die Abhängigkeitsprüfung verweist auf mehrere anfällige Abhängigkeiten, die nur als Testressourcen verwendet werden. Alle diese optionalen Testabhängigkeiten sind im test-dependencies
enthalten. Um die Abhängigkeitsprüfung gegen sich selbst auszuführen, schließen Sie einfach das test-dependencies
aus:
mvn org.owasp:dependency-check-maven:aggregate -P-test-dependencies -DskipProvidedScope=true
Die Dokumentation auf den Github-Seiten wird aus diesem Repository generiert:
mvn -s settings.xml site site:staging
Wenn Sie fertig sind, richten Sie Ihren Browser auf ./target/staging/index.html
.
Um ein Docker-Image mit Abhängigkeitsprüfung zu erstellen, führen Sie den folgenden Befehl aus:
mvn -s settings.xml install
./build-docker.sh
Die Erlaubnis zur Änderung und Weiterverbreitung wird gemäß den Bedingungen der Apache 2.0-Lizenz erteilt. Die vollständige Lizenz finden Sie in der Datei LICENSE.txt.
Dependency-Check nutzt mehrere andere Open-Source-Bibliotheken. Weitere Informationen finden Sie in der Datei NOTICE.txt.
Dieses Produkt verwendet die NVD-API, ist jedoch nicht vom NVD unterstützt oder zertifiziert.
Copyright (c) 2012-2024 Jeremy Long. Alle Rechte vorbehalten.