关于 generating-and-analyzing-sboms
这是一项使用 Syft、Grype 和 Cosign 生成并分析软件物料清单的安全技能,面向安全与开发团队。它涵盖依赖盘点、漏洞检测及签名证明的验证。
主要功能
- 01生成 CycloneDX 和 SPDX SBOM
- 02扫描 SBOM 与镜像中的漏洞
- 03设置 CI/CD 严重性门槛
- 04签署并验证 SBOM 证明
- 05重新扫描已存储 SBOM 以发现新 CVE
适用场景
- 01盘点应用和容器的依赖
- 02发现软件制品中的已知漏洞
- 03按严重性门槛阻止构建
- 04验证镜像来源证明后再予以信任
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill generating-and-analyzing-sboms安装后在 Claude Code 中输入/generating-and-analyzing-sboms确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEreferences/api-reference.mdstandards.mdscripts/agent.py详细介绍
生成和分析 SBOM
仅限授权用途: 仅为你拥有或获准评估的软件和镜像生成并扫描 SBOM。请将 SBOM 视为敏感的清单数据——它们会暴露你的依赖攻击面。
概述
软件物料清单(SBOM)是对软件中的所有组件、库和依赖项进行正式、机器可读的清单——相当于供应链版的配料标签。SBOM 是防御供应链攻击的核心(CISA 的 SBOM 计划、美国第 14028 号行政令),因为看不到的东西就无法修补。当前占主导地位的两种 SBOM 标准是:
- CycloneDX — OWASP 标准,针对安全用例进行了优化(漏洞、VEX、依赖关系)。
- SPDX — Linux Foundation / ISO 标准(ISO/IEC 5962),擅长许可证和来源追溯。
参考开源工具链来自 Anchore:
- Syft 可从容器镜像和文件系统生成 SBOM(CycloneDX、SPDX 或其原生格式)。
- Grype 将 SBOM(或镜像)与漏洞数据库进行匹配,以查找 CVE。
- Cosign(Sigstore)可为 SBOM 签名,并将其作为签名证明附加到镜像上,以实现防篡改的来源追溯。
本技能介绍如何生成符合标准的 SBOM、将其与漏洞情报关联,以及将工作流集成到 CI/CD 中。
适用场景
- 为应用和容器镜像建立并维护组件清单。
- 持续检测已知漏洞(包括针对现有制品新披露的 CVE)。
- 满足采购和法规对 SBOM 的要求(CISA、EO 14028)。
- 生成签名的 SBOM 证明,以便下游建立供应链信任。
前提条件
- 安装 Syft 和 Grype(官方安装脚本):
curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin curl -sSfL https://raw.githubusercontent.com/anchore/grype/main/install.sh | sh -s -- -b /usr/local/bin - 安装 Cosign,以便签名和生成证明:
# via Go, or download a release from https://github.com/sigstore/cosign/releases go install github.com/sigstore/cosign/v2/cmd/cosign@latest - 可访问目标镜像或源代码;如需签名,还需访问注册表并拥有密钥或无密钥 OIDC。
目标
- 从镜像和目录生成 CycloneDX 和 SPDX SBOM。
- 使用 Grype 扫描 SBOM 和镜像以查找漏洞。
- 根据严重性阈值设置 CI/CD 构建门禁。
- 使用 Cosign 为 SBOM 证明签名并附加该证明,然后进行验证。
MITRE ATT&CK 映射
| ID | 官方技术名称 | 与本技能的相关性 |
|---|---|---|
| T1195.001 | 供应链攻击:破坏软件依赖项和开发工具 | 生成 SBOM 并关联漏洞,可揭示遭到破坏或存在漏洞的依赖项——这些正是攻击者利用此技术时会攻击的攻击面。 |
这是一项防御性供应链技能;此映射反映了它旨在检测和缓解的对手技术。
工作流
1. 从容器镜像生成 CycloneDX SBOM
-o <format> 用于选择输出格式;cyclonedx-json 面向安全用途。
syft alpine:latest -o cyclonedx-json=alpine.cdx.json
2. 从源代码目录生成 SPDX SBOM
使用 dir: 源来清点已检出的代码仓库;使用 spdx-json 生成符合 SPDX 标准的 SBOM。
syft dir:. -o spdx-json=app.spdx.json
3. 一次生成多种格式
一次生成两种标准格式,以供不同使用方使用。
syft myorg/app:1.4.2 \
-o cyclonedx-json=app.cdx.json \
-o spdx-json=app.spdx.json \
-o table
4. 使用 Grype 扫描 SBOM 以查找漏洞
将生成与扫描分开后,每当有新的 CVE 披露时,都可以重新扫描已存储的 SBOM,而无需重新构建。
# Scan an existing SBOM
grype sbom:app.cdx.json -o table
# JSON report for automation
grype sbom:app.cdx.json -o json > app.vulns.json
也可以直接扫描镜像(Grype 会在内部生成 SBOM):
grype myorg/app:1.4.2 -o table
5. 根据严重性设置 CI/CD 门禁
--fail-on 会在达到或超过指定严重性时以非零状态码退出,从而使流水线失败。
grype sbom:app.cdx.json --fail-on high
使用 .grype.yaml 策略(only-fixed: true)或 --only-fixed,过滤掉无法修复的噪声:
grype sbom:app.cdx.json --only-fixed --fail-on critical
6. 为 SBOM 签名并将其作为证明附加
Cosign 会在注册表中将 SBOM 记录为签名的 in-toto 证明,并与镜像一同保存。
# Key-based signing
cosign attest --key cosign.key \
--predicate app.spdx.json \
--type spdxjson \
myorg/app:1.4.2
# Keyless (Sigstore OIDC / Fulcio + Rekor)
COSIGN_EXPERIMENTAL=1 cosign attest \
--predicate app.cdx.json \
--type cyclonedx \
myorg/app:1.4.2
7. 在下游验证证明
使用方在信任镜像之前,应先验证其来源。
cosign verify-attestation --key cosign.pub --type spdxjson myorg/app:1.4.2
8. 获取并重新扫描已附加的 SBOM
从注册表拉取经证明的 SBOM,并将重新运行 Grype 纳入持续监控。
cosign download attestation myorg/app:1.4.2 \
| jq -r '.payload' | base64 -d | jq '.predicate' > pulled.spdx.json
grype sbom:pulled.spdx.json -o table
9. 与漏洞情报关联
将 Grype JSON 输入漏洞管理工作流:按 CVE 去重,结合 EPSS/KEV 丰富信息以确定优先级,并跟踪修复 SLA。每次 Grype DB 更新时重新扫描存储的 SBOM,以发现未更改的制品中新披露的 CVE。
工具和资源
| 工具 | 用途 | 链接 |
|---|---|---|
| Syft | 生成 SBOM | https://github.com/anchore/syft |
| Grype | 扫描 SBOM/镜像中的漏洞 | https://github.com/anchore/grype |
| Cosign | SBOM 签名/证明 | https://github.com/sigstore/cosign |
| CycloneDX | 面向安全的 SBOM 标准 | https://cyclonedx.org/ |
| SPDX | ISO SBOM 标准 | https://spdx.dev/ |
| CISA SBOM | 指南和最低要素 | https://www.cisa.gov/sbom |
格式比较
| 方面 | CycloneDX | SPDX |
|---|---|---|
| 管理方 | OWASP | Linux Foundation / ISO 5962 |
| 优势 | 安全、VEX、漏洞 | 许可、来源信息 |
常见 syft -o 值 | cyclonedx-json、cyclonedx-xml | spdx-json、spdx(标记值) |
验证标准
- 从目标镜像生成 CycloneDX SBOM
- 按需从源代码生成 SPDX SBOM
- 使用 Grype 扫描 SBOM 并生成 CVE 报告
- 使用
--fail-on在约定的严重级别设置 CI/CD 门禁 - 使用 Cosign 对 SBOM 签名,并将其作为证明附加
- 在下游验证证明
- 在 Grype DB 更新时重新扫描存储的 SBOM
- 关联/确定发现项的优先级(EPSS/KEV),并跟踪修复进度