CycloneDX 是什么
OWASP 发起的轻量 SBOM 规范:以组件与依赖关系为主,扩展到漏洞(VEX)与服务模型,工具生态活跃——cdxgen、syft、trivy 与各语言插件都能直接输出。形态支持 JSON、XML、protobuf。它与 SPDX 描述同一事实,侧重更贴近安全扫描工作流,消费方工具链支持哪种就用哪种。
基本信息
| 形态 | JSON、XML、protobuf |
|---|---|
| 要素 | components、dependencies、services,可附 vulnerabilities 与 VEX 状态 |
| 工具 | cdxgen、syft、trivy 及各语言插件均可输出 |
| 扩展 | 漏洞与 VEX 状态可随清单在文档内维护 |
| 选择 | 按消费方工具链要求选一种格式统一 |
典型使用场景
- 安全扫描联动:扫描器直接消费组件清单定位漏洞
- VEX 表达:把不受影响的结论随清单发布,减少无效工单
- CI 生成:构建末尾输出并随制品归档
- 多生态覆盖:多语言仓库各用插件生成后合并
- 依赖可视化:用 dependencies 关系画依赖图
- 双格式并存:按客户或平台要求输出对应格式
生成与检查
生成与检查
cdxgen -o sbom.cdx.json # 从源码目录生成
trivy fs --format cyclonedx --output sbom.cdx.json . # 从文件系统生成
jq '.components | length' sbom.cdx.json # 检查组件数量
jq '.dependencies | length' sbom.cdx.json # 检查依赖关系数量字段读法
| 要素 | 含义 | 注意 |
|---|---|---|
| components | 组件清单 | 名称、版本与包坐标要完整 |
| dependencies | 依赖关系 | 供图分析定位传递链 |
| services | 服务模型 | 运行时服务也可入清单 |
| vulnerabilities | 漏洞条目 | 与扫描结果对应 |
| VEX | 受影响状态声明 | 与扫描结论分开管理 |
同一制品建议至少提供一种格式;多格式并行时以消费方工具链为准统一。
VEX 与扫描结果是两类数据:一个是受影响与否的结论声明,一个是检测发现,混在一起会误导审计。
包坐标让组件可跨清单串联:相同坐标能在漏洞库与清单之间对上号。
流水线集成
- 三步串联:扫描、生成、归档连成一条线,清单随版本可检索
- 组件数量核对:数量级突变往往意味着漏扫或扫描范围变化