Dependency-Check es una herramienta de análisis de composición de software (SCA) que intenta detectar vulnerabilidades divulgadas públicamente contenidas en las dependencias de un proyecto. Para ello, determina si existe un identificador de enumeración de plataforma común (CPE) para una dependencia determinada. Si lo encuentra, generará un informe que vincula a las entradas CVE asociadas.
La documentación y los enlaces a las versiones binarias de producción se pueden encontrar en las páginas de github. Además, en la wiki se puede encontrar más información sobre la arquitectura y las formas de ampliar la verificación de dependencia.
Este producto utiliza la API NVD pero no está respaldado ni certificado por NVD.
Ahora se requiere Java 11 para ejecutar la verificación de dependencia 11.0.0 o superior
Actualización de la base de datos H2
11.0.0 contiene cambios importantes utilizando la base de datos H2 local. Se producirá una descarga completa de los datos NVD. Tenga en cuenta que si está utilizando un directorio de datos compartido, el archivo de base de datos h2 no es compatible con versiones anteriores de dependency-check. Si tiene problemas, es posible que deba realizar una purga:
./gradlew dependencyCheckPurge
mvn org.owasp:dependency-check-maven:9.0.0:purge
dependency-check.sh --purge
La actualización a 10.0.2 o posterior es obligatoria
Las versiones anteriores de verificación de dependencia están provocando numerosas solicitudes duplicadas que terminan en fallas de procesamiento y provocan una carga innecesaria en la API NVD. Dependency-check 10.0.2 utiliza un encabezado User-Agent
actualizado que permitirá al NVD bloquear llamadas del cliente anterior.
La verificación de dependencia ha pasado del uso de la fuente de datos NVD a la API NVD. Se recomienda encarecidamente a los usuarios de verificación de dependencia que obtengan una clave API NVD; consulte https://nvd.nist.gov/developers/request-an-api-key Sin una clave NVD API, las actualizaciones de la verificación de dependencia serán extremadamente lentas . Consulte la documentación de las integraciones cli, maven, gradle o ant sobre cómo configurar la clave API NVD.
La API NVD ha impuesto límites de velocidad. Si está utilizando una única CLAVE API y se producen varias compilaciones, podría alcanzar el límite de velocidad y recibir errores 403. En un entorno de CI se debe utilizar una estrategia de almacenamiento en caché.
Con la versión 9.0.0, los usuarios pueden encontrar problemas con las excepciones NoSuchMethodError
debido a la resolución de dependencias. Si encuentra este problema, deberá fijar algunas de las dependencias transitivas de dependency-check a versiones específicas. Por ejemplo:
/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 " )
}
}
Versión mínima de Java: Java 11
La verificación de dependencia de OWASP requiere acceso a varios recursos alojados externamente. Para obtener más información, consulte Se requiere acceso a Internet.
Para analizar algunas pilas de tecnología, la verificación de dependencia puede requerir la instalación de otras herramientas de desarrollo. Algunos de los análisis enumerados a continuación pueden ser experimentales y requerir que los analizadores experimentales estén habilitados.
go
.Elixir
requiere mix_audit
.npm
, pnpm
e yarn
requiere la instalación de npm
, pnpm
o yarn
.audit
respectiva de cada uno.bundle-audit
, que debe instalarse. Para obtener instrucciones sobre el uso del complemento Jenkins, consulte la página del complemento OWASP Dependency-Check.
Se pueden encontrar instrucciones más detalladas en las páginas de github de verificación de dependencia. La última CLI se puede descargar desde github en la sección de versiones.
Descargando la última versión:
$ 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
En *nada
$ ./bin/dependency-check.sh -h
$ ./bin/dependency-check.sh --out . --scan [path to jar files to be scanned]
En Windows
> .bindependency-check.bat -h
> .bindependency-check.bat --out . --scan [path to jar files to be scanned]
En Mac con Homebrew Note, los usuarios de Homebrew que actualicen de 5.x a 6.0.0 deberán ejecutar dependency-check.sh --purge
.
$ brew update && brew install dependency-check
$ dependency-check -h
$ dependency-check --out . --scan [path to jar files to be scanned]
Se pueden encontrar instrucciones más detalladas en las páginas de github de dependency-check-maven. De forma predeterminada, el complemento está vinculado a la fase verify
(es decir, mvn verify
). Alternativamente, se puede invocar directamente el complemento a través de mvn org.owasp:dependency-check-maven:check
.
El complemento de verificación de dependencia se puede configurar usando lo siguiente:
< 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 >
Para obtener instrucciones sobre el uso del complemento Gradle, consulte la página de github dependency-check-gradle.
Para obtener instrucciones sobre el uso de Ant Task, consulte la página de github dependency-check-ant.
Para que la instalación se realice, debe tener instalados los siguientes componentes:
java -version
11.0mvn -version
3.5.0 y superiorLos casos de prueba requieren:
go version
1.12 y superiorLas siguientes instrucciones describen cómo compilar y utilizar la instantánea actual. Si bien toda la intención es mantener una instantánea estable, se recomienda utilizar las versiones de lanzamiento enumeradas anteriormente.
El repositorio tiene algunos archivos grandes debido a los recursos de prueba. El equipo ha intentado limpiar la historia lo máximo posible. Sin embargo, se recomienda realizar una clonación superficial para ahorrar tiempo:
git clone --depth 1 https://github.com/jeremylong/DependencyCheck.git
En *nada
$ 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
En Windows
> mvn -s settings.xml install
> .clitargetreleasebindependency-check.bat -h
> .clitargetreleasebindependency-check.bat --out . --scan ./src/test/resources
Luego cargue el 'dependency-check-report.html' resultante en su navegador favorito.
Para acelerar los tiempos del ciclo de respuesta, también puede compilar sin ejecutar las pruebas cada vez:
mvn -s settings.xml install -DskipTests=true
Recuerde ejecutar al menos las pruebas una vez antes de abrir el PR. :)
Para poder depurar sus pruebas en IntelliJ Idea, puede introducir una configuración maven que ejecute su prueba y permita la depuración con puntos de interrupción, etc.
Básicamente, haces lo que se describe en https://www.jetbrains.com/help/idea/work-with-tests-in-maven.html#run_single_test y estableces forkCount
en 0; de lo contrario, la depuración no funcionará.
Paso a paso:
Run -> Edit Configurations
+ (Add new configuration) -> Maven
Run tests
core
command line
, ingrese -DforkCount=0 -f pom.xml -s ../settings.xml test
OK
Run -> Debug
, luego elija la configuración de ejecución recién creada IntelliJ ahora ejecutará la ejecución de prueba para el subproyecto core
con la depuración habilitada. Los puntos de interrupción establecidos en cualquier parte del código deberían funcionar.
Si desea acelerar los tiempos de ciclo de respuesta, también puede probar simplemente una función o una clase de prueba.
Esto funciona agregando -Dtest=MyTestClass
o -Dtest=MyTestClass#myTestFunction
a la configuración de ejecución. La línea de comando completa en la configuración de ejecución sería:
-Dtest=MyTestClass#myTestFunction -DforkCount=0 -f pom.xml -s ../settings.xml test
En el siguiente ejemplo, se supone que la fuente que se va a verificar está en el directorio de trabajo actual y los informes se escribirán en $(pwd)/odc-reports
. Se utilizan directorios de caché y datos persistentes, lo que le permite destruir el contenedor después de ejecutarlo.
Para 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"
Para 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"
Para crear una verificación de dependencia (usando Java 11), ejecute el comando:
mvn -s settings.xml install
La verificación de dependencia hace referencia a varias dependencias vulnerables que nunca se utilizan excepto como recursos de prueba. Todas estas dependencias de prueba opcionales se incluyen en el perfil test-dependencies
. Para ejecutar la verificación de dependencia contra sí mismo, simplemente excluya el perfil de test-dependencies
:
mvn org.owasp:dependency-check-maven:aggregate -P-test-dependencies -DskipProvidedScope=true
La documentación en las páginas de github se genera desde este repositorio:
mvn -s settings.xml site site:staging
Una vez hecho esto, apunte su navegador a ./target/staging/index.html
.
Para crear una imagen acoplable de verificación de dependencia, ejecute el comando:
mvn -s settings.xml install
./build-docker.sh
El permiso para modificar y redistribuir se otorga según los términos de la licencia Apache 2.0. Consulte el archivo LICENSE.txt para obtener la licencia completa.
Dependency-Check utiliza varias otras bibliotecas de código abierto. Consulte el archivo NOTICE.txt para obtener más información.
Este producto utiliza la API NVD pero no está respaldado ni certificado por NVD.
Copyright (c) 2012-2024 Jeremy Long. Reservados todos los derechos.