Перейти к содержимому
traio.kz

OWASP Dependency Check

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

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

Более подробно: https://dependency-check.github.io/DependencyCheck/analyzers/index.html

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

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

АнализаторТипы сканируемых файловМетод анализа
AutoconfФайлы конфигурации Autoconf (configure, configure.in, configure.ac)Сканирование регулярными выражениями метаданных AC_INIT, включая сгенерированный скрипт конфигурации.
CMakeФайлы проекта CMake (CMakeLists.txt) и скрипты (*.cmake)Сканирование регулярными выражениями команд инициализации проекта и установки версии.
CocoaPodsФайлы .podspec CocoaPodsИзвлекает информацию о зависимостях из файла спецификации.
CarthageФайлы Cartfile.resolved CarthageИзвлекает информацию о зависимостях из файла спецификации.
Composer LockФайлы блокировки PHP Composer (composer.lock)Парсит lock-файлы Composer для точных версий зависимостей.
CPAN FileФайлы cpanfile PerlПарсит файлы cpanfile для зависимостей Perl.
Dartpubspec.yaml, pubspec.lockИзвлекает информацию о зависимостях из файлов спецификации.
Go lang modgo.modИспользует go mod для определения точного списка используемых зависимостей.
Go lang depGopkg.lockПрямой анализ lock-файла для извлечения информации о зависимостях.
PE AnalyzerPE-файлы DLL и EXEАнализирует заголовки PE для получения информации о зависимостях.
PythonИсходные файлы Python (.py); Файлы метаданных (PKG-INFO, METADATA); Дистрибутивы (.whl, *.egg, *.zip)Регулярное выражение для setuptools-метаданных в исходниках; Парсинг RFC822 для остальных.
PipФайлы requirements.txt для pipРегулярное выражение для сканирования requirements.txt.
Ruby GemspecФайлы Rakefile; Файлы *.gemspecРегулярное выражение для блоков инициализации gemspec и метаданных.
SWIFTPackage.swift менеджера пакетов SwiftИзвлекает информацию о зависимостях из файла Package.swift.

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

Заголовок раздела «Источники данных об уязвимостей (Поддерживаемые базы)»
  • NVD (National Vulnerability Database)
    Основной источник CVE
    Требует интернет
  • CISA KEV (Known Exploited Vulnerabilities)
    Каталог активно эксплуатируемых уязвимостей
    JSON-файл от CISA.gov
    Используется для приоритизации
  • 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)

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

  • Standard (Online Update) — официальный образ, база уязвимостей обновляется при запуске.
  • DB Included / No Update (Offline) — образ с предзагруженной базой, запуск с --noupdate.
РежимОписаниеПлюсыМинусы
Standard (Online Update)При каждом запуске скачивает/обновляет базы (NVD и др.) перед анализомСамая свежая база CVEЗатрачивает от 5 до 30 минут на скачивания базы уязвимостей в зависимости от скорости интернета и наличия NVD API ключа
DB Included / No Update (Offline)Использует базу, уже упакованную в образ; запускается с --noupdateБыстрый и предсказуемый старт; меньше сетевых зависимостей; подходит для контуров с ограниченным интернетомБаза обновляется нами при обновлении образа; есть риск не найти свежую уязвимость

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

  • owasp/dependency-check:latest

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

Окно терминала
/usr/share/dependency-check/bin/dependency-check.sh \
--scan ./$SEC_CODE_FOLDER \
--format JSON \
--out /data/$REPORT_FILE_NAME

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

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

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

Окно терминала
/usr/share/dependency-check/bin/dependency-check.sh \
--scan ./$SEC_CODE_FOLDER \
--format JSON \
--out /data/$REPORT_FILE_NAME \
--noupdate

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

Имя Значение по умолчанию Обязательное Описание
REPORT_FILE_NAME dependency-check.json Нет Имя итогового отчёта
SCAN_TYPE OWASP Dependency Check Нет Тип сканирования для парсинга
REPOSITORY (указывается автоматический) Да Путь или URL к проекту
  • allow_failure: True — ошибки сканера не прерывают пайплайн
  • overwrite_entrypoint: True — позволяет явно задавать run_command
  • timeout: 30 минут (можно увеличить при необходимости)