
dep-scan v6.3.0
下一代依赖漏洞扫描器,具备可达性分析、SBOM生成、许可证审计以及容器镜像扫描,用于CI/CD集成。
介绍
OWASP dep-scan 是一个基于已知漏洞、安全公告和项目依赖的许可证限制的下一代安全与风险审计工具。支持本地仓库和容器镜像作为输入,该工具非常适合集成到ASPM/VM平台和CI环境中。
目录
功能特性
- 扫描大多数应用程序代码(本地仓库、Linux容器镜像、Kubernetes清单和操作系统)以识别已知CVE并进行优先级排序
- 对多种语言执行高级可达性分析(见下方可达性矩阵)
- 软件包漏洞扫描在本地执行,速度相当快。不使用服务器
- 生成带有漏洞披露报告(VDR)信息的软件物料清单(SBOM)
- 生成通用安全咨询框架(CSAF)2.0/2.1 VEX文档(查看CSAF自述文件)
- 对依赖混淆攻击和维护风险执行深度软件包风险审计(参见风险审计文档)
精确的可达数据流
基于完整上下文,详细的数据流可识别应用程序中可达和不可达路径。

可达性矩阵
dep-scan 通过四个切片器为七种语言生态系统计算可达性。如果一个易受攻击的软件包的代码实际位于执行路径上,则标记为可达,而仅在 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 在开启可达性时使用的配置。以下命令足以开始;每种语言指南涵盖了二进制解析、后端和网络安全、恢复要求以及仓库内 fixture 的实际示例。
Rust (rusi). cdxgen 运行 rusi 并持久化其报告,dep-scan 将其转换为共享管道,因此实际上被调用的 crate(例如 time::now() 用于 RUSTSEC-2020-0071)会被标记为可达,而仅存在的则不会。请参见 Rust 可达性指南。```bash
depscan -i ./my-rust-app -o ./reports --profile research
**Go (golem).** dep-scan 直接调用 [golem](https://github.com/cdxgen/cdxgen-plugins-bin) 用于 Go 项目(需要在 `PATH` 中有 `go`),当模块的函数位于追踪路径上时,将其标记为 Reachable。对于具有预热模块缓存的非可信仓库,使用 `--go-analyzer-network offline`。参见 [Go 可达性指南](https://depscan.readthedocs.io/languages/go-reachability)。```bash
depscan -i ./my-go-app -o ./reports -t go
.NET (dosai). cdxgen 运行 dosai,它会为每个包生成明确的可达性判定(PackageReachability 包含 ReachabilityKind 和 Confidence),dep-scan 将其视为权威结果,因此一个实际调用的 NuGet 包(例如,对受控输入调用 JsonConvert.DeserializeObject)即可达。扫描已还原的依赖树以获取带版本号的 purls。请参阅 .NET 可达性指南。```bash
depscan -i ./my-dotnet-app -o ./reports -t dotnet
**JVM、JavaScript/TypeScript、Python 和 PHP(atom)。** 这四种生态系统共享 [atom](https://github.com/AppThreat/atom) 切片器,它构建了一种语言无关的中间表示并执行静态切片。请参阅 [JVM、JS、Python 和 PHP 可达性指南](https://depscan.readthedocs.io/languages/jvm-js-python-php-reachability)。```bash
depscan --profile research -t java -i ./my-java-app -o ./reports --explain
要从框架前向可达性扩展到端点、服务及构建后层级,请传递--reachability-analyzer SemanticReachability,并搭配包含生命周期BOM的--bom-dir参数。详见语义可达性指南。
清晰洞悉CVE
无需阅读描述即可清晰理解CVE信息。

自动优先级排序
仅关注那些需要你处理的CVE。

保持主动
通过先进的漏洞与利用预测,始终领先一步。

