「この脆弱性、うちのシステムにも関係ある?」と聞かれたとき、製品名だけでは答えられないことがあります。

その確認を助けるのが、ソフトウェアの中身を記録したSBOMです。

この記事では、部品表の読み方から依存関係のたどり方、導入後の運用までを、架空の受注アプリの例で整理します。

解説者のアイコン
外資系エンジニア

この記事は以下のような人におすすめ!

  • SBOMを求められたけれど、何を渡せばよいか分からない人
  • 脆弱性情報から、自社製品への影響を確認したい人
  • 部品表を作った後の管理方法まで知りたい人

SBOMはソフトウェアの「中身」をたどるための部品表

1-1. 製品名だけでは分からないことがある

SBOMはSoftware Bill of Materialsの略で、日本語では「ソフトウェア部品表」と呼ばれます。

アプリに含まれる部品の名前やバージョン、提供元、部品どうしの関係などを、機械でも処理できる形で記録します。

例えば、ある受注アプリが画面表示用のライブラリと、外部サービスへの通信に使うライブラリを組み込んでいるとします。

利用者に見えるのは受注画面でも、裏側では複数のソフトウェアが働いています。

そのうち一つに問題が見つかっても、受注アプリの商品名だけを探していたら、調査対象から漏れてしまうかもしれません。

SBOMがあると、「この製品には、この部品のこの版が含まれる」という確認の入口を作れます。(参考1、参考2)

受注アプリ2.3の中身を、部品名・バージョン・提供元・入り方の表で記録したSBOMの例と、製品名だけで探すと間接的に入っている解析部品Parser Cが調査から漏れる一方、SBOMで部品名を探すと含まれていると分かり影響確認の入口になることを比べた図
製品名と部品名を分けて記録すると、内部に含まれるソフトウェアも確認しやすくなります。

1-2. 一覧があることと、安全であることは別

ここは、最初に押さえておきたいポイントです。

SBOMは中身を示すための情報であり、それ自体が攻撃を防いだり、修正プログラムを適用したりするわけではありません。

食品の原材料表示があっても、それだけで保存状態まで分からないのと似ています。

部品表を脆弱性情報や製品の利用状況と組み合わせ、対応が必要かを判断して初めて、日々の管理に活かせます。

SBOMで分かるのは、主に「何が含まれているか」です。

「自社で影響を受けるか」「いつ直すか」は、その先の確認で判断します。

部品名だけでなく、バージョンと依存関係を見る

2-1. 読むときは製品の対象版から確認する

部品の一覧を開いたら、いきなり件数を数えるよりも、まず「何の製品について作られたものか」を確認しましょう。

同じ受注アプリでも、バージョン2.3と2.4では、含まれる部品が変わることがあります。

開発中の構成と、実際に配布した構成が違うこともあります。

製品の版、生成日時、作成者、対象としたビルドや配布物をひも付けておくと、「最新のファイルだから正しいはず」という取り違えを避けやすくなります。

項目の名称や必須条件は、採用する形式・バージョン・提出先の要件で変わります。

次の表は、最初に確認する観点を整理したもので、特定規格の必須項目をすべて列挙したものではありません。(参考1、参考3、参考4)

見る項目確認したいこと取り違えの例
対象製品・版調べたい配布物と対応しているか本番2.3に開発中2.4の表を使う
部品名・提供元同名の別部品と区別できるか名前が似た別プロジェクトを照合する
バージョン・識別子脆弱性情報の対象と結び付くか版が空欄のまま安全と判断する
依存関係どの部品を通じて含まれるか直接使っていないので無関係と判断する
作成日時・範囲いつの何を把握したものか古い表を更新後も使い続ける

2-2. 間接的に入っている部品もたどる

依存関係とは、あるソフトウェアが動くために、別のソフトウェアを必要とする関係です。

受注アプリが通信部品を使い、その通信部品がさらに解析部品を使っているとしましょう。

開発者が解析部品を直接追加していなくても、結果として製品に含まれる場合があります。

このような間接依存を確認するには、平らな部品名の一覧だけでなく、どこからつながっているのかを見ることが大切です。

受注アプリ2.3が画面表示ライブラリ4.2と通信ライブラリ1.8を直接使い、通信ライブラリがさらに解析部品Parser C 2.0と暗号ライブラリ3.1を使うため、開発者が追加していない部品も間接依存として製品に含まれることと、調べた対象によって検出範囲が変わることを示した図
矢印は通信パケットではなく、ソフトウェアの依存関係を示しています。名称とバージョンは説明用の架空例です。

