目录
开源软件是现代软件项目的基础。今天编写的任何软件包含 70-90% 的开源代码,以库和其他组件的形式存在。这些开源库通常伴随着安全风险,并在消费者软件项目中随时间推移引入技术债务。这些风险包括
在本文中,我们将探讨如何使用 vet,这是一个在软件消费者使用前对开源库进行审查的开源工具。
免责声明:我是 vet 的创建者。你可以在 https://github.com/safedep/vet 关注该项目
TL;DR
注意:本文中的示例是通过使用 vet 扫描 https://github.com/safedep/demo-client-java 创建的,这是一个使用故意过旧版本库的 Java 应用
- 按照安装文档安装
vet - 如果你使用
homebrew,可以轻松安装它
brew tap safedep/tap
brew install safedep/tap/vet- 扫描项目源代码中的漏洞和其他风险
vet scan -D /path/to/source默认配置应扫描你的软件包清单(例如 package-lock.json、gradle.lockfile、pom.xml)并识别软件所依赖的风险最高的开源库。升级这些库通常可以降低漏洞风险。
除了扫描整个源代码目录,你也可以扫描特定的软件包清单。这对于 monorepo 或避免 vet 拾取文档或测试数据相关的子模块很有用
vet scan --lockfiles gradle.lockfile --lockfiles ui/package-lock.json过滤器
像大多数其他安全工具一样,vet 默认使用一种固执己见的方法来识别"风险",这可能不适合所有消费者。filters 的 vet 功能允许消费者识别他们关心的有风险的开源库。
- 仅识别存在严重漏洞的库
vet scan -D /path/to/source --filter 'vulns.critical.exists(p, true)'- 识别无人维护的库
vet scan -D /path/to/source --filter 'scorecard.scores.Maintained == 0'Scorecard 检查基于 OpenSSF Scorecard 项目
- 查找具有特定许可证的库
vet scan -D /path/to/source --filter 'licenses.exists(p, p == "MIT")'有关完整的过滤功能列表,请参阅文档
报告
修复、响应或与其他工具集成需要额外信息,这些信息可以通过各种支持的报告格式获取。
常见用例包括
- 将有风险的库导出为 CSV 报告
vet scan -D /path/to/source --filter 'vulns.critical.exists(p, true)' --report-csv report.csv- 将有风险的库导出为 SARIF 报告
vet scan -D /path/to/source --filter 'vulns.critical.exists(p, true)' --report-sarif report.sarif策略即代码
过滤器可以组合成 YAML 文档,通过 vet 实现策略即代码功能。它可用于在 CI/CD 中建立防护栏,防止引入有风险的开源库。
vet scan -D /path/to/source --filter-suite policy.yml --filter-fail策略违规将在 vet 中触发非零退出代码,并显示类似以下错误:
scan failed due to error: CEL Filter Suite analyzer raised an event to fail with: failed due to filter suite match on demo-client-java/gradle.lockfile这对于 CI 集成非常有用,可以根据退出代码使构建步骤失败。更多详细信息请参阅策略即代码文档
结论
使用开源库需要进行安全审查。vet 项目的目标是使开源库审查过程变得简单和自动化,同时提供必要的控制和定制以实现更广泛的采用。
vet 是一个社区驱动的项目,欢迎社区参与和贡献。通过 GitHub issue 报告错误或请求新功能,并在 community Discord 上加入我们。
- vet
- guardrails
来自 SafeDep 博客的最新内容
关注以获取有关开源安全与工程的最新更新和见解