漏洞数据源
- OSV
- NVD
- GitHub
- NPM
- Linux vuln-list
Linux发行版
- AlmaLinux
- Debian
- Alpine
- Amazon Linux
- Arch Linux
- RHEL/CentOS
- Rocky Linux
- Ubuntu
- OpenSUSE/SLES
- Photon
- Chainguard
- Wolfi OS
快速开始
dep-scan非常适合在持续集成(CI)流程中使用,也可作为本地开发工具。
本地扫描项目(Python版本)```bash
sudo npm install -g @cyclonedx/cdxgen
Normal version recommended for most users (MIT)
pip install owasp-depscan
For a full version with all extensions and server mode (Multiple Licenses)
pip install owasp-depscan[all]
这将会安装两个命令:`cdxgen` 和 `depscan`。
你可以直接使用各种选项调用扫描命令。```bash
cd <project to scan>
depscan --src $PWD --reports-dir $PWD/reports
完整选项列表如下:```text usage: depscan [-h] [--config CONFIG] [--no-banner] [-i SRC_DIR_IMAGE] [-o REPORTS_DIR] [--csaf] [--profile {appsec,research,operational,threat-modeling,license-compliance,generic,machine-learning,ml,deep-learning,ml-deep,ml-tiny}] [--lifecycle {pre-build,build,post-build} [{pre-build,build,post-build} ...]] [--technique {auto,source-code-analysis,binary-analysis,manifest-analysis,hash-comparison,instrumentation,filename} [{auto,source-code-analysis,binary-analysis,manifest-analysis,hash-comparison,instrumentation,filename} ...]] [--bom-engine {auto,CdxgenGenerator,CdxgenServerGenerator,CdxgenImageBasedGenerator,BlintGenerator} | --vulnerability-analyzer {auto,VDRAnalyzer,LifecycleAnalyzer}] [--reachability-analyzer {off,FrameworkReachability,SemanticReachability}] [--no-suggest] [--risk-audit] [--cdxgen-args CDXGEN_ARGS] [--private-ns PRIVATE_NS] [-t PROJECT_TYPE [PROJECT_TYPE ...]] [--bom BOM | --bom-dir BOM_DIR | --purl SEARCH_PURL] [--report-template REPORT_TEMPLATE] [--report-name REPORT_NAME] [--deep] [--fuzzy-search] [--search-order {purl,pcu,cpe,cpu,url}] [--no-universal] [--no-vuln-table] [--server] [--server-host SERVER_HOST] [--server-port SERVER_PORT] [--cdxgen-server CDXGEN_SERVER] [--debug] [-q | --explain] [-v]
Fully open-source security and license audit for application dependencies and container images based on known vulnerabilities and advisories.
options:
-h, --help show this help message and exit
--config CONFIG Path to the configuration file. Default: $PWD/.config/depscan.toml
--no-banner Do not display the logo and donation banner. Please make a donation to OWASP before using this argument.
-i, --src SRC_DIR_IMAGE
Source directory or container image or binary file
-o, --reports-dir REPORTS_DIR
Reports directory
--csaf Generate a OASIS CSAF VEX document
--profile {appsec,research,operational,threat-modeling,license-compliance,generic,machine-learning,ml,deep-learning,ml-deep,ml-tiny}
Profile to use while generating the BOM. For granular control, use the arguments --bom-engine, --vulnerability-analyzer, or --reachability-analyzer.
--lifecycle {pre-build,build,post-build} [{pre-build,build,post-build} ...]
Product lifecycle for the generated BOM. Multiple values allowed.
--technique {auto,source-code-analysis,binary-analysis,manifest-analysis,hash-comparison,instrumentation,filename} [{auto,source-code-analysis,binary-analysis,manifest-analysis,hash-comparison,instrumentation,filename} ...]
Analysis technique to use for BOM generation. Multiple values allowed.
--bom-engine {auto,CdxgenGenerator,CdxgenServerGenerator,CdxgenImageBasedGenerator,BlintGenerator}
BOM generation engine to use. Defaults to automatic selection based on project type and lifecycle.
--vulnerability-analyzer {auto,VDRAnalyzer,LifecycleAnalyzer}
Vulnerability analyzer to use. Defaults to automatic selection based on bom_dir argument.
--reachability-analyzer {off,FrameworkReachability,SemanticReachability}
Reachability analyzer to use. Default FrameworkReachability.
--no-suggest Disable suggest mode
--risk-audit Perform package risk audit (slow operation). Npm only.
--cdxgen-args CDXGEN_ARGS
Additional arguments to pass to cdxgen
--private-ns PRIVATE_NS
Private namespace to use while performing oss risk audit. Private packages should not be available in public registries by default. Comma separated
values accepted.
-t, --type PROJECT_TYPE [PROJECT_TYPE ...]
Override project types if auto-detection is incorrect. Multiple values supported.
--bom BOM Examine using the given Software Bill-of-Materials (SBOM) file in CycloneDX format. Use cdxgen command to produce one.
--bom-dir BOM_DIR Examine all the Bill-of-Materials (BOM) files in the given directory.
--purl SEARCH_PURL Scan a single package url.
--custom-data CUSTOM_DATA
Path to directory containing custom vulnerability data (JSON/YAML/TOML) to override/augment results.
--report-template REPORT_TEMPLATE
Jinja template file used for rendering a custom report
--report-name REPORT_NAME
Filename of the custom report written to the --reports-dir
--deep Perform deep scan by passing this --deep argument to cdxgen. Useful while scanning docker images and OS packages.
--fuzzy-search Perform fuzzy search by creating variations of package names. Use this when the input SBOM lacks a PURL.
--search-order {purl,pcu,cpe,cpu,url}
Attributes to use while searching for vulnerabilities. Default: PURL, CPE, URL (pcu).
--no-universal Depscan would attempt to perform a single universal scan instead of individual scans per language type.
--no-vuln-table Do not print the table with the full list of vulnerabilities. This can help reduce console output.
--server Run depscan as a server
--server-host SERVER_HOST
depscan server host
--server-port SERVER_PORT
depscan server port
--server-allowed-hosts [SERVER_ALLOWED_HOSTS ...]
List of allowed hostnames or IPs that can access the server (e.g., 'localhost 192.168.1.10'). If unspecified, no host allowlist is
enforced.
--server-allowed-paths [SERVER_ALLOWED_PATHS ...]
List of allowed filesystem paths that can be scanned by the server. Restricts path parameter in /scan requests.
--cdxgen-server CDXGEN_SERVER
cdxgen server url. Eg: http://cdxgen:9090
--debug Run depscan in debug mode.
-q, --quiet Makes depscan quiet.
--explain Makes depscan to explain the various analysis. Useful for creating detailed reports.
--explanation-mode {Endpoints,EndpointsAndReachables,NonReachables,LLMPrompts}
Style of explanation needed. Defaults to Endpoints and Reachables.
--annotate Include the generated text VDR report as an annotation. Defaults to true when explain is enabled; false otherwise.
-v, --version Display the version
### 独立二进制文件(无需 Python 或 Node.js)
预构建的单文件可执行文件附加到每个 [GitHub release](https://github.com/owasp-dep-scan/dep-scan/releases)。它们捆绑了匹配的 [cdxgen](https://github.com/cdxgen/cdxgen) SEA 二进制文件,因此 BOM 生成无需安装 Python、Node.js 或 cdxgen 即可开箱即用。
| 平台 | 架构 | 资源 |
| --------------------- | ----------------- | ------------------------------ |
| Linux (glibc) | x86_64 | `depscan-linux-amd64` |
| Linux (glibc) | arm64 | `depscan-linux-arm64` |
| Linux (musl / Alpine) | x86_64 | `depscan-linux-amd64-musl` |
| Linux (musl / Alpine) | arm64 | `depscan-linux-arm64-musl` |
| macOS | Apple silicon | `depscan-darwin-arm64` |
| macOS | Intel | `depscan-darwin-amd64` |
| Windows | x86_64 | `depscan-windows-amd64.exe` |
每个资源都有一个匹配的 `.sha256` 文件用于验证。```bash
# Example: Linux x86_64
curl -LO https://github.com/owasp-dep-scan/dep-scan/releases/latest/download/depscan-linux-amd64
curl -LO https://github.com/owasp-dep-scan/dep-scan/releases/latest/download/depscan-linux-amd64.sha256
sha256sum -c depscan-linux-amd64.sha256
chmod +x depscan-linux-amd64
./depscan-linux-amd64 --src $PWD --reports-dir $PWD/reports
[!NOTE] macOS 二进制文件目前未签名。首次运行时,macOS Gatekeeper 可能会阻止它们;使用
xattr -d com.apple.quarantine ./depscan-darwin-arm64清除隔离属性(或者在系统设置、隐私与安全性中允许该二进制文件)。
[!NOTE] 漏洞数据库仍在首次运行时下载。仅捆绑了 cdxgen,未捆绑漏洞数据库。使用
depscan-vdb命令选择特定的数据库变体,例如depscan-vdb download --scope app获取较小的仅应用数据库。有关完整镜像矩阵,请参阅漏洞数据库指南。
所有独立二进制文件都捆绑了 blint,但不包含其可选的 nyxstone 反汇编后端(该后端没有 wheel 包,也不支持 Windows)。因此,独立二进制文件中无法进行基于深度反汇编的二进制分析;如果需要此功能,请使用 Python 包(pip install owasp-depscan[all])。
本地扫描容器(Python 版本)
扫描一个 Java 项目。```bash depscan --src -o containertests -t java
扫描容器 `shiftleft/scan-slim` 的 `latest` 标签```bash
depscan --src shiftleft/scan-slim -o containertests -t docker
Include license to the type to perform the license audit.```bash
depscan --src shiftleft/scan-slim -o containertests -t docker license
你也可以使用sha256摘要来指定镜像```bash
depscan --src redmine@sha256:a5c5f8a64a0d9a436a0a6941bc3fb156be0c89996add834fe33b66ebeed2439e -o containertests -t docker
你也可以使用docker或podman save命令保存容器镜像,并将归档文件传递给depscan进行扫描。```bash docker save -o /tmp/scanslim.tar shiftleft/scan-slim:latest
podman save --format oci-archive -o /tmp/scanslim.tar shiftleft/scan-slim:latest
depscan --src /tmp/scanslim.tar -o reports -t docker
有关更多示例,请参阅此仓库的 GitHub Actions 工作流下的 Docker 测试。
### 在本地扫描项目(Docker 容器)
可以使用 `ghcr.io/owasp-dep-scan/dep-scan` 容器镜像来执行扫描。
要使用默认设置进行扫描```bash
docker run --rm -v $PWD:/app ghcr.io/owasp-dep-scan/dep-scan depscan --src /app --reports-dir /app/reports
基于自定义环境变量的配置进行扫描```bash
docker run --rm
-e VDB_HOME=/db
-e GITHUB_TOKEN=
-v /tmp:/db
-v $PWD:/app ghcr.io/owasp-dep-scan/dep-scan depscan --src /app --reports-dir /app/reports
在上面的示例中,`/tmp` 作为 `/db` 挂载到容器中。然后该目录被指定为 `VDB_HOME`,用于缓存漏洞信息。这样,数据库可以被缓存并重用,从而提高性能。
### 服务器模式
dep-scan 和 cdxgen 可以在服务器模式下运行。使用附带的 docker-compose 文件开始。```bash
git clone https://github.com/owasp-dep-scan/dep-scan
docker compose up
捆绑的 compose 文件默认将 DEPSCAN_SERVER_API_KEY 设置为开发占位符,以便 dep-scan 服务可以绑定到 0.0.0.0。在将服务暴露到本地实验室之外之前,请覆盖此值。```bash
depscan --server --server-host 127.0.0.1 --server-port 7070
如果你需要将 dep-scan 绑定到非本地地址,请先设置一个 API 密钥:```bash
export DEPSCAN_SERVER_API_KEY="change-this-before-production"
depscan --server --server-host 0.0.0.0 --server-port 7070
[!IMPORTANT] dep-scan 拒绝绑定到非本地地址,除非设置了
DEPSCAN_SERVER_API_KEY或通过DEPSCAN_SERVER_ALLOW_UNAUTHENTICATED_BIND=true明确选择退出。
使用 /scan 端点执行扫描。
[!NOTE] 在服务器模式下,
type参数是必需的。当启用 API 密钥认证时,使用X-API-Key或Authorization: Bearer <key>发送密钥。
- 扫描本地目录。
- 扫描 SBOM 文件(本地存在)。```bash
curl
-H 'X-API-Key: dev-only-change-me'
--json '{"path": "/tmp/vulnerable-aws-koa-app/sbom_file.json", "type": "js"}'
http://127.0.0.1:7070/scan
- 扫描 GitHub 仓库。```bash
curl \
-H 'Authorization: Bearer dev-only-change-me' \
--json '{"url": "https://github.com/HooliCorp/vulnerable-aws-koa-app", "type": "js"}' \
http://127.0.0.1:7070/scan \
-o app.vdr.json
- 上传SBOM文件并根据其生成结果。```bash
curl -X POST
-H 'X-API-Key: dev-only-change-me'
-H 'Content-Type: multipart/form-data'
-F 'file=@/tmp/app/sbom_file.json'
http://127.0.0.1:7070/scan?type=js
## 本地开发
按照官方 [文档](https://docs.astral.sh/uv/) 设置 uv。```shell
uv sync --all-extras --all-packages
uv run depscan --help
uv run pytest
本地 VDB 设置```shell
vdb --clean vdb --download-image
To scan containers and OS images
vdb --download-full-image
### 扫描本地 depscan```shell
uv run depscan --config .config/depscan-dev.toml
这将自动使用本地配置文件 file 中指定的配置。
文档
完整文档位于 depscan.readthedocs.io。关键页面:
- 支持的语言和可达性矩阵
- 可达性分析(中心)
- 可达性模型
- dep-scan 如何确定优先级
- SBOM 与证据
- 语言指南:Rust、Go、.NET、JVM/JS/Python/PHP
- 分析器:框架可达性、语义可达性
- 输出与合规:VDR 指南、CSAF VEX 指南
- 通过环境变量进行自定义
- 高级用法:GitHub 安全公告、建议模式、包风险审计、实时操作系统扫描、许可证扫描、自定义报告
许可证
MIT 许可证
本项目由 AppThreat Ltd. 于 2023 年 8 月捐赠给 OWASP 基金会。
资金支持
本项目通过 NGI Zero Core 资助,该基金由 NLnet 设立,并得到欧盟委员会 下一代互联网 计划的财政支持。更多信息请访问 NLnet 项目页面。
