SBOM
ソフトウェアに含まれるすべてのコンポーネントの一覧を記録した部品表
セキュリティ
SBOM とは
SBOM (Software Bill of Materials) は、ソフトウェアに含まれるすべてのコンポーネント (オープンソースライブラリ、フレームワーク) とそのバージョン、ライセンス情報を記録した部品表である。製造業の BOM (部品表) をソフトウェアに適用した概念で、2021 年の米国大統領令でソフトウェアサプライチェーンセキュリティの一環として義務化が進んでいる。
なぜ SBOM が必要か
2021 年の Log4Shell 脆弱性 (CVE-2021-44228) では、「自社のソフトウェアに Log4j が含まれているか」を即座に回答できない組織が多かった。SBOM があれば、脆弱性が公開された際に影響範囲を即座に特定できる。
SBOM の標準フォーマット
SBOM の標準フォーマットを以下に示す。
| フォーマット | 策定元 | 特徴 |
|---|---|---|
| SPDX | Linux Foundation | ISO 標準 (ISO/IEC 5962:2021) |
| CycloneDX | OWASP | セキュリティ重視、軽量 |
| SWID | ISO/IEC | ソフトウェア識別タグ |
SBOM の生成
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 の内容
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 での活用
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 の背景や設計思想は関連書籍に詳しい。
この記事は役に立ちましたか?
関連用語
サプライチェーンセキュリティ
ソフトウェアの依存関係やビルドパイプラインを通じた攻撃を防ぐセキュリティ対策
DevSecOps
開発・セキュリティ・運用を統合し、セキュリティをパイプラインに組み込むアプローチ
npm
Node.js のデフォルトパッケージマネージャーで、200 万以上の JavaScript パッケージの公開・インストール・管理を行う
シフトレフトセキュリティ
セキュリティ対策を開発ライフサイクルの早い段階 (左側) に組み込むアプローチ
シフトレフト
テスト、セキュリティ、品質チェックを開発プロセスの早い段階に移動させるアプローチ
ミドルウェア
リクエストとレスポンスの間に挟まる処理層で、認証・ログ・エラーハンドリングを横断的に適用する