interlynk-io/sbomasm

GitHub: interlynk-io/sbomasm

一款功能完备的 SBOM 管理工具包,支持多源合并、元数据编辑、敏感信息脱敏、许可证增强以及签名验证,帮助团队高效满足供应链安全合规要求。

Stars: 109 | Forks: 12

# `sbomasm`: 完整的 SBOM 管理工具包 [![Go Reference](https://pkg.go.dev/badge/github.com/interlynk-io/sbomasm.svg)](https://pkg.go.dev/github.com/interlynk-io/sbomasm) [![Go Report Card](https://goreportcard.com/badge/github.com/interlynk-io/sbomasm)](https://goreportcard.com/report/github.com/interlynk-io/sbomasm) [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/interlynk-io/sbomasm/badge)](https://securityscorecards.dev/viewer/?uri=github.com/interlynk-io/sbomasm) ![GitHub all releases](https://img.shields.io/github/downloads/interlynk-io/sbomasm/total) `sbomasm` 是一个全面的工具包,用于在整个生命周期中管理软件物料清单。从将多个 SBOM 组装成统一文档,到为合规性编辑元数据、移除敏感信息、通过额外上下文进行增强,以及对 SBOM 进行加密签名和验证——sbomasm 全方位搞定。 ## 快速开始 ``` # Install sbomasm go install github.com/interlynk-io/sbomasm@latest # Assemble multiple SBOMs into one sbomasm assemble -n "my-app" -v "1.0.0" -o final.json service1.json service2.json service3.json # Augment existing SBOM with additional data sbomasm assemble --augmentMerge --primary base.json scan-results.json -o enhanced.json # Edit SBOM metadata for compliance sbomasm edit --subject document --supplier "ACME Corp (acme.com)" --timestamp sbom.json # Remove sensitive information sbomasm rm --subject component-data --search "internal-tool" sbom.json # Enrich SBOM with missing license information sbomasm enrich --fields license -o enriched.json sbom.json # View SBOM in human-readable format sbomasm view sbom.cdx.json # Generate assembly configuration sbomasm generate > config.yml # Sign an SBOM using ShiftLeftCyber's SecureSBOM API (using a sample key) sbomasm sign --key-id a7b3c9e1-2f4d-4a8b-9c6e-1d5f7a9b2c4e --output sbom-signed.json sbom.json ``` ## 目录 ## 为什么选择 sbomasm? 现代软件开发涉及复杂的供应链,包含多个组件,每个组件可能都有自己的 SBOM。组织面临多项挑战: - **多来源**:微服务、容器和第三方组件各自生成独立的 SBOM - **合规要求**:FDA 医疗设备要求、Auto-ISAC 标准和 CISA 指南等法规要求完整且准确的 SBOM - **元数据缺失**:生成的 SBOM 通常缺少关键元数据,如供应商信息、许可证或适当的版本控制 - **敏感数据**:SBOM 可能包含不应共享的内部组件名称或专有信息 - **格式碎片化**:不同工具生成不同的 SBOM 格式(SPDX 与 CycloneDX) `sbomasm` 通过一个跨格式和用例的统一工具包来解决这些挑战。 ## 核心功能 - 🔀 **组装 (Assemble)**:将多个 SBOM 合并为详尽的文档 - ✏️ **编辑 (Edit)**:为合规性和完整性添加或修改元数据 - 🗑️ **移除 (Remove)**:剔除敏感组件或字段 - 🚀 **增强 (Enrich)**:利用 ClearlyDefined 的缺失许可证信息补充 SBOM - 👁️ **查看 (View)**:以人类可读的层级格式可视化 SBOM - 🔐 **签名 (Sign)**:对 SBOM 进行加密签名和验证(使用 ShiftLeftCyber 的第三方服务) - 📋 **格式无关**:同时支持 SPDX 和 CycloneDX - ⚡ **极速**:针对大规模操作进行了优化 - 🔧 **灵活**:支持 CLI、配置文件和 API 集成选项 ## sbomasm 博客 - [精简、整洁且合规:sbomasm 的新移除功能](https://www.linkedin.com/pulse/lean-clean-compliance-ready-sbomasms-new-removal-vivek-kumar-sahu-a2fqe/) - [sbomasm 使用 ClearlyDefined 数据集丰富许可证信息](https://www.linkedin.com/pulse/sbomasm-enriches-licenses-using-clearlydefined-datasets-sahu-dogec/) ## 基本用法 ### 组装 SBOM 最常见的用例是将来自不同来源的多个 SBOM 组合成一个单一的详尽文档。 #### 简单组装 将微服务 SBOM 合并为应用程序 SBOM: ``` # Basic assembly with automatic format detection sbomasm assemble \ -n "e-commerce-platform" \ -v "2.1.0" \ -t "application" \ -o platform.cdx.json \ auth-service.json cart-service.json payment-service.json ``` #### 容器和应用程序组装 将容器基础镜像 SBOM 与应用程序依赖项合并: ``` # Combine base image SBOM with application SBOM sbomasm assemble \ -n "containerized-app" \ -v "1.0.0" \ --type "container" \ -o final-container.spdx.json \ alpine-base.spdx.json app-deps.spdx.json ``` #### 增强合并(丰富现有 SBOM) 使用来自辅助 SBOM 的额外组件信息增强现有的主 SBOM,而无需创建新的根组件: ``` # Enrich base SBOM with additional scan results sbomasm assemble --augmentMerge \ --primary base-sbom.json \ vulnerability-scan.json license-scan.json \ -o enriched-sbom.json # Overwrite existing component data with vendor-provided information sbomasm assemble --augmentMerge \ --primary internal-sbom.json \ --merge-mode overwrite \ vendor-sbom.json \ -o updated-sbom.json ``` ### 编辑 SBOM 修复缺失的元数据或更新信息以符合合规性: #### 添加缺失的供应商信息 ``` # Add supplier info required by procurement sbomasm edit \ --missing \ --subject document \ --supplier "Interlynk (hello@interlynk.io)" \ --output compliant.json \ original.json ``` #### 更新组件许可证 ``` # Fix missing license information sbomasm edit \ --subject component-name-version \ --search "log4j (2.17.1)" \ --license "Apache-2.0 (https://www.apache.org/licenses/LICENSE-2.0)" \ input.json ``` ### 移除组件 在共享之前移除内部或敏感组件: ``` # Remove internal components before sharing with customer sbomasm rm \ --subject component-name \ --search "internal-telemetry" \ --output public.json \ internal.json ``` ### 丰富 SBOM 使用 ClearlyDefined 数据增强 SBOM 中缺失的许可证信息: #### 基本许可证丰富 ``` # Enrich SBOM with missing license information sbomasm enrich \ --fields license \ --output enriched.json \ original.json ``` #### 高级丰富选项 ``` # Force update existing licenses with more complete data sbomasm enrich \ --fields license \ --force \ --license-exp-join "AND" \ --max-retries 3 \ --max-wait 10 \ --output complete.json \ incomplete.json ``` 此命令特别适用于: - 填补缺乏许可证信息的自动生成 SBOM 中的空白 - 确保符合采购和法律要求 - 标准化各组件间的许可证表达式 - 满足要求完整许可证文档的监管要求 ### 查看 SBOM 以人类可读的层级格式可视化 CycloneDX SBOM,并显示全面的组件信息: #### 基本 SBOM 可视化 ``` # View SBOM with default settings sbomasm view sbom.cdx.json # Detailed view with all information sbomasm view sbom.cdx.json --verbose # Save output to file sbomasm view sbom.cdx.json -o sbom-report.txt # License-only view (minimal component details) sbomasm view sbom.cdx.json --only-licenses # View containers and operating systems sbomasm view sbom.cdx.json --filter-type "container,operating-system" # Focus on high-severity vulnerabilities sbomasm view sbom.cdx.json --min-severity high --only-unresolved # Limit tree depth for large SBOMs sbomasm view sbom.cdx.json --max-depth 3 # Flat list format sbomasm view sbom.cdx.json --format flat # JSON export for processing sbomasm view sbom.cdx.json --format json -o analysis.json ``` view 命令特别适用于: - **安全审计**:按严重程度识别和筛选漏洞 - **依赖分析**:理解组件关系和依赖项 - **许可证合规**:提取许可证信息以供合规审查 - **SBOM 验证**:验证 SBOM 的完整性和结构 - **文档编制**:为利益相关者生成人类可读的报告 ### 签名和验证 SBOM 旨在用于共享。未签名的 SBOM 就像未密封的信封。任何人都可以打开它并更改其中的内容。对 SBOM 进行加密签名允许 SBOM 生产者**证明真实性并建立信任**,并让 SBOM 消费者确信 SBOM 未被篡改且来自经过验证的来源。 使用 sbomasm 对 SBOM 进行签名和验证使用的是 ShiftLeftCyber 的 SecureSBOM API。此服务需要 API Key。要获取 API Key,请使用以下链接:[联系我们](https://shiftleftcyber.io/contactus/) **先决条件** 1. **API Key:** 从 ShiftLeftCyber 获取 API Key 2. **密钥管理:** 通过 SecureSBOM 服务生成或使用现有的签名密钥 3. **环境设置:** 为了方便,将您的 API key 设置为环境变量 ``` export SECURE_SBOM_API_KEY="your-api-key-here" ``` ``` # Generate a Signing Key for signing and online verification sbomasm securesbomkey generate # Use the generated key to Sign a CycloneDX SBOM according to CycloneDX 1.6 Specification # The below examples uses a fake/sample key for educational purposes only sbomasm sign --key-id a7b3c9e1-2f4d-4a8b-9c6e-1d5f7a9b2c4e --output sbom.cdx.signed.json sbom.json # Verify the Signed SBOM using the API sbomasm verify --key-id a7b3c9e1-2f4d-4a8b-9c6e-1d5f7a9b2c4e sbom.cdx.signed.json # Sign and Verify SPDX SBOMs with SecureSBOM sbomasm sign --key-id a7b3c9e1-2f4d-4a8b-9c6e-1d5f7a9b2c4e --output sbom.spdx.signed.json sbom.spdx.json sbomasm verify --key-id a7b3c9e1-2f4d-4a8b-9c6e-1d5f7a9b2c4e --signature "SIGNATURE_HASH" sbom.spdx.signed.json ``` ## 行业用例 ### 微服务与 Kubernetes 现代云原生应用程序由数十个微服务组成,每个微服务都有自己的依赖项。使用 Kubernetes 的组织需要跨以下方面跟踪组件: - 应用程序代码依赖项 - 容器基础镜像 - Kubernetes operator 和 controller - 服务网格组件 **示例**:一家在 Kubernetes 上运行 50 多个微服务的金融科技公司: ``` # Step 1: Collect SBOMs from CI/CD pipeline # Each build generates an SBOM for the service # Step 2: Assemble daily platform SBOM sbomasm assemble \ -n "trading-platform" \ -v "$(date +%Y.%m.%d)" \ -t "application" \ --flat-merge \ -o daily-platform-sbom.json \ services/*.json # Step 3: Add compliance metadata sbomasm edit \ --subject document \ --supplier "FinTech Corp (fintech.com)" \ --tool "sbomasm (v0.1.0)" \ --timestamp \ daily-platform-sbom.json # Step 4: Remove internal debugging tools sbomasm rm \ --subject component-name \ --search "debug-console" \ daily-platform-sbom.json ``` ### 汽车行业 汽车制造商必须遵守 Auto-ISAC 指南,并跟踪涉及数百家供应商的复杂供应链中的软件。 **示例**:一家跟踪信息娱乐系统组件的电动汽车制造商: ``` # Assemble SBOMs from tier-1 suppliers sbomasm assemble \ -n "infotainment-system" \ -v "model-y-2025" \ -t "firmware" \ -o infotainment-complete.spdx.json \ navigation-vendor.spdx audio-vendor.spdx connectivity-vendor.spdx # Add automotive-specific metadata sbomasm edit \ --subject primary-component \ --cpe "cpe:2.3:a:automaker:infotainment:2025.1:*:*:*:*:*:*:*" \ --lifecycle "manufacture" \ --output auto-compliant.spdx.json \ infotainment-complete.spdx.json ``` ### 医疗保健与医疗设备 FDA 法规要求医疗设备制造商提供全面的 SBOM。这些必须包括所有软件组件及其安全状态。 **示例**:医疗成像设备 SBOM 准备: ``` # Create configuration for FDA submission cat > fda-config.yml << EOF app: name: 'MRI-Scanner-Software' version: 'v3.2.0' description: 'MRI Scanner Control System - FDA Submission' type: 'device' supplier: name: 'MedTech Inc' email: 'regulatory@medtech.com' author: - name: 'MedTech Regulatory Team' email: 'regulatory@medtech.com' output: spec: spdx file_format: json assemble: hierarchical_merge: true include_components: true include_dependency_graph: true EOF # Assemble with configuration sbomasm assemble -c fda-config.yml -o fda-submission.json \ imaging-software.json hardware-drivers.json third-party-libs.json ``` ### 金融服务 金融机构需要 SBOM 进行风险评估和监管合规(PCI-DSS 4.0)。 **示例**:银行应用程序季度合规报告: ``` # Assemble quarterly SBOM from all banking services sbomasm assemble \ -n "digital-banking-platform" \ -v "2024-Q4" \ -o quarterly-sbom.cdx.json \ core-banking/*.json mobile-app/*.json web-portal/*.json # Enrich with security metadata sbomasm edit \ --subject document \ --tool "dependency-track (4.11.0)" \ --author "Security Team (security@bank.com)" \ --lifecycle "operations" \ quarterly-sbom.cdx.json # Generate security audit report sbomasm view quarterly-sbom.cdx.json \ --min-severity high \ --only-unresolved \ --vulnerabilities \ -o quarterly-security-report.txt ``` ## 高级功能 ### 配置驱动组装 对于复杂的组装操作,请使用配置文件: ``` # assembly-config.yml app: name: 'enterprise-platform' version: 'v2.0.0' type: 'application' supplier: name: 'Enterprise Corp' email: 'sbom@enterprise.com' licenses: - id: 'Apache-2.0' output: spec: cyclonedx file_format: json file: 'enterprise-platform.cdx.json' assemble: flat_merge: true include_components: true include_dependency_graph: false ``` ``` sbomasm assemble -c assembly-config.yml services/*.json ``` ### Dependency Track 集成 与 Dependency Track 集成以进行持续的 SBOM 监控: ``` # Pull SBOMs from Dependency Track, assemble, and push back sbomasm assemble dt \ -u "https://dtrack.company.com" \ -k "$DT_API_KEY" \ -n "aggregated-view" \ -v "latest" \ --flat-merge \ -o "project-uuid" \ project-uuid-1 project-uuid-2 project-uuid-3 ``` ### 批量操作 使用 shell 脚本处理多个 SBOM: ``` #!/bin/bash # batch-process.sh - Add supplier info to all SBOMs for sbom in sboms/*.json; do echo "Processing $sbom..." sbomasm edit \ --missing \ --subject document \ --supplier "ACME Corp (acme.com)" \ --timestamp \ --output "processed/$(basename $sbom)" \ "$sbom" done ``` ## 命令参考 每个命令的详细文档: - [assemble](docs/assemble.md) - 合并多个 SBOM - [edit](docs/edit.md) - 修改 SBOM 元数据 - [rm](docs/remove.md) - 移除组件或字段 - [enrich](docs/enrich.md) - 利用缺失的许可证信息丰富 SBOM - [view](docs/view.md) - 以人类可读格式可视化 SBOM - [generate](docs/generate.md) - 创建配置模板 - [sign/verify](docs/securesbom.md) - 对 SBOM 进行加密签名和验证 ## 安装 ### 使用 Go install(推荐) ``` go install github.com/interlynk-io/sbomasm@latest ``` ### 使用 Homebrew ``` brew tap interlynk-io/interlynk brew install sbomasm ``` ### 使用 Docker ``` docker run -v $(pwd):/app ghcr.io/interlynk-io/sbomasm:latest assemble \ -n "my-app" -v "1.0.0" -o /app/output.json /app/input1.json /app/input2.json ``` ### 使用预构建二进制文件 从 [发布页面](https://github.com/interlynk-io/sbomasm/releases) 下载 ### 从源码构建 ``` git clone https://github.com/interlynk-io/sbomasm.git cd sbomasm # Show all available make targets make help # Build for current platform make build # Run tests make test # Build for all platforms make build-all # Verify the build ./build/sbomasm version ``` 该项目包含一个全面的 Makefile,其中包含用于开发、测试、构建和发布的目标。运行 `make help` 查看所有可用命令,包括: - **开发**:`make fmt`, `make vet`, `make lint` - **测试**:`make test`, `make test-coverage`, `make test-short` - **构建**:`make build`, `make build-all`, `make install` - **发布**:`make snapshot`, `make release` - **CI/CD**:`make ci`, `make pre-commit` ## 贡献 我们期待您的贡献!请遵循以下准则: 1. Fork 本仓库 2. 创建您的功能/修复分支 (`git checkout -b feature/amazing-feature`) 3. 提交您的更改 (`git commit -sam "Add amazing feature"`) - 提交必须经过签名 4. 推送到分支 (`git push origin feature/amazing-feature`) 5. 创建 Pull Request 有关详细的准则,请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。 ## 其他 SBOM 开源工具 - [SBOM Seamless Transfer](https://github.com/interlynk-io/sbommv) - 在不同系统之间传输 SBOM 的主要工具 - [SBOM Quality Score](https://github.com/interlynk-io/sbomqs) - 用于评估 SBOM 质量和合规性的工具 - [SBOM Search Tool](https://github.com/interlynk-io/sbomgr) - 用于在 SBOM 仓库中进行上下文感知搜索的工具 - [SBOM Explorer](https://github.com/interlynk-io/sbomex) - 用于从公共仓库发现和下载 SBOM 的工具 - [SBOM Benchmark](https://www.sbombenchmark.dev) - 包含流行容器和仓库的 SBOM 及其质量分数的仓库 ## 联系方式 我们感谢所有反馈。联系我们最好的方式: - ❓& 🅰️ [Slack](https://join.slack.com/t/sbomqa/shared_invite/zt-2jzq1ttgy-4IGzOYBEtHwJdMyYj~BACA) - 📞 [在线聊天](https://www.interlynk.io/#hs-chat-open) - 📫 [发送邮件](mailto:hello@interlynk.io) - 🐛 [报告 Bug 或建议](https://github.com/interlynk-io/sbomasm/issues) - 🐦 [在 X 上关注我们](https://twitter.com/InterlynkIo) ## Stargazers 如果您喜欢这个项目,请通过加星标来支持我们。 [![Stargazers](https://starchart.cc/interlynk-io/sbomasm.svg)](https://starchart.cc/interlynk-io/sbomasm)
标签:CycloneDX, DevSecOps, DNS 解析, EVTX分析, Golang, SBOM可视化, SBOM富化, SBOM格式转换, SBOM签名, SBOM管理, SBOM组装, SBOM编辑, SPDX, 上游代理, 供应链风险管理, 元数据管理, 安全编程, 开发安全, 敏感信息清理, 文档安全, 日志审计, 许可证合规, 请求拦截, 跌倒检测, 软件物料清单, 软件透明度