サプライチェーン攻撃についての記事を目にすることが最近増えていることもあり、 SBOMが以前よりも着目されているかと思います。
今回は、実際にSBOM生成を試してみました。
SBOMとは
SBOM(ソフトウェア部品表)は、ソフトウェアを構成するすべてのコンポーネントを一覧化した目録です。
これにより、ソフトウェアに脆弱性が見つかった際に影響範囲を迅速に特定でき、セキュリティリスクの低減につながります。
用意するもの
- sbom-tool
Microsoft社のフリーSBOMツールを用意しました - C#のコンソールアプリ
- ソリューションとプロジェクトファイルは同じディレクトリに配置
- スケルトンコードのまま
- nugetで取り込むOSSは、System.Security.Permissions
- .NET8
試した結果
ビルドする
今回はこのようなbatでビルドしました
@echo off
cd /d %~dp0
dotnet publish .<ソリューション名>.sln -r win-x64 -c "Release" --self-contained true
sbom-toolを実行する
ヘルプを見る限り、この辺りが生成に必要そうですので、指定しました。
- -b でビルド成果物のディレクトリを指定
- -bc でソースの場所を指定
sbom generate^
-b ".\bin\Release\net8.0\win-x64\publish"^
-bc "."^
-ps "Sky Co., LTD."^
-pn "SbomTest"^
-pv "1.0.0.0"
生成されたSBOMを確認する
_manifest\spdx_2.2 というディレクトリができており、manifest.spdx.json がありました。
自己完結型アプリケーションとしてビルドしたので、3000行以上ある大きなファイルですが、 エディタで開いて "System.Security.Permissions" を検索すると下記が見つかります。
"name": "System.Security.Permissions",
"licenseConcluded": "NOASSERTION",
"licenseDeclared": "NOASSERTION",
"copyrightText": "NOASSERTION",
しかし、NOASSERTION = 未定義 となっている箇所を、もう少し埋めたいところですので、 再度引数を見直して試してみました。
引数を変更して再度実行
末尾に2つの引数を追加して実行すると、"MIT" と入っておりました。
すべての項目を埋めることは難しいのでしょうが、指定なしの時よりも情報が埋まりました。
-li true
-pm true
"name": "System.Security.Permissions",
"licenseConcluded": "MIT",
"licenseDeclared": "MIT",
"copyrightText": "NOASSERTION",
所感
今回C#のスケルトンコードのみのプロジェクトで、SBOMを作りましたがファイルは思ったよりも大きくなりました。
実運用時には表形式に成形する
ソフトを使って内容を確認した方が把握しやすいことを実感できました。

