
dep-scan v6.3.0
Сканер уязвимостей зависимостей следующего поколения с анализом достижимости, генерацией SBOM, аудитом лицензий и сканированием образов контейнеров для интеграции в CI/CD.
Введение
OWASP dep-scan — это инструмент аудита безопасности и рисков нового поколения, основанный на известных уязвимостях, рекомендациях и лицензионных ограничениях для зависимостей проекта. В качестве входных данных поддерживаются как локальные репозитории, так и образы контейнеров, а инструмент идеально подходит для интеграции с платформами ASPM/VM и в средах CI.
Содержание
Возможности
- Сканирование большей части кода приложений (локальные репозитории, образы контейнеров Linux, манифесты Kubernetes и ОС) для выявления известных CVE с приоритизацией
- Выполнение расширенного анализа достижимости для нескольких языков (см. матрицу достижимости ниже)
- Сканирование уязвимостей пакетов выполняется локально и довольно быстро. Сервер не используется
- Генерация спецификации программного обеспечения (SBOM) с информацией из отчёта о раскрытии уязвимостей (VDR)
- Генерация документа VEX в формате Common Security Advisory Framework (CSAF) 2.0/2.1 (см. CSAF Readme)
- Выполнение глубокого аудита рисков пакетов для атак типа dependency confusion и рисков сопровождения (см. документацию по аудиту рисков)
Точные достижимые потоки данных
Подробные потоки данных для выявления как достижимых, так и недостижимых путей в вашем приложении на основе полного контекста.

Матрица достижимости
dep-scan вычисляет достижимость для семи языковых экосистем с помощью четырёх слайсеров. Уязвимый пакет, код которого фактически находится на исполняемом пути, помечается как Reachable (достижимый), тогда как пакет, который лишь объявлен в BOM, но никогда не вызывается, таковым не является. Каждый слайсер передаёт данные в общий движок достижимости с ключами purl, поэтому поведение единообразно для всех языков. Достижимость включена по умолчанию (--reachability-analyzer FrameworkReachability); SemanticReachability дополнительно атрибутирует достигнутые сервисы, конечные точки и достижимость после сборки (бинарные файлы/контейнеры).
| Язык / экосистема | Движок достижимости | Анализатор по умолчанию |
|---|---|---|
| Java / JVM (Groovy, Kotlin, Scala) | atom | FrameworkReachability |
| JavaScript / TypeScript | atom | FrameworkReachability |
| Python | atom | FrameworkReachability |
| PHP | atom | FrameworkReachability |
| Rust | rusi | FrameworkReachability |
| Go | golem | FrameworkReachability |
| .NET (C#, VB, F#, R) | dosai | FrameworkReachability |
Чтобы понять концепции, лежащие в основе достижимости и приоритизации, прочитайте главы модель достижимости и приоритизация. Практические примеры для каждого языка см. в руководствах по языкам. О соответствии требованиям (VDR и CSAF VEX) см. руководство по VDR и руководство по CSAF VEX.
Достижимость включена по умолчанию в --profile research, который dep-scan использует, когда достижимость включена. Приведённых ниже команд достаточно для начала работы; руководства по языкам охватывают разрешение бинарных файлов, безопасность бэкенда и сети, требования к восстановлению и практические примеры на фикстурах в репозитории.
Rust (rusi). cdxgen запускает rusi и сохраняет его отчёт, который dep-scan преобразует в общий конвейер, поэтому крейт, который действительно вызывается (например, time::now() для RUSTSEC-2020-0071), является достижимым, а тот, который просто присутствует, — нет. См. руководство по достижимости для Rust.
depscan -i ./my-rust-app -o ./reports --profile research
Go (golem). dep-scan напрямую вызывает golem для проектов на Go (требуется go в PATH), помечая модуль как Reachable, когда его функции находятся на трассируемом пути. Используйте --go-analyzer-network offline для недоверенных репозиториев с прогретым кэшем модулей. См. руководство по достижимости в Go.
depscan -i ./my-go-app -o ./reports -t go
.NET (dosai). cdxgen запускает dosai, который выдаёт явный вердикт о достижимости для каждого пакета (PackageReachability с ReachabilityKind и Confidence), который dep-scan считает авторитетным, поэтому пакет NuGet, который действительно вызывается (например, JsonConvert.DeserializeObject на контролируемом входе), является Reachable. Сканируйте восстановленное дерево на наличие версионированных purl. См. руководство по достижимости .NET.
depscan -i ./my-dotnet-app -o ./reports -t dotnet