Overview
SBOM(Software Bill of Materials:ソフトウェア部品表)とは、ソフトウェアを構成するすべてのコンポーネント(ライブラリ、フレームワーク、モジュールなど)の一覧をまとめた文書です。食品の原材料表示と同様に、ソフトウェアに含まれる「部品」を可視化することで、脆弱性の特定やライセンス管理、サプライチェーンリスクの把握を効率的に行うことができます。
現代のソフトウェア開発では、オープンソースソフトウェア(OSS)の利用が当たり前となり、一つのアプリケーションが数百から数千のサードパーティコンポーネントに依存しています。Log4Shellのような重大な脆弱性が発見された際、自社のどのシステムが該当コンポーネントを使用しているかを即座に把握できるかどうかが、被害の拡大を防ぐ鍵となります。SBOMはこの「可視性」を提供する重要なツールです。
米国では2021年の大統領令(EO 14028)により、連邦政府に納入するソフトウェアへのSBOM添付が義務化されました。日本でも経済産業省がSBOMの導入手引きを公開するなど、国際的にSBOMの重要性が急速に高まっています。主要なフォーマットとしてSPDX(Linux Foundation)とCycloneDX(OWASP)が広く利用されています。
Details
SBOMの構成要素
SBOMには、各コンポーネントの名前、バージョン、供給者、依存関係、ライセンス情報などが記録されます。NTIAの最小要素ガイドラインでは、サプライヤー名、コンポーネント名、バージョン、一意の識別子、依存関係、作成者、タイムスタンプの7項目が最低限必要とされています。
これらの情報を機械可読な形式で管理することで、脆弱性データベース(NVDなど)との自動照合が可能になり、影響を受けるコンポーネントの迅速な特定と対処が実現します。
主要なSBOMフォーマット
- SPDX(Software Package Data Exchange):Linux Foundationが策定し、ISO/IEC 5962として国際標準化されたフォーマット。ライセンスコンプライアンスに特に強みがある
- CycloneDX:OWASPが策定した軽量なフォーマット。セキュリティユースケースに特化しており、脆弱性情報やサービス依存関係の記述に優れる
- SWID(Software Identification Tags):ISO/IEC 19770-2で定義された識別タグ。主にインストール済みソフトウェアの管理に使用される
SBOM生成のアプローチ
SBOMの生成方法には主に3つのアプローチがあります。ビルド時生成はCI/CDパイプラインにおいてビルドプロセス中に依存関係を解析する方法で、最も正確なSBOMが得られます。ソースコード解析はマニフェストファイル(package.json、pom.xmlなど)を解析する方法です。バイナリ解析はコンパイル済みバイナリからコンポーネントを検出する方法で、ソースコードがない場合に有効です。
SBOMとサプライチェーンセキュリティ
SolarWinds事件やCodecov事件に代表されるソフトウェアサプライチェーン攻撃の増加により、SBOMの重要性は飛躍的に高まっています。SBOMを活用することで、サードパーティコンポーネントの信頼性を評価し、推移的依存関係(依存先がさらに依存するライブラリ)に潜む脆弱性も含めて網羅的に把握できます。
また、SBOMはVEX(Vulnerability Exploitability eXchange)と組み合わせることで、検出された脆弱性が実際に自社環境で悪用可能かどうかのステータス情報を提供し、対応の優先順位付けを支援します。
SBOMの運用課題
SBOMの導入にあたっては、いくつかの課題があります。鮮度の維持が最も重要で、ソフトウェアの更新に合わせてSBOMも常に最新化する必要があります。また、組織全体で多数のSBOMを一元管理し、新しい脆弱性が公開された際にリアルタイムで影響分析を行うSBOM管理プラットフォームの導入も求められます。
Security Measures
- 01CI/CDパイプラインへのSBOM生成の組み込み:ビルドプロセスの一環としてSBOMを自動生成する仕組みを構築してください。Syft、Trivy、CycloneDX CLI等のツールを活用し、すべてのリリースに最新のSBOMが紐づく運用を確立しましょう。
- 02脆弱性データベースとの自動照合:生成したSBOMをNVD、OSV、GitHub Advisory Databaseなどの脆弱性データベースと定期的に照合し、新たに発見された脆弱性の影響を即座に把握できるようにしてください。
- 03推移的依存関係の可視化:直接依存するコンポーネントだけでなく、推移的依存関係(間接的な依存)も含めた完全な依存関係ツリーを把握し、深い階層に潜む脆弱なコンポーネントも検出できるようにしましょう。
- 04VEXによる脆弱性ステータスの管理:SBOMで検出された脆弱性について、VEX(Vulnerability Exploitability eXchange)を活用して「影響あり」「影響なし」「調査中」「修正済み」などのステータスを管理し、対応優先度を明確にしてください。
- 05サプライヤーへのSBOM提出要求:サードパーティソフトウェアの調達時にSBOMの提出を契約条件に含め、サプライチェーン全体の透明性を確保してください。受領したSBOMの定期的な更新も併せて要求しましょう。
- 06SBOM管理プラットフォームの導入:組織内の全プロジェクトのSBOMを一元管理するプラットフォーム(Dependency-Track等)を導入し、ダッシュボードによるリスクの可視化とアラート通知を自動化してください。
Incidents
📋 Log4Shell脆弱性とSBOMの不在による対応遅延(2021年)
2021年12月に発見されたApache Log4j の重大な脆弱性(Log4Shell / CVE-2021-44228)は、世界中の組織に甚大な影響を与えました。多くの企業がSBOMを整備していなかったため、自社のどのシステムがLog4jを使用しているかの特定に数日から数週間を要しました。
SBOMを事前に整備していた組織は数時間以内に影響範囲を特定し迅速にパッチを適用できた一方、SBOMがない組織はソースコードやバイナリを手動で調査する必要があり、その間に攻撃のリスクにさらされ続けました。この事件はSBOM導入の重要性を世界的に認知させるきっかけとなりました。
📋 SolarWinds サプライチェーン攻撃とソフトウェア透明性(2020年)
2020年に発覚したSolarWinds Orion プラットフォームへのサプライチェーン攻撃では、ビルドプロセスにマルウェアが注入され、約18,000の組織が影響を受けました。攻撃者はソフトウェアのビルドパイプラインを侵害し、正規のアップデートにバックドアを仕込みました。
この事件を契機に、ソフトウェアの「部品」の透明性とトレーサビリティの重要性が再認識され、米国大統領令によるSBOM義務化の直接的な契機となりました。SBOMだけでは攻撃を防げませんが、ビルドプロセスの完全性検証と組み合わせることで、サプライチェーンリスクの軽減に寄与します。
📋 event-stream パッケージ乗っ取り事件(2018年)
2018年、Node.jsの人気パッケージ「event-stream」のメンテナーが交代し、新しいメンテナーが暗号通貨ウォレットの秘密鍵を窃取する悪意のあるコードを含むflatmap-streamパッケージを依存関係として追加しました。event-streamは週200万回以上ダウンロードされており、多数のプロジェクトが影響を受けました。
この事件は、SBOMによる依存関係の継続的監視と、新規依存関係追加時の自動アラートの重要性を示しました。推移的依存関係に潜む悪意のあるコンポーネントを検出するには、SBOMの定期的な差分分析と異常検知が不可欠です。