Dependency-Check é uma ferramenta de Análise de Composição de Software (SCA) que tenta detectar vulnerabilidades divulgadas publicamente contidas nas dependências de um projeto. Ele faz isso determinando se existe um identificador CPE (Common Platform Enumeration) para uma determinada dependência. Se encontrado, gerará um relatório vinculado às entradas CVE associadas.
Documentação e links para versões binárias de produção podem ser encontrados nas páginas do github. Além disso, mais informações sobre a arquitetura e formas de estender a verificação de dependência podem ser encontradas no wiki.
Este produto utiliza a API NVD, mas não é endossado ou certificado pelo NVD.
Java 11 agora é necessário para executar a verificação de dependência 11.0.0 ou superior
Atualização do banco de dados H2
11.0.0 contém alterações significativas usando o banco de dados H2 local. Ocorrerá um download completo dos dados do NVD. Observe que se você estiver usando um diretório de dados compartilhado, o arquivo de banco de dados h2 não é compatível com versões mais antigas de verificação de dependência. Se você tiver problemas, pode ser necessário executar uma limpeza:
./gradlew dependencyCheckPurge
mvn org.owasp:dependency-check-maven:9.0.0:purge
dependency-check.sh --purge
A atualização para 10.0.2 ou posterior é obrigatória
Versões mais antigas da verificação de dependência estão causando inúmeras solicitações duplicadas que terminam em falhas de processamento e causando carga desnecessária na API do NVD. A verificação de dependência 10.0.2 usa um cabeçalho User-Agent
atualizado que permitirá ao NVD bloquear chamadas do cliente mais antigo.
A verificação de dependência passou do feed de dados do NVD para a API do NVD. Os usuários da verificação de dependência são altamente incentivados a obter uma chave de API do NVD; consulte https://nvd.nist.gov/developers/request-an-api-key Sem uma chave de API NVD, as atualizações da verificação de dependência serão extremamente lentas . Consulte a documentação das integrações cli, maven, gradle ou ant sobre como definir a chave API do NVD.
A API NVD impôs limites de taxa. Se você estiver usando uma única chave de API e ocorrerem vários builds, você poderá atingir o limite de taxa e receber erros 403. Em um ambiente de CI deve-se usar uma estratégia de cache.
Com a versão 9.0.0, os usuários podem encontrar problemas com exceções NoSuchMethodError
devido à resolução de dependências. Se você encontrar esse problema, precisará fixar algumas das dependências transitivas da verificação de dependência em versões específicas. Por exemplo:
/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 " )
}
}
Versão mínima do Java: Java 11
A verificação de dependência do OWASP requer acesso a vários recursos hospedados externamente. Para obter mais informações, consulte Acesso à Internet necessário.
Para analisar algumas pilhas de tecnologia, a verificação de dependência pode exigir a instalação de outras ferramentas de desenvolvimento. Algumas das análises listadas abaixo podem ser experimentais e exigir que os analisadores experimentais sejam ativados.
go
deve ser instalado.Elixir
requer mix_audit
.npm
, pnpm
e yarn
requer a instalação de npm
, pnpm
ou yarn
.audit
de cada um.bundle-audit
, que deve ser instalado. Para obter instruções sobre o uso do plugin Jenkins, consulte a página do plugin OWASP Dependency-Check.
Instruções mais detalhadas podem ser encontradas nas páginas do github de verificação de dependências. A CLI mais recente pode ser baixada do github na seção de lançamentos.
Baixando a versão mais recente:
$ 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
Em *nix
$ ./bin/dependency-check.sh -h
$ ./bin/dependency-check.sh --out . --scan [path to jar files to be scanned]
No Windows
> .bindependency-check.bat -h
> .bindependency-check.bat --out . --scan [path to jar files to be scanned]
No Mac com Homebrew Note - usuários de homebrew atualizando de 5.x para 6.0.0 precisarão executar dependency-check.sh --purge
.
$ brew update && brew install dependency-check
$ dependency-check -h
$ dependency-check --out . --scan [path to jar files to be scanned]
Instruções mais detalhadas podem ser encontradas nas páginas do GitHub do dependency-check-maven. Por padrão, o plugin está vinculado à fase verify
(ou seja, mvn verify
). Alternativamente, pode-se invocar diretamente o plugin via mvn org.owasp:dependency-check-maven:check
.
O plugin de verificação de dependência pode ser configurado usando o seguinte:
< 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 obter instruções sobre o uso do plug-in Gradle, consulte a página dependency-check-gradle do github.
Para obter instruções sobre o uso da tarefa Ant, consulte a página do github dependency-check-ant.
Para que a instalação seja aprovada, você deve ter os seguintes componentes instalados:
java -version
11.0mvn -version
3.5.0 e superiorOs casos de teste exigem:
go version
1.12 e superiorAs instruções a seguir descrevem como compilar e usar o instantâneo atual. Embora toda intenção seja manter um snapshot estável, é recomendado que as versões de lançamento listadas acima sejam usadas.
O repositório possui alguns arquivos grandes devido aos recursos de teste. A equipe tem tentado limpar o histórico o máximo possível. No entanto, é recomendado que você execute uma clonagem superficial para economizar tempo:
git clone --depth 1 https://github.com/jeremylong/DependencyCheck.git
Em *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
No Windows
> mvn -s settings.xml install
> .clitargetreleasebindependency-check.bat -h
> .clitargetreleasebindependency-check.bat --out . --scan ./src/test/resources
Em seguida, carregue o 'dependency-check-report.html' resultante em seu navegador favorito.
Para acelerar os tempos de ciclo de resposta, você também pode compilar sem executar os testes todas as vezes:
mvn -s settings.xml install -DskipTests=true
Lembre-se de executar os testes pelo menos uma vez antes de abrir o PR. :)
Para poder depurar seus testes no IntelliJ Idea, você pode introduzir uma configuração maven que executa seu teste e permite a depuração com pontos de interrupção, etc.
Basicamente, você faz o que está descrito em https://www.jetbrains.com/help/idea/work-with-tests-in-maven.html#run_single_test e define forkCount
como 0, caso contrário a depuração não funcionará.
Passo a passo:
Run -> Edit Configurations
+ (Add new configuration) -> Maven
Run tests
core
command line
, insira -DforkCount=0 -f pom.xml -s ../settings.xml test
OK
Run -> Debug
e escolha a configuração de execução recém-criada O IntelliJ agora executará o teste para o subprojeto core
com depuração habilitada. Os pontos de interrupção definidos em qualquer lugar do código devem funcionar.
Se quiser acelerar os tempos de ciclo de resposta, você também pode testar apenas uma função ou uma classe de teste.
Isso funciona adicionando -Dtest=MyTestClass
ou -Dtest=MyTestClass#myTestFunction
à configuração de execução. A linha de comando completa na configuração de execução seria:
-Dtest=MyTestClass#myTestFunction -DforkCount=0 -f pom.xml -s ../settings.xml test
No exemplo a seguir, assume-se que a fonte a ser verificada está no diretório de trabalho atual e os relatórios serão gravados em $(pwd)/odc-reports
. Dados persistentes e diretórios de cache são usados, permitindo destruir o contêiner após a execução.
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 construir a verificação de dependência (usando Java 11), execute o comando:
mvn -s settings.xml install
A verificação de dependência faz referência a várias dependências vulneráveis que nunca são usadas, exceto como recursos de teste. Todas essas dependências de teste opcionais estão incluídas no perfil test-dependencies
. Para executar a verificação de dependência em si mesmo, basta excluir o perfil de test-dependencies
:
mvn org.owasp:dependency-check-maven:aggregate -P-test-dependencies -DskipProvidedScope=true
A documentação nas páginas do github é gerada a partir deste repositório:
mvn -s settings.xml site site:staging
Uma vez feito isso, aponte seu navegador para ./target/staging/index.html
.
Para construir a imagem docker de verificação de dependência, execute o comando:
mvn -s settings.xml install
./build-docker.sh
A permissão para modificar e redistribuir é concedida sob os termos da licença Apache 2.0. Consulte o arquivo LICENSE.txt para obter a licença completa.
Dependency-Check faz uso de várias outras bibliotecas de código aberto. Consulte o arquivo NOTICE.txt para obter mais informações.
Este produto utiliza a API NVD, mas não é endossado ou certificado pelo NVD.
Direitos autorais (c) 2012-2024 Jeremy Long. Todos os direitos reservados.