Skip to content

SenjiMuramasa/SBOMCompare

Repository files navigation

SBOM Compare

SBOM Compare 是一个用于比较两个软件物料清单(SBOM)的工具,支持分析依赖包的变更、许可证合规性、供应链安全评分和漏洞分析。

功能特点

1. 基础比较

  • 检测新增和移除的包
  • 分析版本变更(主版本、次版本、补丁版本)
  • 识别许可证变更和兼容性问题
  • 追踪供应商变更
  • 分析依赖关系变化
  • 智能版本比较,处理特殊前缀(v1.0.0、==1.0.0等)和Unicode转义符号

2. 安全评估

  • 软件供应链安全评分(满分10分)
  • 多维度评估指标
    • 源代码安全性
    • CI/CD流程安全性
    • 容器镜像安全性
    • 端到端供应链安全性
  • 详细的评分解释和改进建议

3. 漏洞分析

  • 自动获取漏洞信息(通过OSV和CVE API)
  • 多线程并行处理提升性能
  • 请求频率限制和自动重试机制,避免API限制
  • 支持多种漏洞ID格式
  • 按严重程度分类统计
  • 提供漏洞详细信息
    • 相关漏洞ID
    • 发布日期
    • 参考链接
    • 漏洞类型
    • 影响范围

4. 风险分析

  • 分级风险评估(高、中、低)
  • 按供应链阶段分类
  • 提供具体的风险描述和改进建议
  • 识别受影响的包

5. 可视化

  • 生成依赖关系变化图
  • 直观展示包之间的依赖关系
  • 使用不同颜色标识变更状态
    • 绿色:新增包
    • 红色:移除包
    • 橙色:版本变更
    • 蓝色:无变化
  • 进度条显示,实时展示处理进度

6. 多种报告格式

  • HTML格式(交互式)
    • 可折叠的详细信息
    • 清晰的表格展示
    • 按严重程度着色
    • 响应式设计
    • 新增包漏洞信息展示
  • 文本格式(命令行友好)
  • JSON格式(便于集成)

使用方法

基本用法

将SBOM文件存入sample_data目录,然后运行以下命令:

python sbom_compare.py <sbom_a.json> <sbom_b.json> [options]

命令行参数

  • --format, -f: 指定输出格式(html/text/json),默认为text
  • --output, -o: 指定输出文件路径
  • --github-org: 指定GitHub组织名(用于安全评分)
  • --github-repo: 指定GitHub仓库名(用于安全评分)
  • --type, -t: 指定目标类型(source_to_ci/ci_to_container/source_to_container/generic)

示例

比较源代码和CI阶段的SBOM,生成HTML报告:

python sbom_compare.py syft_sbom.json syft-build.spdx.json --github-org myorg --github-repo myrepo --type source_to_ci --format html

## 报告内容

### HTML报告包含:
1. 基本统计信息
   - 新增包数量
   - 移除包数量
   - 版本变更数量
   - 许可证变更数量
   - 漏洞数量

2. 软件供应链安全评分
   - 总分和等级
   - 各维度详细评分
   - 评分说明和建议

3. 漏洞风险总结
   - 漏洞总数统计
   - 按严重程度分布
   - 详细漏洞信息
   - 官方CVE信息集成

4. 变更详情
   - 新增包列表(及其漏洞信息)
   - 移除包列表
   - 版本变更详情
   - 许可证变更信息
   - 供应商变更记录

5. 依赖关系图
   - 可视化展示依赖变化
   - 清晰的颜色标识

## 技术特性

1. **多线程并行处理**:
   - 使用线程池并行获取漏洞信息
   - 高效处理大量包的依赖分析
   - 显著提升大型SBOM处理性能

2. **API请求优化**:
   - 智能批处理API请求
   - 自动重试机制(最多3次尝试)
   - 指数退避策略(等待时间递增)
   - 请求超时处理

3. **版本比较增强**:
   - 处理特殊版本格式(如"v1.0.0"和"1.0.0"视为相同)
   - 识别版本表达式(如">=1.0.0"、"==2.0.0")
   - 支持Unicode转义序列(如"\u003e"和">")

4. **错误处理**:
   - 全面的异常捕获和处理
   - 详细日志记录
   - 用户友好的错误提示

## 依赖要求

- Python 3.7+
- 主要依赖包:
  - requests>=2.31.0
  - matplotlib==3.7.1
  - networkx==3.1
  - tabulate==0.9.0
  - colorama==0.4.6
  - tqdm (用于进度条显示)

## 安装

1. 克隆仓库:
```bash
git clone https://github.com/yourusername/sbom-compare.git
  1. 安装依赖:
pip install -r requirements.txt

注意事项

  1. 支持的SBOM格式:

    • SPDX JSON
    • Syft JSON
    • CycloneDX JSON
  2. 漏洞信息获取:

    • 使用OSV API和MITRE CVE API
    • 支持多线程并行处理
    • 自动处理多ID格式
    • API请求有频率限制,工具已实现自动重试
  3. 性能考虑:

    • 大型SBOM比较可能需要较长时间
    • 多线程并行处理可显著提高性能
    • 进度条显示可实时了解处理进度
    • 建议使用SSD存储生成的报告
    • 注意网络连接状态(用于获取漏洞信息)

贡献

欢迎提交Issue和Pull Request来帮助改进这个工具。

许可证

MIT License

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published