mshermancyber/sbom-visualizer

GitHub: mshermancyber/sbom-visualizer

一个基于浏览器的单文件SBOM分析工具,用于扫描漏洞、可视化依赖关系并检查许可证合规性。

Stars: 0 | Forks: 0

# SBOM 可视化分析器 一款基于单个 HTML 文件的软件物料清单分析工具。在浏览器中打开即可加载 SBOM 文件,获得完整的漏洞扫描、许可证审查、依赖关系图和供应商风险分析 —— 无需服务器,无需安装,除用户触发的外部 API 调用外,所有数据不会离开您的设备。 ![License](https://img.shields.io/badge/license-GPL--3.0-blue) ## 功能概览 **解析** CycloneDX 1.4/1.5、SPDX 2.x 和 Syft JSON(Schema v16+)。支持同时加载多个 SBOM 文件进行并排对比。 **扫描** 所有组件,通过 [OSV.dev](https://osv.dev) 进行生态感知查询 —— 分发包(RPM、DEB、APK)会路由至其正确的 OSV 生态系统,语言包则通过 PURL 查询。Arch Linux 软件包(`pkg:alpm`)通过 PURL 查询,因为 OSV 未维护原生的 Arch 生态系统索引。 **增强** CVE 记录:针对 OSV 缺少数值评分的情况,从 [MITRE CVE 服务 API](https://cveawg.mitre.org)(cve.org)获取权威 CVSS 评分。CVSS 2.0、3.0、3.1 和 4.0 基础评分在本地根据向量字符串,使用完整的 FIRST 规范公式计算 —— 无需外部计算器。 **叠加** [CISA 已知可利用漏洞](https://www.cisa.gov/known-exploited-vulnerabilities-catalog) 目录到扫描结果中,标记确认在野利用的漏洞,并附带 BOD 22-01 修复背景信息。 ## 视图模式 | 视图 | 显示内容 | |---|---| | **概览** | 风险评分、严重性分布、主要漏洞、许可证摘要 | | **组件** | 可搜索、可排序的组件表格,内联显示 CVSS | | **许可证** | 许可证分布、copyleft 标记、SPDX 标识符 | | **依赖** | 从 SBOM 解析的依赖关系 | | **漏洞** | 完整的 CVE 列表,包含 CVSS 评分、向量、KEV 徽章、描述 | | **对比** | 对比两个已加载的 SBOM —— 显示新增、移除和变更的组件 | | **完整性** | 每个组件的 NTIA 最低元素评分 | | **依赖图** | D3 力导向依赖关系图,支持缩放、拖拽和节点高亮 | | **供应商** | 按供应商/厂商分组的组件,包含各供应商风险评分 | | **漏洞路径** | 传递可达性链 —— “A → B → 存在漏洞的库” | ## 支持的 SBOM 格式 | 格式 | 版本 | |---|---| | CycloneDX | 1.4, 1.5 | | SPDX | 2.2, 2.3 | | Syft JSON | Schema v16+ | 支持多文件加载。可通过拖放或文件选择器加载。 ## 漏洞扫描 扫描分四个阶段运行: 1. **批量查询** —— 所有组件通过 OSV.dev `/v1/querybatch` 进行查询,每批 100 个 2. **数据充实** —— 从 OSV.dev `/v1/vulns/{id}` 获取唯一的漏洞完整信息(10 个并发) 3. **CVE 增强** —— 对于任何仍缺少数值评分的 CVE 别名漏洞,从 `cveawg.mitre.org/api/cve/{id}` 获取(8 个并发,CORS 失败时静默处理) 4. **KEV 叠加** —— 可选加载 CISA KEV JSON 源;标记匹配的 CVE,并注明利用状态和 BOD 22-01 截止日期背景 ### 生态系统路由 | PURL scheme | OSV 查询方式 | |---|---| | `pkg:npm`, `pkg:pypi`, `pkg:maven`, `pkg:cargo`, `pkg:gem`, `pkg:nuget`, `pkg:golang` | PURL | | `pkg:rpm`(amzn, rhel, fedora, sles, rocky, alma, oracle) | 名称 + 版本 + 生态系统 | | `pkg:deb` | 名称 + 版本 + Ubuntu 或 Debian | | `pkg:apk` | 名称 + 版本 + Alpine | | `pkg:alpm` (Arch Linux) | PURL(OSV 没有原生 Arch 生态系统) | | `pkg:oci` | 跳过 | ### CVSS 评分 评分在本地使用 FIRST CVSS 3.1 基础评分公式根据向量字符串计算。严重性等级遵循官方阈值:严重 ≥9.0,高危 ≥7.0,中危 ≥4.0,低危 >0.0。CVSS 2.0 基础评分也会计算。当运行 cve.org 增强阶段时,来自 `containers.cna.metrics` 的权威 CNA 提供的评分和 CISA ADP 容器(`containers.adp`)的评分将被优先采用。 ## 导出功能 - **组件 CSV** —— 名称、版本、类型、许可证、供应商、PURL、漏洞数量、最高严重性 - **漏洞 CSV** —— CVE ID、OSV ID、严重性、CVSS 评分、向量、KEV 标记、描述 - **HTML 报告** —— 独立的可共享报告,包含完整的结果表格 - **规范化 JSON** —— 以一致的内部模式解析 SBOM,无论输入格式如何 ## 其他特性 - **多 SBOM 对比** —— 通过 PURL 或 name@version 键对比两个 SBOM;显示新增、移除和变更的组件及版本差异 - **NTIA 完整性评分** —— 检查每个组件的全部 7 个 NTIA 最低元素(名称、版本、供应商、唯一标识符、依赖关系、作者、时间戳) - **供应商/厂商视图** —— 按供应商分组组件,显示各厂商的漏洞数量和风险评分;点击可展开完整的组件表格 - **传递漏洞路径** —— 从每个存在漏洞的组件出发,进行广度优先搜索的逆向邻接遍历,直到根节点;显示深度最多为 8 的可达性链 - **D3 依赖图** —— 力导向布局,提供三种颜色模式,支持缩放、拖拽和点击高亮 - **全局搜索** —— `⌘K` 或 `/` 可搜索所有组件、漏洞和许可证 - **键盘快捷键** —— `1`–`8` 切换视图,`Tab` 循环切换,`Escape` 关闭 - **会话持久化** —— 通过 `localStorage`,加载的文件和扫描结果在页面刷新后仍然保留 - **风险评分** —— 每个 SBOM 的综合评分:严重×10,高危×5,中危×2,低危×1,KEV 命中×15,copyleft/无许可证扣分 ## 示例 SBOM 需要测试用的 SBOM?[anchore/sbom-examples](https://github.com/anchore/sbom-examples?tab=readme-ov-file) 仓库提供了一系列精心策划的 CycloneDX 和 SPDX 文件,涵盖了多种真实世界的容器镜像和包生态系统 —— 可直接用于本工具。 ## 使用方法 ``` # 无需安装。直接打开文件。 open sbom-visualizer.html ``` 或者,如果您愿意,可以在本地提供服务: ``` python3 -m http.server 8080 # 然后打开 http://localhost:8080/sbom-visualizer.html ``` 通过将 SBOM 拖放到拖放区域或使用文件选择器来加载它。点击 **扫描漏洞** 以运行 OSV 查询流程。可选择从漏洞视图加载 CISA KEV 源。 ## 隐私说明 所有 SBOM 解析都在您的浏览器本地进行。仅有的出站调用是: - `api.osv.dev` —— 漏洞查询(包名称、版本、PURL) - `cveawg.mitre.org` —— 为 CVE 别名的发现增强 CVSS 评分 - `www.cisa.gov` —— KEV 源下载(仅在您点击“加载 KEV 源”时触发) 无遥测数据。无分析。无需账户。 ## 已知限制 - **Arch Linux (`pkg:alpm`)** —— OSV 未维护原生的 Arch Linux 生态系统索引。基于 PURL 的查询会显示 `curl` 和 `openssl` 等包的上游 CVE,但会错过在 [security.archlinux.org](https://security.archlinux.org) 发布的 Arch 特定公告。 - **cve.org 增强** —— `cveawg.mitre.org` 是公开的只读端点,但无法保证从浏览器上下文发送的 CORS 头。增强失败会静默处理;回退使用 OSV 计算的评分。 - **大型 SBOM** —— 包含数千个组件的 SBOM 会触发 OSV 速率限制。扫描器按每批 100 个查询进行分批,并设有 3 次错误即中止的阈值。 - **依赖图** —— 传递路径追踪需要 SBOM 中的关系数据(CycloneDX 中的 `dependsOn`,SPDX 中的 `DEPENDS_ON`,Syft 中的 `artifactRelationships`)。未包含关系数据生成的 SBOM 将仅显示组件作为直接依赖。 ## 技术栈 构建为单个自包含的 HTML 文件,无构建步骤,无需 npm。 - [Chart.js 4.4](https://www.chartjs.org) —— 概览图表 - [D3 7.8](https://d3js.org) —— 依赖关系图 - [Tabler Icons](https://tabler.io/icons) —— UI 图标 - [OSV.dev API](https://osv.dev/docs/) —— 漏洞数据 - [CISA KEV](https://www.cisa.gov/known-exploited-vulnerabilities-catalog) —— 利用状态 - [MITRE CVE Services](https://cveawg.mitre.org) —— 权威 CVSS 评分 ## 许可证 GPL-3.0。详情请参阅 [LICENSE](LICENSE)。
标签:API集成, CISA KEV, CMS安全, CVE管理, CVSS评分, HTML5, JavaScript, MITRE CVE, OSV.dev, PURL解析, SBOM分析, Svelte, 依赖关系图, 前端技术, 单文件应用, 可观测性, 后端开发, 多模态安全, 安全合规, 完整性检查, 开源组件管理, 数据可视化, 比较工具, 浏览器工具, 组件风险分析, 网络代理, 许可证审计, 跌倒检测, 软件安全评估, 软件物料清单