ただし、どこまで検出できるかは、作成方法や調査対象にも左右されます。

ソースコード、依存関係の管理ファイル、配布物、コンテナーなど、何を調べた結果なのかも合わせて確認してください。

「一覧にない」と「含まれていない」を、すぐに同じ意味にしないことが重要です。(参考1、参考2)

脆弱性が公表されたら、部品表から影響範囲を絞る

3-1. 最初は部品と対象バージョンを照合する

ここからは、部品表を使う場面を具体的に見てみましょう。

説明用の解析部品「Parser C」に脆弱性情報が出たと仮定します。

まず公表元の情報を読み、対象の製品・部品、影響するバージョン、修正版、回避策の有無を確認します。

次に、自社で管理するSBOMから、該当する可能性がある部品を探します。

同じ名前が見つかっても、それだけで影響ありと確定するのは早計です。

提供元や識別子、バージョンの表し方、製品側での組み込み方まで確認する必要があります。

判断に使う脆弱性識別子の基本は、関連記事のCVE解説も参考にしてください。

CVEとは Study SECの解説記事サムネイル
CVEとは?CVSSとの違い・脆弱性の調べ方と対応の優先順位CVEとは、公開された脆弱性1件ごとに付く世界共通のIDです。CVSS・EPSS・悪用状況との違い、CVE IDから公式情報と自社への影響を調べる方法、対応の優先順位の決め方、修正までの運用手順を図で解説します。...

3-2. 「含まれる」と「悪用される」を分ける

該当する部品が見つかったら、今度は実際の利用状況を調べます。

問題のある機能を使っているか、外部から入力が届くか、製品の設定によって条件が変わるか、といった確認です。

この段階では、製品ベンダーのアドバイザリーや、開発担当者からの説明も役立ちます。

VEXは、製品に対する脆弱性の影響について、状態や根拠を伝えるための情報です。

SBOMを部品の情報、VEXを影響に関する説明、と分けると位置付けをつかみやすくなります。

ただし、「影響なし」という記載も、対象製品や版、評価時点、示された理由を確かめて利用します。(参考2)

公表情報で対象部品と影響版を読み、SBOMと名前・提供元・版で照合し、一致した候補について製品でその機能を使うかや入力が届くかを確認し、対応要否と理由を記録する4段階と、一致しない場合やVEXの扱いを示した図
一致した候補を見つけた後に、製品での影響を確認します。部品表の一致だけで緊急度を決めません。

3-3. 調査した結果と対応を残す

最後は、「調べました」で終わらせず、誰が何を判断したかを残します。

例えば、対象の製品版、確認したSBOM、参照したアドバイザリー、判断理由、担当者、次に見直す条件を一つの記録にまとめます。

修正が必要なら、適用時期や事前確認、切り戻しの方法も別途検討します。

更新後は、配布物と対応する新しい部品表を用意し、古い版との対応も追えるようにしておくと、後日の問い合わせに答えやすくなります。

この記事の部品名・バージョンは説明用です。

特定の製品に実在する脆弱性や、検証済みの修正手順を示したものではありません。

導入は「一つの製品を、継続して追えるか」から始める

4-1. 作成する側と、受け取る側を決める

最初から全システムの部品表を集めようとすると、途中で管理しきれなくなるかもしれません。

まずは、重要な製品を一つ選び、作成から受領、保管、更新までを通せるか確かめる方法が考えられます。

自社開発なら開発担当、購入製品なら供給元に、どの範囲の部品表を用意できるか確認します。

受け取る側も、セキュリティ担当だけで抱えず、製品の管理者や調達担当と役割を分けておきましょう。

ここで重要なのは、作成担当の名前よりも「問題が見つかったとき、誰へ確認できるか」が明らかになっていることです。

開発担当や供給元が部品表を作って受け渡し、セキュリティ担当が保管して脆弱性情報と照合し、問題が出たら作成側へ問い合わせ、リリースや依存部品の変更時に更新版を受け取る流れを示した図
受領後の問い合わせ先と、次の更新を受け取る経路まで決めておきます。

4-2. SPDXとCycloneDXは、受け渡し先との互換性で選ぶ

SBOMの代表的な表現形式には、SPDXとCycloneDXがあります。

どちらもソフトウェアの構成情報を扱えますが、形式の名前が同じでも、バージョンや出力する情報によって、受け手が処理できるかは変わります。

「有名な方を選ぶ」よりも、提出先が受け入れる形式と版、使うツールが読み込める情報、必要な識別子や依存関係を先に確認する方が現実的です。

実際のファイルでは、採用した仕様のスキーマや検証ツールも使って確認してください。

