devops-kung-fu/bomber

GitHub: devops-kung-fu/bomber

bomber 是一个用于扫描软件物料清单(SBOM)中安全漏洞与许可证风险的命令行工具。

Stars: 608 | Forks: 55

![bomber](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/ad83a81b1a143554.png) [![](https://img.shields.io/badge/Status-BETA-yellow)](CONTRIBUTING.md) ![GitHub release (latest by date)](https://img.shields.io/github/v/release/devops-kung-fu/bomber) [![Go Report Card](https://goreportcard.com/badge/github.com/devops-kung-fu/bomber)](https://goreportcard.com/report/github.com/devops-kung-fu/bomber) [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/6409/badge)](https://bestpractices.coreinfrastructure.org/projects/6409) [![codecov](https://codecov.io/gh/devops-kung-fu/bomber/branch/main/graph/badge.svg?token=P9WBOBQTOB)](https://codecov.io/gh/devops-kung-fu/bomber) `bomber` is an application that scans SBOMs for security vulnerabilities. ## 概述 所以你向供应商询问某个闭源产品的软件物料清单(SBOM),他们提供了一个 JSON 文件……现在该怎么办? 首先,你需要查看 SBOM 中列出的组件是否存在安全漏洞,以及这些组件的许可证类型。这将帮助你识别使用该产品会带来何种风险。 查找 SBOM 中组件的安全漏洞和许可证信息正是 `bomber` 的用途。`bomber` 可以读取任何基于 JSON 或 XML 的 [CycloneDX](https://cyclonedx.org) 格式,或 JSON [SPDX](https://spdx.dev) 或 [Syft](https://github.com/anchore/syft) 格式的 SBOM,并快速告诉你是否存在漏洞。 ## 目录 - [开源与闭源](#open-vs-closed-source) - [用途](#purpose) - [支持的 SBOM 格式](#supported-sbom-formats) - [提供者](#providers) - [提供者支持](#provider-support) - [提供者文档](#provider-documentation) - [安装](#installation) - [Mac](#mac) - [Linux](#linux) - [使用 bomber](#using-bomber) - [单个 SBOM 扫描](#single-sbom-scan) - [整个文件夹扫描](#entire-folder-scan) - [输出格式](#output-formats) - [HTML 输出](#html-output) - [JSON 输出](#json-output) - [Markdown 输出](#markdown-output) - [忽略漏洞](#ignoring-vulnerabilities) - [过滤输出](#filtering-output) - [数据丰富](#data-enrichment) - [漏洞利用预测评分系统(EPSS)](#exploit-prediction-scoring-system-epss) - [高级功能](#advanced-stuff) - [从 STDIN 扫描 SBOM](#scanning-sboms-from-stdin) - [环境变量](#environment-variables) - [实验性功能](#experimental-features) - [最高严重性返回代码(实验性)](#highest-severity-return-codes-experimental) - [OpenAI AI 增强 HTML 报告输出](#openai-ai-enriched-html-report-output) - [折腾一下](#messing-around) - [说明](#notes) - [贡献](#contributing) - [软件物料清单](#software-bill-of-materials) - [赞助商](#sponsors) - [致谢](#credits) ### 开源与闭源 软件可以是开源或闭源。你可以在 GitHub 或任何公共源代码仓库查看第三方组件作为开源。技术上,你自己在公司内部创建的软件也是开源的——它不是公开的,但你的内部团队可以看到它。闭源软件也可能是内部的,但通常这是你从外部供应商购买的软件。 公司可以使用 GitHub、Sonatype、Snyk 等供应商提供的 SCA 工具来扫描任何类型的开源软件并提供漏洞数据——在某些情况下甚至可以生成 SBOM。他们无法(尚未……)扫描你无法访问的闭源软件。这就是 SBOM 和 `bomber` 发挥作用的地方。SBOM 提供你无法访问的软件组成,而 `bomber` 则会判断 SBOM 中的内容是否存在漏洞。 ### 用途 我们创建 `bomber` 是为了扫描供应商在收到时提供的闭源 SBOM。它也可以扫描开源 SBOM,理论上你可以用 `bomber` 作为一个开源 SCA 工具。 ### 支持的 SBOM 格式 目前有多种 SBOM 格式可用。`bomber` 支持以下格式: - [SPDX](https://spdx.dev) - [CycloneDX](https://cyclonedx.org) - [Syft](https://github.com/anchore/syft) ## 提供者 ![](https://raw.githubusercontent.com/devops-kung-fu/bomber/main/img/providers/banner.png) `bomber` 支持多个漏洞信息来源。我们称之为 _提供者(Providers)_。目前,`bomber` 使用 [OSV](doc/providers/osv.md) 作为 _默认_ 提供者,但你也可以使用 [Github Advisory Database](docs/providers/github.md)、[Sonatype OSS Index](doc/providers/ossindex.md) 或 [Snyk](doc/providers/snyk.md)。 需要注意的是,[OSV](doc/providers/osv.md) 是免费的,使用时无需任何凭证;[Sonatype OSS Index](doc/providers/ossindex.md) 是免费的,但需要你注册并获取令牌;而 [Snyk](doc/providers/snyk.md) 支持需要 Snyk 许可证。 除了从提供者收集的数据,`bomber` 还会 [丰富(Enrich)](#data-enrichment) 漏洞数据,加入利用概率等额外信息。 ### 提供者支持 请注意,_每个提供者支持不同的生态系统_,因此如果你在一种提供者下没有看到任何漏洞,可以尝试另一种。生态系统只是指包管理器或包类型,例如 rpm、npm、gems 等。需要理解的一点是,每个提供者可能会报告不同的漏洞。如果不确定,可以查看多个提供者的结果。 如果 `bomber` 没有找到任何漏洞,并不意味着不存在漏洞。这可能只是当前使用的提供者未检测到,或者不支持该生态系统。有些提供者返回的漏洞没有严重性信息。在这种情况下,严重性会显示为“UNDEFINED”。 ### 提供者文档 `bomber` 的提供者文档如下: - [OSV](doc/providers/osv.md) - [GitHub Advisory Database](doc/providers/github.md) - [OSSINDEX](doc/providers/ossindex.md) - [Snyk](doc/providers/snyk.md) ## 安装 ### Mac 你可以使用 [Homebrew](https://brew.sh) 安装 `bomber`,命令如下: ``` brew tap devops-kung-fu/homebrew-tap brew install devops-kung-fu/homebrew-tap/bomber ``` 如果你没有 Homebrew,仍然可以 [下载最新版本](https://github.com/devops-kung-fu/bomber/releases)(例如 `bomber_0.4.1_darwin_all.tar.gz`),解压后直接使用 `bomber` 二进制文件。 如果需要,可以将 `bomber` 二进制文件移动到 `/usr/local/bin` 或任何在 PATH 中的目录。 ### Linux 要安装 `bomber`,[下载适用于你平台的最新版本](https://github.com/devops-kung-fu/bomber/releases) 并在本地安装。例如,在 Ubuntu 上安装 `bomber`: ``` dpkg -i bomber_0.5.0_linux_arm64.deb ``` ## 使用 bomber 你可以扫描整个 SBOM 文件夹或单个 SBOM 文件,命令为 `bomber`。`bomber` 不关心你是否在一个文件夹中包含多种格式,它会自动帮你处理。 注意,默认情况下 `bomber` 的输出是打印到标准输出。HTML 或 JSON 格式的输出选项在本文档后面有说明。 ### 单个 SBOM 扫描 ``` # 使用默认提供程序 OSV(无需任何凭据) bomber scan cyclonedx.sbom.json # 使用需要凭据的提供程序(ossindex) bomber scan --provider=xxx --username=xxx --token=xxx [sbom.json] ``` 如果提供者发现漏洞,你会看到类似以下的输出: ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/e98111c5dd143557.png) 如果提供者没有返回任何漏洞,会显示一条“未找到漏洞”的消息。 __注意:__ 即使使用指定提供者未发现漏洞,也不代表没有漏洞。请尝试 bomber 支持的其他提供者。 ### 整个文件夹扫描 当你从供应商那里收到多个相同产品的 SBOM 时,或者你想了解整个组织中的漏洞情况,这个功能非常有用。文件夹扫描会找到所有组件,去重后统一扫描漏洞。 ``` # 扫描 SBOM 文件夹(以下命令将扫描当前文件夹中名为 "sboms" 的文件夹) bomber scan --provider=xxx --username=xxx --token=xxx ./sboms ``` 你会看到与单个 SBOM扫描类似的结果。 ## 输出格式 `bomber` 支持三种输出格式。默认情况下,输出命令行。你可以使用 `--output=html` 标志输出 HTML 格式的增强报告,使用 `--output=json` 标志输出 JSON 格式。使用逗号分隔多个输出格式,例如 `--output=html,stdout,json`。 ### HTML 输出 如果你希望生成包含详细漏洞信息的可读报告,可以使用 `--output` 标志将报告保存为 HTML 文件。 示例命令: ``` bomber scan bad-bom.json --output=html ``` 这会在当前文件夹中生成一个名为“YYYY-MM-DD-HH-MM-SS-bomber-results.html”的文件。如果用浏览器打开该文件,你会看到类似以下的输出: ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/f063a95781143558.png) ### JSON 输出 `bomber` 可以使用 `--output` 标志以 JSON 格式输出漏洞数据。默认输出到标准输出。JSON 输出包含比终端显示多得多的信息。你可以看到软件包描述、用途、漏洞名称、漏洞摘要等。 ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/ff07468d1a143559.png) 示例命令: ``` bomber scan bad-bom.json --output=json > filename.json ``` ### Markdown 输出 `bomber` 也支持 Markdown 格式输出。这与 HTML 输出类似,但样式交由 Markdown 渲染器(如 GitHub)处理。输出文件保存为“YYYY-MM-DD-HH-MM-SS-bomber-results.md”。 示例命令: ``` bomber scan bad-bom.json --output=md ``` ## 忽略漏洞 如果需要,你可以使用 `--ignore-file` 标志加载要忽略的 CVE 列表。该列表需要遵循特定格式,每个要忽略的 CVE 占一行,示例如下: ``` CVE-2022-31163 CVE-2022-23520 ``` 示例 `bomber.ignore` 文件 [在此](./_TESTDATA_/ignore/bomber.ignore)。 使用该 `bomber.ignore` 文件的语法如下: ``` bomber --ignore-file=bomber.ignore scan bom.json ``` ## 过滤输出 你可以通过 `--severity` 标志设置严重性级别,以仅返回特定严重性的漏洞。例如,如果你设置 `--severity=moderate`,只会返回严重性为 `MODERATE` 或更高的漏洞。 例如,以下命令只会返回高危和严重漏洞: ``` bomber --severity=high scan bom.json ``` ## 数据丰富 `bomber` 具备丰富漏洞数据的能力,可以从 [提供者](#providers) 获取的数据基础上进行增强。我们已实现的第一个增强功能是针对 [EPSS](https://www.first.org/epss/) 的。 **注意:** 从 `bomber 0.5.0` 开始,EPSS 评分不再默认为启用状态。要显示 EPSS 分数,请务必使用 `--enrich=epss` 标志。 ### 漏洞利用预测评分系统(EPSS) [EPSS](https://www.first.org/epss/) 代表漏洞利用预测评分系统,是一种预测漏洞被利用概率的框架。[EPSS](https://www.first.org/epss/) 常用于识别高风险漏洞并优先进行修复。 [EPSS](https://www.first.org/epss/) 使用百分比表示概率。因此,如果你看到 94,意味着该漏洞有 94% 的被利用概率。逻辑上,评分越高(如 94),越需要立即关注;评分较低(如 20),则可以降低优先级。 ## 高级功能 如果你愿意,可以设置两个环境变量来存储凭证,而无需在命令行中输入。查看后面的 [环境变量](####Environment-Variables) 说明。 ### 从 STDIN 扫描 SBOM 如果你在 CI/CD 流水线中使用 `bomber`,可以一次性完成生成和扫描 SBOM 的操作。方法如下: ``` # 确保在命令末尾包含 - 字符,这会触发 bomber 从 STDIN 读取 syft packages . -o cyclonedx-json | bomber scan --provider ossindex --output json - ``` 该命令会创建一个 SBOM,将其通过管道传递给 `bomber`,并以 JSON 格式输出结果。 ### 环境变量 如果你不想每次都输入凭证,可以将以下内容添加到 `.bashrc` 或 `.bash_profile`: ``` export BOMBER_PROVIDER_USERNAME={{your OSS Index user name}} export BOMBER_PROVIDER_TOKEN={{your OSS Index API Token}} ``` ## 实验性功能 ### 最高严重性返回代码(实验性) 使用 `--exitcode` 标志时,`bomber` 会返回一个代表最高漏洞严重性的退出码。不使用该标志时,成功返回 `0`,遇到错误返回 `1`。 在不发生错误的情况下,`bomber` 在使用 `--exitcode` 时会返回以下值: | 严重性 | 返回代码 | | ------ | -------- | | UNSPECIFIED(提供者返回异常或无信息) | 10 | | LOW | 11 | | MODERATE | 12 | | HIGH | 13 | | CRITICAL | 14 | ### OpenAI AI 增强 HTML 报告输出 `bomber` 现在包含一个实验性功能,可以在 `html` 输出中增强漏洞描述。该功能会将漏洞描述转换为更适合非技术人员理解的表述。 **注意:** 该功能目前处于早期 alpha 阶段,运行速度较慢,且输出格式不够完善。 要使用此功能,你需要提供 OpenAI API 密钥。可以通过以下方式之一传递密钥: - 在 CLI 中使用 `--openai-api-key={{你的 OpenAI API 密钥}}` - 或设置环境变量: ``` export OPENAI_API_KEY={{your OpenAI API Key}} ``` 设置好 OpenAI API 密钥后,可以按如下方式设置输出标志: ``` bomber scan --output ai [sbom.json] ``` ## 折腾一下 如果你想测试 `bomber`,可以在 [test](_TESTDATA_/sbom/) 文件夹中找到一些示例 SBOM 文件。 ## 说明 - SBOM 中包含许可证信息的情况较为少见。大多数生成工具(如 Syft)需要添加类似 `--license` 的标志才能获取许可证信息。如果需要许可证信息,请确保在生成 SBOM 时请求该信息。 - OSV 很不错,但 API 行为也有些古怪。它们提供了批量查询端点,理论上可以加快查询速度,但目前尚未按预期工作。`bomber` 需要逐个 PURL 发送请求以获取漏洞信息,因此在大型 SBOM 中会花费一些时间。我们会持续关注这个问题。 ## 贡献 如果你希望为 `bomber` 的开发做出贡献,请参考仓库中的 [CONTRIBUTING.md](CONTRIBUTING.md) 文件。在贡献前,请阅读 [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)。 ## 软件物料清单 `bomber` 每次有开发者向本仓库提交代码时,都会使用 Syft 生成软件物料清单(前提是启用了 [Hookz](https://github.com/devops-kung-fu/hookz) 并已在工作目录中初始化)。更多关于 CycloneDX 的信息请参考[这里](https://cyclonedx.org)。 当前 `bomber` 的 CycloneDX SBOM 可在此处获取:[链接](./sbom/bomber.cyclonedx.json)。 ## 赞助商 感谢 `bomber` 的赞助商和支持者 ![](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/439bc486fb143600.png) ## 致谢 特别感谢我们的朋友 [ZERO](https://zero.health) 提供的 `bomber` 标志。 感谢 [Sonatype](https://sonatype.com) 提供像 [Sonatype OSS Index](https://ossindex.sonatype.org) 这样强大的工具。 非常感谢我们的朋友和同事 [Snyk](https://snyk.io) 创建了一个提供者并实现了从 STDIN 处理 SBOM 的功能。你们太棒了。 EPSS 描述来自 [Nucleus](https://nucleussec.com/blog/what-is-epss/) 团队。感谢你们!
标签:CycloneDX, DevSecOps, EVTX分析, Go语言, SBOM, SPDX, Syft, 上游代理, 云安全监控, 安全风险评估, 开源框架, 持续集成, 日志审计, 硬件无关, 程序破解, 组件分析, 许可证合规, 跌倒检测, 软件物料清单, 静态分析