# OWASP Dependency Check

### Описание

OWASP Dependency Check — **SCA (Software Composition Analysis)** выявляет известные уязвимости (CVE) в сторонних зависимостях приложения.

### Поддерживаемый стек

OWASP Dependency-Check содержит несколько анализаторов типов файлов, которые используются для извлечения идентификационной информации из анализируемых файлов.&#x20;

Более подробно: <https://dependency-check.github.io/DependencyCheck/analyzers/index.html>&#x20;

<table><thead><tr><th width="136.6666259765625">Анализатор</th><th>Типы сканируемых файлов</th><th>Метод анализа</th></tr></thead><tbody><tr><td>Архив</td><td>Формат архива Zip (*.zip, *.ear, *.war, *.jar, *.sar, <em>.apk, .nupkg); Формат Tape Archive (.tar); Формат Gzip (</em>.gz, <em>.tgz); Формат Bzip2 (</em>.bz2, <em>.tbz2); Формат RPM (</em>.rpm)</td><td>Извлекает содержимое архива, затем сканирует содержимое всеми доступными анализаторами.</td></tr><tr><td>Сборка (.NET)</td><td>Сборки .NET (*.exe, *.dll)</td><td>Использует <a href="https://github.com/colezlaw/GrokAssembly">GrokAssembly.exe</a>; требуется установленная среда выполнения .NET Core 8.0.</td></tr><tr><td>Jar</td><td>Архивы Java (<em>.jar); Веб-архивы (</em>.war)</td><td>Анализирует метаданные манифеста архива и файлы модели проекта Maven (pom.xml).</td></tr><tr><td>RetireJS</td><td>Файлы JavaScript</td><td>Анализирует файлы JavaScript с использованием базы данных <a href="https://github.com/RetireJS/retire.js">RetireJS</a>.</td></tr><tr><td>MS Build</td><td>Файлы MS Build (*.csproj, *.vbproj)</td><td>Парсит файлы проектов, включая связанные свойства сборки каталога или пакетов, для сбора информации о зависимостях.</td></tr><tr><td>Node.js</td><td>Файлы спецификации пакетов NPM (package.json)</td><td>Парсит package.json для сбора информации о зависимостях в проекте Node.js.</td></tr><tr><td>Node Audit</td><td>Использует API <code>npm audit</code> для отчёта об известных уязвимых библиотеках Node.js.</td><td>Этот анализатор требует подключения к интернету.</td></tr><tr><td>Nugetconf</td><td>Файл NuGet packages.config</td><td>Использует XPath для разбора XML-спецификации.</td></tr><tr><td>Nuspec</td><td>Файл спецификации пакета NuGet (*.nuspec)</td><td>Использует XPath для разбора XML-спецификации.</td></tr><tr><td>OpenSSL</td><td>Файл заголовка версии OpenSSL (opensslv.h)</td><td>Регулярное выражение для разбора определения макроса OPENSSL_VERSION_NUMBER.</td></tr><tr><td>OSS Index</td><td>Использует API <a href="https://ossindex.sonatype.org/">OSS Index</a> для отчёта об уязвимостях, не найденных в NVD.</td><td>Этот анализатор требует подключения к интернету.</td></tr><tr><td>Ruby bundler-audit</td><td>Файлы блокировки Ruby <code>Gemfile.lock</code></td><td>Выполняет bundle-audit и включает результаты в отчёт Dependency-Check.</td></tr></tbody></table>

#### Экспериментальные анализаторы

Следующие анализаторы можно включить, активировав опцию конфигурации *experimental.* Эти анализаторы считаются экспериментальными из-за более высокого уровня ложных срабатываний и ложных пропусков

