[Rails] 使用 OSV-Scanner 寻找 Rails 应用程序依赖中存在的漏洞
使用 OSV-Scanner 寻找 Rails 应用程序依赖中存在的漏洞
近日,谷歌发布了开源漏洞扫描器 OSV-Scanner。OSV-Scanner 是为开源的 OSV 数据库提供官方支持的前端工具,用 Go 编写,旨在扫描开源应用程序以评估任何合并依赖项的安全性。
可以使用 OSV-Scanner 寻找 Rails 应用程序依赖中存在的漏洞,包括 Gemfile.lock, package-lock.json, yarn.lock 等文件,.git 目录的最新提交记录,以及基于 Debian 的镜像。
安装
有以下几种方式安装 OSV-Scanner
Release
可以从 Releases · google/osv-scanner - https://github.com/google/osv-scanner/releases 下载最新发布的二进制版本。
包管理器
或通过包管理器 Windows Scoop,Homwbrew 来安装.
1 | Homwbrew (brew) |
关于 Scoop 的更多信息,请查阅 Scoop - https://scoop.sh/。
关于 Homebrew 的更多信息,请查阅 The Missing Package Manager for macOS (or Linux) — Homebrew - https://brew.sh/。
源代码
或者,您可以通过运行从源代码安装:
1 | go install github.com/google/osv-scanner/cmd/osv-scanner@v1 |
这需要安装 Go 1.18+。
使用
OSV-Scanner 会收集项目中使用的依赖项和版本列表,然后通过 OSV.dev API 将此列表与 OSV 数据库进行匹配。您可以将 OSV-Scanner 扫描您的应用目录,输入一个版本依赖锁定文件,扫描基于 Debian 的 Docker 镜像(预览功能),或者扫描 SBOM 软件物料清单文件。
扫描目录
遍历目录列表以查找:
- 版本依赖锁定文件(如 Gemfile.lock, package-lock.json, yarn.lock 等文件)
- SBOM 软件物料清单
- .git 目录的最新提交记录
可以配置为使用 --recursive / -r 标志递归遍历子目录。
例子
1 | osv-scanner -r . |
输入一个版本依赖锁定文件
使用这个 lockfile 包支持范围广泛的 lockfiles。 这是当前支持的锁定文件列表:
例子
1 | osv-scanner --lockfile=Gemfile.lock |
扫描基于 Debian 的 docker 镜像(预览功能)
该工具将抓取 Debian 映像中已安装软件包的列表并查询它们的漏洞。
目前仅支持基于 Debian 的 Docker 镜像扫描。
需要安装 Docker 并且该工具具有调用它的权限。
目前不扫描 Docker 容器的文件系统,并且有各种其他限制。 请关注此问题 - https://github.com/google/osv-scanner/issues/64以获取有关容器扫描的更新!
例子
1 | osv-scanner --docker image_name:latest |
其中
image_name
为您基于 Debian 的 Rails 应用镜像。
输入 SBOM
支持使用包 URL 的 SPDX - https://spdx.dev/ 和 CycloneDX SBOM - https://cyclonedx.org/。 格式是根据输入文件内容自动检测的。
例子
1 | osv-scanner --sbom=sbom.json |
配置
要配置扫描,请将 osv-scanner.toml
文件放在扫描文件的目录中。 要覆盖此文件,请传递 --config=/path/to/config.toml
参数。
目前,只有 1 个配置选项:
IgnoredVulns
要忽略漏洞,请在 IgnoreVulns 键下输入 ID。 (可选)添加到期日期或原因。
例子
1 | [[IgnoredVulns]] |
JSON 输出
默认情况下,osv-scanner 输出一个人类可读的表格。 要让 osv-scanner 输出 JSON,请在调用 osv-scanner 时传递 --json
标志。
当使用 --json
标志时,只有 JSON 输出将被打印到 stdout,所有其他输出都被定向到 stderr。 因此,要仅将 json 输出保存到文件,您可以使用 osv-scanner --json ... > /path/to/file.json
重定向输出。
参考链接
[5] Docker: Accelerated, Containerized Application Development - https://www.docker.com/
[6] The Missing Package Manager for macOS (or Linux) — Homebrew - https://brew.sh/