Dependency-Check — это инструмент анализа состава программного обеспечения (SCA), который пытается обнаружить публично раскрытые уязвимости, содержащиеся в зависимостях проекта. Это делается путем определения наличия идентификатора перечисления общей платформы (CPE) для данной зависимости. Если он найден, он создаст отчет со ссылками на связанные записи CVE.
Документацию и ссылки на производственные бинарные выпуски можно найти на страницах github. Кроме того, дополнительную информацию об архитектуре и способах расширения проверки зависимостей можно найти в вики.
Этот продукт использует API NVD, но не одобрен и не сертифицирован NVD.
Java 11 теперь требуется для запуска проверки зависимостей версии 11.0.0 или выше.
Обновление базы данных H2
Версия 11.0.0 содержит критические изменения с использованием локальной базы данных H2. Произойдет полная загрузка данных NVD. Обратите внимание: если вы используете общий каталог данных, файл базы данных h2 несовместим со старыми версиями проверки зависимостей. Если у вас возникнут проблемы, вам может потребоваться выполнить очистку:
./gradlew dependencyCheckPurge
mvn org.owasp:dependency-check-maven:9.0.0:purge
dependency-check.sh --purge
Обновление до 10.0.2 или более поздней версии является обязательным.
Старые версии проверки зависимостей вызывают многочисленные дублирующиеся запросы, которые заканчиваются сбоями обработки, что приводит к ненужной нагрузке на NVD API. Проверка зависимостей 10.0.2 использует обновленный заголовок User-Agent
, который позволит NVD блокировать вызовы от старого клиента.
Проверка зависимостей перешла от использования канала данных NVD к API NVD. Пользователям проверки зависимостей настоятельно рекомендуется получить ключ API NVD; см. https://nvd.nist.gov/developers/request-an-api-key. Без проверки зависимости ключа NVD API обновления обновлений будут проходить очень медленно . Пожалуйста, ознакомьтесь с документацией по интеграции cli, maven, gradle или ant, чтобы узнать, как установить ключ API NVD.
В API NVD установлены ограничения скорости. Если вы используете один ключ API и происходит несколько сборок, вы можете достичь предела скорости и получить ошибку 403. В среде CI необходимо использовать стратегию кэширования.
В версии 9.0.0 пользователи могут столкнуться с проблемами с исключениями NoSuchMethodError
из-за разрешения зависимостей. Если вы столкнулись с этой проблемой, вам нужно будет привязать некоторые транзитивные зависимости проверки зависимостей к конкретным версиям. Например:
/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 " )
}
}
Минимальная версия Java: Java 11.
Для проверки зависимостей OWASP требуется доступ к нескольким внешним ресурсам. Дополнительную информацию см. в разделе «Требуется доступ в Интернет».
Для анализа некоторых технологических стеков проверка зависимостей может потребовать установки других инструментов разработки. Некоторые из перечисленных ниже анализов могут быть экспериментальными и требуют включения экспериментальных анализаторов.
go
.Elixir
требуется mix_audit
.npm
, pnpm
и yarn
требуется установка npm
, pnpm
или yarn
.audit
каждого из них.bundle-audit
, которую необходимо установить. Инструкции по использованию плагина Jenkins см. на странице плагина проверки зависимостей OWASP.
Более подробные инструкции можно найти на страницах GitHub для проверки зависимостей. Последнюю версию CLI можно загрузить с github в разделе релизов.
Скачиваем последнюю версию:
$ 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
На *nix
$ ./bin/dependency-check.sh -h
$ ./bin/dependency-check.sh --out . --scan [path to jar files to be scanned]
В Windows
> .bindependency-check.bat -h
> .bindependency-check.bat --out . --scan [path to jar files to be scanned]
На Mac с Homebrew Note: пользователям homebrew, обновляющимся с 5.x до 6.0.0, необходимо будет запустить dependency-check.sh --purge
.
$ brew update && brew install dependency-check
$ dependency-check -h
$ dependency-check --out . --scan [path to jar files to be scanned]
Более подробные инструкции можно найти на страницах github dependency-check-maven. По умолчанию плагин привязан к этапу verify
(т.е. mvn verify
). Альтернативно, можно напрямую вызвать плагин через mvn org.owasp:dependency-check-maven:check
.
Плагин проверки зависимостей можно настроить, используя следующее:
< 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 >
Инструкции по использованию плагина Gradle см. на странице github-зависимости-check-gradle.
Инструкции по использованию задачи Ant см. на странице github dependency-check-ant.
Для успешной установки у вас должны быть установлены следующие компоненты:
java -version
11.0mvn -version
3.5.0 и вышеТестовые случаи требуют:
go version
1.12 и вышеСледующие инструкции описывают, как скомпилировать и использовать текущий снимок. Несмотря на то, что все намерения состоят в том, чтобы поддерживать стабильный снимок, рекомендуется использовать версии, перечисленные выше.
В репозитории есть несколько больших файлов из-за тестовых ресурсов. Команда постаралась максимально подчистить историю. Однако, чтобы сэкономить время, рекомендуется выполнить поверхностное клонирование:
git clone --depth 1 https://github.com/jeremylong/DependencyCheck.git
На *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
В Windows
> mvn -s settings.xml install
> .clitargetreleasebindependency-check.bat -h
> .clitargetreleasebindependency-check.bat --out . --scan ./src/test/resources
Затем загрузите полученный файл «dependent-check-report.html» в свой любимый браузер.
Чтобы ускорить цикл обработки, вы также можете скомпилировать, не запуская тесты каждый раз:
mvn -s settings.xml install -DskipTests=true
Пожалуйста, не забудьте хотя бы один раз запустить тесты, прежде чем открывать PR. :)
Чтобы иметь возможность отлаживать тесты в IntelliJ Idea, вы можете ввести конфигурацию maven, которая выполняет ваш тест и позволяет отладку с помощью точек останова и т. д.
По сути, вы делаете то, что описано в https://www.jetbrains.com/help/idea/work-with-tests-in-maven.html#run_single_test, и устанавливаете forkCount
на 0, иначе отладка не будет работать.
Шаг за шагом:
Run -> Edit Configurations
+ (Add new configuration) -> Maven
Run tests
core
command line
введите -DforkCount=0 -f pom.xml -s ../settings.xml test
OK
Run -> Debug
, затем выберите вновь созданную конфигурацию запуска. IntelliJ теперь выполнит тестовый запуск для core
подпроекта с включенной отладкой. Точки останова, установленные в любом месте кода, должны работать.
Если вы хотите ускорить цикл обработки, вы также можете просто протестировать одну функцию или один тестовый класс.
Это работает путем добавления -Dtest=MyTestClass
или -Dtest=MyTestClass#myTestFunction
в конфигурацию запуска. Полная командная строка в конфигурации запуска будет выглядеть так:
-Dtest=MyTestClass#myTestFunction -DforkCount=0 -f pom.xml -s ../settings.xml test
В следующем примере предполагается, что проверяемый источник находится в текущем рабочем каталоге, а отчеты будут записываться в $(pwd)/odc-reports
. Используются постоянные каталоги данных и кеша, что позволяет уничтожить контейнер после запуска.
Для 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"
Для 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"
Чтобы построить проверку зависимостей (с использованием Java 11), выполните команду:
mvn -s settings.xml install
Проверка зависимостей ссылается на несколько уязвимых зависимостей, которые никогда не используются, кроме как в качестве тестовых ресурсов. Все эти дополнительные тестовые зависимости включены в профиль test-dependencies
. Чтобы запустить проверку зависимостей самого себя, просто исключите профиль test-dependencies
:
mvn org.owasp:dependency-check-maven:aggregate -P-test-dependencies -DskipProvidedScope=true
Документация на страницах github создается из этого репозитория:
mvn -s settings.xml site site:staging
После этого укажите в браузере ./target/staging/index.html
.
Чтобы создать образ докера для проверки зависимостей, выполните команду:
mvn -s settings.xml install
./build-docker.sh
Разрешение на изменение и распространение предоставляется в соответствии с условиями лицензии Apache 2.0. Полную лицензию см. в файле LICENSE.txt.
Dependency-Check использует несколько других библиотек с открытым исходным кодом. Дополнительную информацию см. в файле NOTICE.txt.
Этот продукт использует API NVD, но не одобрен и не сертифицирован NVD.
Copyright (c) 2012–2024 Джереми Лонг. Все права защищены.