现代软件中 70-90% 的代码来自开源 —— 我们如何确保其安全性?
vet 是一个为 开发者和安全工程师 设计的开源软件供应链安全工具,它提供了以下功能:
✅ 下一代软件组成分析 —— 漏洞和恶意包检测
✅ 策略即代码 —— 使用 CEL 表达意见化的安全策略
✅ 实时恶意包检测 —— 由 SafeDep Cloud 主动扫描提供支持
✅ 多生态系统支持 —— npm, PyPI, Maven, Go, Docker, GitHub Actions 等
✅ CI/CD 原生 —— 适用于 DevSecOps 工作流,支持 GitHub Actions, GitLab CI 等
✅ MCP 服务器 —— 将 vet 作为 MCP 服务器运行,以验证 AI 建议的代码中的开源包
✅ 代理 —— 运行 AI 代理查询和分析扫描结果
几秒钟内安装:
# macOS & Linux
brew install safedep/tap/vet
或下载 预构建的二进制文件
扫描项目:
# 扫描当前目录
vet scan -D .
# 扫描单个文件
vet scan -M package-lock.json
# 在 CI 中遇到关键漏洞时失败
vet scan -D . --filter 'vulns.critical.exists(p, true)' --filter-fail
# 在 CI 中不满足 OpenSSF Scorecard 要求时失败
vet scan -D . --filter 'scorecard.scores.Maintained < 5' --filter-fail
# 在 CI 中如果包来自 GitHub 仓库且星数少于 5 时失败
vet scan -D . --filter 'projects.exists(p, p.type == "GITHUB" && p.stars < 5)' --filter-fail
与依赖项扫描器不同,vet 分析您的 实际代码使用情况 以优先处理真实风险。详情请参阅 依赖项使用证据。
集成 SafeDep Cloud,提供对野外恶意包的实时保护。免费提供给开源项目。当未提供 API 密钥时,回退到 查询模式。更多关于恶意包扫描的信息,请参阅 恶意包检测。
使用 CEL 表达式定义安全策略,以强制执行特定上下文的安全要求。
# 阻止具有关键 CVE 的包
vet scan \
--filter 'vulns.critical.exists(p, true)'
# 强制执行许可证合规性
vet scan \
--filter 'licenses.contains_license("GPL-3.0")'
# 强制执行 OpenSSF Scorecard 要求
# 要求最低的 OpenSSF Scorecard 分数
vet scan \
--filter 'scorecard.scores.Maintained < 5'
在 CI/CD 流水线中零配置的安全防护,防止漏洞和恶意包,并使用您自己的意见化策略:
- uses: safedep/vet-action@v1
with:
policy: ".github/vet/policy.yml"
更多信息请参阅 vet-action 文档。
企业级扫描,使用 vet CI 组件:
include:
- component: gitlab.com/safedep/ci-components/vet/scan@main
在任何地方运行 vet,包括内部开发平台或自定义 CI/CD 环境,使用我们的容器镜像。
docker run --rm -v $(pwd):/app ghcr.io/safedep/vet:latest scan -D /app
brew tap safedep/tap
brew install safedep/tap/vet
请参阅 发布页面 获取最新版本。
go install github.com/safedep/vet@latest
# 快速测试
docker run --rm ghcr.io/safedep/vet:latest version
# 扫描本地目录
docker run --rm -v $(pwd):/workspace ghcr.io/safedep/vet:latest scan -D /workspace
vet version
# 应显示版本和构建信息
📁 目录扫描
# 扫描当前目录
vet scan
# 扫描指定目录
vet scan -D /path/to/project
# 解析并扫描传递依赖
vet scan -D . --transitive
📄 清单文件
# 包管理器
vet scan -M package-lock.json
vet scan -M requirements.txt
vet scan -M pom.xml
vet scan -M go.mod
vet scan -M Gemfile.lock
</td>
<td width="50%">
🐙 GitHub 集成
# 设置 GitHub 访问
vet connect github
# 扫描仓库
vet scan --github https://github.com/user/repo
# 组织扫描
vet scan --github-org https://github.com/org
📦 工件扫描
# 容器镜像
vet scan --image nginx:latest
vet scan --image /path/to/image-saved-file.tar
# 二进制工件
vet scan -M app.jar
vet scan -M package.whl
</td>
</tr>
</table>
# 安全优先扫描
vet scan -D . \
--filter 'vulns.critical.exists(p, true) || vulns.high.exists(p, true)' \
--filter-fail
# 许可证合规性
vet scan -D . \
--filter 'licenses.contains_license("GPL-3.0")' \
--filter-fail
# OpenSSF Scorecard 要求
vet scan -D . \
--filter 'scorecard.scores.Maintained < 5' \
--filter-fail
# 基于流行度的过滤
vet scan -D . \
--filter 'projects.exists(p, p.type == "GITHUB" && p.stars < 50)' \
--filter-fail
# 扫描 CycloneDX SBOM
vet scan -M sbom.json --type bom-cyclonedx
# 扫描 SPDX SBOM
vet scan -M sbom.spdx.json --type bom-spdx
# 生成 SBOM 输出
vet scan -D . --report-cdx=output.sbom.json
# 包 URL 扫描
vet scan --purl pkg:npm/lodash@4.17.21
对于大型代码库和重复分析:
# 一次扫描,多次查询
vet scan -D . --json-dump-dir ./scan-data
# 使用不同的过滤器查询
vet query --from ./scan-data \
--filter 'vulns.critical.exists(p, true)'
# 生成聚焦报告
vet query --from ./scan-data \
--filter 'licenses.contains_license("GPL")' \
--report-json license-violations.json
vet 生成针对不同利益相关者的报告:
# SARIF 格式用于 GitHub 安全标签
vet scan -D . --report-sarif=report.sarif
# JSON 格式用于自定义工具
vet scan -D . --report-json=report.json
# CSV 格式用于电子表格分析
vet scan -D . --report-csv=report.csv
# HTML 格式用于基于 Web 的分析
vet scan -D . --report-html=report.html
</td>
</tr>
<tr>
<td><strong>📖 适用于开发人员</strong></td>
<td>
# Markdown 报告用于 PR
vet scan -D . --report-markdown=report.md
# 控制台摘要(默认)
vet scan -D . --report-summary
</td>
</tr>
<tr>
<td><strong>🏢 适用于合规性</strong></td>
<td>
# 生成 SBOM
vet scan -D . --report-cdx=sbom.json
# 依赖图
vet scan -D . --report-graph=dependencies.dot
</td>
</tr>
</table>
# 多格式输出
vet scan -D . \
--report-json=report.json \
--report-sarif=report.sarif \
--report-markdown=report.md \
--report-html=report.html
# 聚焦特定问题
vet scan -D . \
--filter 'vulns.high.exists(p, true)' \
--report-json=report.json
vet 可以作为 MCP 服务器运行,以验证 AI 建议的代码中的开源包。
# 使用 SSE 传输启动 MCP 服务器
vet server mcp --server-type sse
更多详细信息,请参阅 vet MCP 服务器 文档。
更多详细信息,请参阅 vet 代理 文档。
通过主动扫描和代码分析进行恶意包检测,由 SafeDep Cloud 提供支持。vet 需要 API 密钥来主动扫描未知包。当未提供 API 密钥时,vet 将回退到 查询模式,该模式从 SafeDep 和 OSV 数据库中检测已知的恶意包。
vet cloud quickstart 获取免费的 API 密钥恶意包检测需要 SafeDep Cloud 的 API 密钥。
# 一次性设置
vet cloud quickstart
# 启用恶意软件扫描
vet scan -D . --malware
# 无需 API 密钥查询已知的恶意包
vet scan -D . --malware-query
由 SafeDep Cloud 恶意包检测发现并报告的示例恶意包: