安全使用开源库

目录

开源软件是现代软件项目的基础。今天编写的任何软件包含 70-90% 的开源代码,以库和其他组件的形式存在。这些开源库通常伴随着安全风险,并在消费者软件项目中随时间推移引入技术债务。这些风险包括

在本文中,我们将探讨如何使用 vet,这是一个在软件消费者使用前对开源库进行审查的开源工具。

免责声明:我是 vet 的创建者。你可以在 https://github.com/safedep/vet 关注该项目

TL;DR

注意:本文中的示例是通过使用 vet 扫描 https://github.com/safedep/demo-client-java 创建的,这是一个使用故意过旧版本库的 Java 应用

  • 按照安装文档安装 vet
  • 如果你使用 homebrew,可以轻松安装它
plaintext
brew tap safedep/tap brew install safedep/tap/vet
  • 扫描项目源代码中的漏洞和其他风险
plaintext
vet scan -D /path/to/source

默认配置应扫描你的软件包清单(例如 package-lock.jsongradle.lockfilepom.xml)并识别软件所依赖的风险最高的开源库。升级这些库通常可以降低漏洞风险。

vet 默认扫描结果

除了扫描整个源代码目录,你也可以扫描特定的软件包清单。这对于 monorepo 或避免 vet 拾取文档或测试数据相关的子模块很有用

plaintext
vet scan --lockfiles gradle.lockfile --lockfiles ui/package-lock.json

过滤器

像大多数其他安全工具一样,vet 默认使用一种固执己见的方法来识别"风险",这可能不适合所有消费者。filtersvet 功能允许消费者识别他们关心的有风险的开源库。

  • 仅识别存在严重漏洞的库
plaintext
vet scan -D /path/to/source --filter 'vulns.critical.exists(p, true)'
查找有漏洞的依赖项
  • 识别无人维护的库
plaintext
vet scan -D /path/to/source --filter 'scorecard.scores.Maintained == 0'
查找无人维护的依赖项

Scorecard 检查基于 OpenSSF Scorecard 项目

  • 查找具有特定许可证的库
plaintext
vet scan -D /path/to/source --filter 'licenses.exists(p, p == "MIT")'

有关完整的过滤功能列表,请参阅文档

报告

修复、响应或与其他工具集成需要额外信息,这些信息可以通过各种支持的报告格式获取。

常见用例包括

  • 将有风险的库导出为 CSV 报告
plaintext
vet scan -D /path/to/source --filter 'vulns.critical.exists(p, true)' --report-csv report.csv
  • 将有风险的库导出为 SARIF 报告
plaintext
vet scan -D /path/to/source --filter 'vulns.critical.exists(p, true)' --report-sarif report.sarif

策略即代码

过滤器可以组合成 YAML 文档,通过 vet 实现策略即代码功能。它可用于在 CI/CD 中建立防护栏,防止引入有风险的开源库。

示例策略

plaintext
vet scan -D /path/to/source --filter-suite policy.yml --filter-fail

策略违规将在 vet 中触发非零退出代码,并显示类似以下错误:

plaintext
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 博客的最新内容

关注以获取有关开源安全与工程的最新更新和见解