「SBOM(ソフトウェア部品表)」をご存じでしょうか。セキュリティ強化の為にソフトウェアを構成するコンポーネントやライブラリ、またそれらのバージョン情報等を記述したもので、2021年には米バイデン大統領が署名した大統領令でも言及され話題になりました。また米サイバーセキュリティインフラストラクチャセキュリティ庁(CISA)も、SBOMを共有するライフサイクルについてレポートを取りまとめて公開しています。そして2023年4月7日、githubが全てのリポジトリからSBOMを出力する機能を発表。早速使ってみる事にしました。
とはいっても使い方は極めて簡単です。githubにログインした状態でSBOMを出力したいリポジトリにブラウザでアクセスし、上部のメニューから「Insights」をクリックします。そして表示された左メニューから「Dependency graph」をクリックします。

すると画面右上に「Export SBOM」ボタンが表示されますのでそれをクリックするだけでSBOMがダウンロードできます。

SBOMはSPDX形式でjsonファイルとして出力されます(画像は可読性の為に整形したものです)。

実際に使ってみました

誰でも使える機能ですので、弊社でもちょっとした調査を行いました。ごく簡単なpythonプログラムを作成してgithubにアップロードし、SBOMを出力してみました。プログラムは以下のような構造です。

また各パッケージやプログラムは以下のようなコードです。

import hello,end.ending,numpy

hello.output()
end.ending.message()
a = numpy.array([1,2,3,4,5])
b = numpy.array([6,7,8,9,10])

print(a + b)
def output():
    print("hello")
def message():
    print("end")

「別のパッケージを呼び出す」「呼び出したパッケージの関数を使う」ことのみを目的としたプログラムです。なお「numpy.py」に関しましてはgithub上で公開されているpythonパッケージですので、ここでの表記は避けさせて頂きます。

ですが早速問題が。依存関係一覧表(今回はpythonなのでsetup.pyになります)がないと「Dependency graph」が動作せず、「依存関係が見つかりません」という画面が表示されます。SBOM出力も空白に近いファイルが得られるだけです。(「Dependency graph」が上手く動作せずSBOMが得られない場合、依存関係ファイルが見つからないか依存関係ファイルが対応していない可能性があります。対応する依存関係ファイルはこちらをご参照ください)

setup.pyを追加してもう一度操作すると、確かに作成したsetup.pyの情報を基にSBOMが作成されました!しかし理想としてはgithubでも公開されているpythonパッケージである「numpy」のバージョン依存関係までSBOMに出力されればと考えていましたが、流石にそこまで依存関係を追跡する事は無いようです。
ですが今後ソフトウェアの公開や販売時にSBOMが必要になるであろう事を考えれば、プログラム公開最大手のgithubが公開物のSBOM作成機能を無料公開してくれた事は非常に有難い事です。
皆様も是非プログラム公開の際には利用してみてください。