<table><thead><tr><th width="170.66668701171875">Анализатор</th><th>Типы сканируемых файлов</th><th>Метод анализа</th></tr></thead><tbody><tr><td>Autoconf</td><td>Файлы конфигурации Autoconf (configure, configure.in, configure.ac)</td><td>Сканирование регулярными выражениями метаданных AC_INIT, включая сгенерированный скрипт конфигурации.</td></tr><tr><td>CMake</td><td>Файлы проекта CMake (CMakeLists.txt) и скрипты (*.cmake)</td><td>Сканирование регулярными выражениями команд инициализации проекта и установки версии.</td></tr><tr><td>CocoaPods</td><td>Файлы <code>.podspec</code> CocoaPods</td><td>Извлекает информацию о зависимостях из файла спецификации.</td></tr><tr><td>Carthage</td><td>Файлы <code>Cartfile.resolved</code> Carthage</td><td>Извлекает информацию о зависимостях из файла спецификации.</td></tr><tr><td>Composer Lock</td><td>Файлы блокировки PHP Composer (composer.lock)</td><td>Парсит lock-файлы Composer для точных версий зависимостей.</td></tr><tr><td>CPAN File</td><td>Файлы <a href="https://metacpan.org/pod/distribution/Module-CPANfile/lib/cpanfile.pod">cpanfile</a> Perl</td><td>Парсит файлы cpanfile для зависимостей Perl.</td></tr><tr><td>Dart</td><td><code>pubspec.yaml</code>, <code>pubspec.lock</code></td><td>Извлекает информацию о зависимостях из файлов спецификации.</td></tr><tr><td>Go lang mod</td><td><code>go.mod</code></td><td>Использует <code>go mod</code> для определения точного списка используемых зависимостей.</td></tr><tr><td>Go lang dep</td><td><code>Gopkg.lock</code></td><td>Прямой анализ lock-файла для извлечения информации о зависимостях.</td></tr><tr><td>PE Analyzer</td><td>PE-файлы DLL и EXE</td><td>Анализирует заголовки PE для получения информации о зависимостях.</td></tr><tr><td>Python</td><td>Исходные файлы Python (<em>.py); Файлы метаданных (PKG-INFO, METADATA); Дистрибутивы (</em>.whl, *.egg, *.zip)</td><td>Регулярное выражение для setuptools-метаданных в исходниках; Парсинг RFC822 для остальных.</td></tr><tr><td>Pip</td><td>Файлы requirements.txt для pip</td><td>Регулярное выражение для сканирования requirements.txt.</td></tr><tr><td>Ruby Gemspec</td><td>Файлы Rakefile; Файлы *.gemspec</td><td>Регулярное выражение для блоков инициализации gemspec и метаданных.</td></tr><tr><td>SWIFT</td><td><code>Package.swift</code> менеджера пакетов Swift</td><td>Извлекает информацию о зависимостях из файла Package.swift.</td></tr></tbody></table>

### Источники  данных об уязвимостей (Поддерживаемые базы)

* **NVD** (National Vulnerability Database)\
  Основной источник CVE\
  Требует интернет
* **CISA KEV** (Known Exploited Vulnerabilities)\
  Каталог активно эксплуатируемых уязвимостей\
  JSON-файл от CISA.gov\
  Используется для приоритизации&#x20;
* **OSS Index** (Sonatype)\
  Дополнительные уязвимости (не покрытые NVD)\
  Онлайн-запросы по PURL\
  Требует интернет и API Key
* **RetireJS**\
  Уязвимые JavaScript-библиотеки\
  Онлайн-загрузка данных RetireJS\
  Только для JS-фронтенда
* **Bundler Audit**\
  Уязвимости Ruby Gems\
  Локальный запуск `bundle-audit`\
  Не требует интернета (если есть lock-файл)

### Основные функциональные возможности

* **Автоматическое определение зависимостей** Парсит lock-файлы, манифесты, архивы и извлекает координаты библиотек (group:artifact:version, npm-пакеты и т.д.)
* **Формирование идентификаторов**
  * CPE (Common Platform Enumeration)
  * PURL (Package URL)
  * координаты экосистемы (Maven, npm, NuGet, PyPI, gem и др.)
* **Подавление ложных срабатываний (false positives)**
  * suppression-файл (XML)
  * cpe/suppression по regex, CVE, package-url
