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 の背景や設計思想は関連書籍に詳しい。

関連用語