generating-and-analyzing-sboms について
Syft、Grype、Cosignを使ってソフトウェア部品表を生成・分析するセキュリティスキルです。セキュリティ担当者や開発チーム向けに、依存関係の把握、脆弱性検出、署名済みSBOM証明の検証を支援します。
主な機能
- 01CycloneDXとSPDXのSBOM生成
- 02SBOMとイメージの脆弱性スキャン
- 03CI/CDの重大度ゲート設定
- 04SBOM証明の署名と検証
- 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 標準は次の 2 つです。
- CycloneDX — セキュリティ用途(脆弱性、VEX、依存関係の関連性)に最適化された OWASP 標準です。
- 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 標準には spdx-json を使用します。
syft dir:. -o spdx-json=app.spdx.json
3. 複数の形式を一度に出力する
1 回の実行で両方の標準形式を生成し、異なる利用者に提供します。
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 は、署名付き in-toto アテステーションとして SBOM を記録し、レジストリ内のイメージと一緒に保存します。
# 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 が生成されている
- SBOM が Grype でスキャンされ、CVE レポートが作成されている
- 合意した重大度で
--fail-onを使用して CI/CD がゲートされている - SBOM が署名され、Cosign を使用した証明として添付されている
- 下流で証明が検証されている
- Grype DB の更新時に保存済みの SBOM が再スキャンされている
- 検出結果が関連付けられ、優先順位付け(EPSS/KEV)され、修正まで追跡されている