* **Дополнительные анализаторы**
  * Архивный анализатор (распаковывает JAR → ищет вложенные зависимости)
  * Node.js / RetireJS
  * Ruby Bundler-Audit
  * Python Safety / pip-audit
  * Open Source Vulnerability (OSV) — в новых версиях
  * Центральная база NVD + зеркалирование
* **Другие полезные фичи**
  * Прокси / оффлайн-режим (можно подготовить базу заранее)
  * Поддержка CVE-2021-44228 (Log4Shell) и других известных уязвимостей
  * Генерация Software Bill of Materials (CycloneDX / SPDX)

### Standard vs DB Included

В TRAIO поддерживаются два режима запуска:

* **Standard (Online Update)** — официальный образ, база уязвимостей обновляется при запуске.
* **DB Included / No Update (Offline)** — образ с предзагруженной базой, запуск с `--noupdate`.

### Standard vs DB Included — разница, плюсы и минусы

<table data-header-hidden><thead><tr><th width="106.33331298828125"></th><th></th><th></th><th></th></tr></thead><tbody><tr><td>Режим</td><td>Описание</td><td>Плюсы</td><td>Минусы</td></tr><tr><td>Standard (Online Update)</td><td>При каждом запуске скачивает/обновляет базы (NVD и др.) перед анализом</td><td>Самая свежая база CVE</td><td>Затрачивает от 5 до 30 минут на скачивания базы уязвимостей в зависимости от скорости интернета и наличия NVD API ключа</td></tr><tr><td>DB Included / No Update (Offline)</td><td>Использует базу, уже упакованную в образ; запускается с <code>--noupdate</code></td><td>Быстрый и предсказуемый старт; меньше сетевых зависимостей; подходит для контуров с ограниченным интернетом</td><td>База обновляется нами при обновлении образа; есть риск не найти свежую уязвимость</td></tr></tbody></table>

### Как работает

#### Режим 1: Dependency-Check (Standard)

Сканер использует официальный docker-образ:

* `owasp/dependency-check:latest`

Команда запуска

```bash
/usr/share/dependency-check/bin/dependency-check.sh \
  --scan ./$SEC_CODE_FOLDER \
  --format JSON \
  --out /data/$REPORT_FILE_NAME
```

#### Режим 2: Dependency-Check (DB Included / No Update)

Сканер использует наш docker-образ:

* `registry.gitlab.com/traio-group/tools/dependency-check-db-included:latest`

Команда запуска

```bash
/usr/share/dependency-check/bin/dependency-check.sh \
  --scan ./$SEC_CODE_FOLDER \
  --format JSON \
  --out /data/$REPORT_FILE_NAME \
  --noupdate
```

В этом режиме база уже внутри образа, поэтому обновление при каждом запуске не требуется. Это делает запуск быстрее и снижает зависимость от сети.

### Переменные окружения (env)

| Имя                | Значение по умолчанию        | Обязательное | Описание                      |
| ------------------ | ---------------------------- | ------------ | ----------------------------- |
| REPORT\_FILE\_NAME | dependency-check.json        | Нет          | Имя итогового отчёта          |
| SCAN\_TYPE         | OWASP Dependency Check       | Нет          | Тип сканирования для парсинга |
| REPOSITORY         | (указывается автоматический) | Да           | Путь или URL к проекту        |

### Настройки и параметры

* **allow\_failure:** True — ошибки сканера не прерывают пайплайн
* **overwrite\_entrypoint:** True — позволяет явно задавать run\_command
* **timeout:** 30 минут (можно увеличить при необходимости)

### Ссылки

* [Dependency-Check (GitHub)](https://github.com/dependency-check/DependencyCheck)
* [dependency-check (Docker Hub)](https://hub.docker.com/r/owasp/dependency-check)
* [NVD API Key](https://nvd.nist.gov/developers/request-an-api-key)
* [Документация Dependency-Check](https://dependency-check.github.io/DependencyCheck/index.html)
