SBOM
ソフトウェアに含まれるすべてのコンポーネントの一覧を記録した部品表
セキュリティ
SBOM とは
SBOM (Software Bill of Materials) は、ソフトウェアに含まれるすべてのコンポーネント (オープンソースライブラリ、フレームワーク) とそのバージョン、ライセンス情報を記録した部品表である。製造業の BOM (部品表) をソフトウェアに適用した概念で、2021 年の米国大統領令でソフトウェアサプライチェーンセキュリティの一環として義務化が進んでいる。
なぜ SBOM が必要か
2021 年の Log4Shell 脆弱性 (CVE-2021-44228) では、「自社のソフトウェアに Log4j が含まれているか」を即座に回答できない組織が多かった。SBOM があれば、脆弱性が公開された際に影響範囲を即座に特定できる。
SBOM の標準フォーマット
| フォーマット | 策定元 | 特徴 |
|---|---|---|
| SPDX | Linux Foundation | ISO 標準 (ISO/IEC 5962:2021) |
| CycloneDX | OWASP | セキュリティ重視、軽量 |
| SWID | ISO/IEC | ソフトウェア識別タグ |
SBOM の生成
# npm: package-lock.json から CycloneDX 形式で生成
npx @cyclonedx/cyclonedx-npm --output-file sbom.json
# syft: コンテナイメージから SBOM を生成
syft myapp:latest -o cyclonedx-json > sbom.json
# trivy: SBOM 生成 + 脆弱性スキャン
trivy image --format cyclonedx myapp:latest > sbom.json
SBOM の内容
{
"bomFormat": "CycloneDX",
"components": [
{
"type": "library",
"name": "express",
"version": "4.18.2",
"purl": "pkg:npm/express@4.18.2",
"licenses": [{ "license": { "id": "MIT" } }]
},
{
"type": "library",
"name": "zod",
"version": "3.22.4",
"purl": "pkg:npm/zod@3.22.4"
}
]
}
CI/CD での活用
# GitHub Actions: ビルド時に SBOM を生成し、脆弱性をスキャン
- name: Generate SBOM
run: npx @cyclonedx/cyclonedx-npm --output-file sbom.json
- name: Scan vulnerabilities
run: trivy sbom sbom.json --exit-code 1 --severity HIGH,CRITICAL
- name: Upload SBOM
uses: actions/upload-artifact@v4
with:
name: sbom
path: sbom.json
AWS での SBOM
- Amazon Inspector: ECR のコンテナイメージを自動スキャンし、SBOM を生成
- AWS CodeBuild: ビルドパイプラインに SBOM 生成を組み込み
SBOM の背景や設計思想は関連書籍に詳しい。