表の列を同じ名前で並べただけのファイルを、仕様に適合したSBOMと呼ばないようにしましょう。(参考3、参考4)

4-3. 更新のきっかけを決めておく

初回の部品表がきれいでも、製品の更新後に置き去りになれば、調査の頼りにはしにくくなります。

リリース、依存部品の変更、配布物の再作成など、どのタイミングで生成・受領するかを決めておくことが大切です。

ファイル名だけで管理するのが難しい場合は、製品版、作成日時、保管先、対応する配布物の識別情報をまとめた管理台帳を用意します。

古い版の記録を残すのは、過去の製品について問い合わせを受ける場面があるからです。

最新版を残すことと、旧版との対応をたどれることは、両方が必要になります。

受注アプリ2.2、本番で運用中の2.3、開発中の2.4にそれぞれのSBOMがあり、本番2.3を調べるときは最新の2.4用ではなく2.3用を使うことと、製品版・作成日・保管先・配布物を対応させた管理台帳の例を示した図
部品表の新しさだけではなく、調査したい製品版との対応を確認します。

4-4. 共有範囲と扱い方も確認する

部品表を渡す相手が増えるほど、共有のルールも重要になります。

内部向けの名称や構成情報、配布物の場所など、外部へ渡してよいか確認が必要な情報を含む場合があります。

公開範囲、契約、提出先の要件を確認し、認証情報や秘密鍵を部品表へ混ぜないようにしてください。

不足する項目があれば、不明のまま明示して供給元へ確認します。

名前やバージョンを推測して埋めると、見かけは整っても、調査を誤る原因になります。

例えば、小規模な開発チームなら、次のような表を最初の運用確認に使えます。

場面確認すること残しておくもの
受領時対象版・形式・読み込み結果原本と受領日、問い合わせ先
脆弱性公表時部品と版の一致、製品での影響根拠URL、判断日、担当者
修正時変更対象と事前確認、適用結果対応記録と新しい部品表
定期見直し管理対象の漏れ、更新停止見直し結果と未解決事項

これは運用を始めるための整理例であり、各社に一律で適用される規格の必須手順ではありません。

SBOMについてよくある質問

5-1. 導入前に確認したい五つの疑問

Q1. SBOMがあれば、脆弱性診断は不要ですか?

不要にはなりません。

SBOMは構成情報を把握する助けになりますが、設定不備やアクセス制御の問題など、部品一覧だけでは確認できないこともあります。

部品の管理と、アプリや環境の検査を、異なる役割として組み合わせます。

Q2. SCAとSBOMは同じものですか?

同じではありません。

SCAはソフトウェアの構成を分析する取り組みやツールを指し、その結果としてSBOMを出力できる場合があります。

SBOMという成果物と、それを作成・分析する機能を区別すると理解しやすくなります。(参考5)

Q3. OSSだけを書けばよいのでしょうか?

対象をOSSだけに限定するとは限りません。

自社製や購入した部品も含め、製品と提出要件に応じて、何を記録するかを確認します。

対象外にした範囲がある場合は、後で受け手が分かるようにしておきましょう。(参考1、参考2)

Q4. ファイルを一度作れば完了ですか?

継続して使うなら、製品の変更に合わせた管理が必要です。

作成したときの製品版と、現在運用している版が違う場合、そのファイルだけで現在の影響を判断できるとは限りません。

Q5. 最初に供給元へ何を聞けばよいですか?

対象製品と版、提供可能な形式、部品の把握範囲、更新のタイミング、問い合わせ先を確認すると、受領後の運用を考えやすくなります。

そのうえで、自社の受け入れ要件と合うかを確かめましょう。

まとめ:部品表を、影響確認と次の対応につなげる

SBOMの役割は、ソフトウェアの中身を確認しやすくすることです。

まず製品版と部品表の対応を確かめ、部品名・バージョン・依存関係を読みます。

脆弱性情報と一致する候補があれば、実際の製品で影響するかを調べ、判断と対応を残します。

部品表を受け取って対象版と形式を確認し、部品名・版・依存関係を公表情報と照合して製品での影響を判断し、新しい部品表と旧版との対応や判断を記録して更新する3段階をまとめた図
部品表の存在よりも、その情報を使って次の確認へ進めることが大切です。

いきなり大きな仕組みを作らなくても、一つの製品で「受け取る・確認する・更新する」を通してみると、足りない情報や担当の曖昧な部分が見えてきます。

SBOMを集めることだけを目的にせず、問い合わせや脆弱性対応で実際に使える状態を目指しましょう。