採用情報

お問い合わせ

BLOG

Linux の知識・学習 BLOG

Linux の知識・学習 BLOG

2024 年 05 月 27 日

AlmaLinux における SBOM の実装について

サイバートラストは AlmaLinux OS Foundation に日本企業初のプラチナスポンサーとして参画し、AlmaLinux の共同開発を推進しています。
現在当社ではオープンソースのサプライチェーンセキュリティを強化するため OpenSSF や OpenChain プロジェクトに積極的にも参加しており、これらのプロジェクトでの知見を活用し、AlmaLinux など OS レベルでの SBOM 実装に注力し、ソフトウェアの透明性と信頼性を高める取り組みを推進しています。

2023 年、当社は AlmaLinux コミュニティへの以下のような具体的なコード貢献などを実施し、Open Source Summit Japan および AlmaLinux Day: Tokyo での講演もおこなってきました。

今回は、AlmaLinux における SBOM の実装およびその SBOM 生成ツールである alma-sbom についてご紹介します。

まだ SBOM についてご存じない方は、まずは当社の SBOM 解説記事「SBOM(Software Bill of Materials) とは(前編)~ SBOM の基礎知識から詳しく解説 ~」 や解説動画をご覧ください。

AlmaLinux が SBOM を提供する目的・目標

AlmaLinux では、ビルドシステム (ALBS: AlmaLinux Build System) のパイプライン上の各タスクにおいて、その時点での情報をデータベースに登録しビルドを追跡するための情報として保存します。
次のタスクでは、まずタスク開始時にデータベースに問い合わせを行い、そのタスクの情報を、以前のタスクの情報と紐づくようにデータベースに保存します。

例えばビルド前のタスクにおいて、そのビルドのソースコードの情報として、コミット ID がデータベースに登録されます。その後のビルドによって生成されたパッケージやログなどの生成物 (artifact) は、先ほど登録されたコミット ID の情報と紐づく形でデータベースに保存されることとなります。

AlmaLinux のユーザーはこの情報を参照することにより、生成されたパッケージがどのソースコードやどのコミットコミット時点でビルドされたものなのかなどの来歴を知ることができるようになり、ソースコードやビルドタスクの信頼性を得ることができます。
将来的には、配布されたパッケージと全く同じ条件でビルドすることを可能にするような情報の提供を目指しています。

ALBS とデータベースおよび SBOM 作成ツールについて

以下の図は、ALBS(AlmaLinux Build System) やデータベースとして使われる immudb、および SBOM 作成ツールである alma-sbom の関係を示した図です。

ALBS(AlmaLinux Build System) やデータベースとして使われる immudb、および SBOM 作成ツールである alma-sbom の関係を示した図

AlmaLinux で配布されるパッケージのソースコードは git.almalinux.org にあります。ALBS でビルドされたパッケージは各リポジトリへ、その時の情報は immudb というデータベースへ格納されます。
immudb は Codenotary 社が開発する OSS で、改ざんが防止された (immutable な ) データベースの実装です。
immudb についての詳細はこちら (https://immudb.io/ or https://github.com/codenotary/immudb) を参照ください。
AlmaLinux の SBOM は、ユーザーが必要な時に自分で作成します。
alma-sbom というツールをユーザーが手元で実行することにより、immudb に格納されたデータを取得し、SBOM として出力します。

alma-sbom の使い方

alma-sbom を用いて SBOM を生成する手順を紹介します。

現時点において、AlmaLinux では以下の 2 種類の SBOM のタイプを用意しています。

  • Build SBOM: ビルド ID を指定して生成する SBOM です。指定した ID のビルドタスクで生成したすべてのパッケージの情報が含まれます。
  • Package SBOM: パッケージのハッシュ値を指定して生成する SBOM です。指定した単一のパッケージの情報のみが含まれます。

ここでは Package SBOM の生成手順を扱います。

なお、以下の手順は AlmaLinux8, 9 での動作を確認しています。
動作は未確認ですが、他のディストリビューションでも、python3.9 以上が動作する環境であれば同様の手順で SBOM が生成できるものと思われます。

alma-sbom のインストール

alma-sbom のソースコードを取得し、そのディレクトリに移動します。

$ git clone https://github.com/AlmaLinux/alma-sbom.git && cd $_

alma-sbom は python 製のアプリケーションです。alma-sbom に必要なライブラリ群のインストールを行います。
なお、ここではホストマシンへの影響を最小限に留めるため、python の venv と呼ばれる仮想環境を利用します。

env という名前の venv を作成し、その環境の中に入った後、必要なライブラリ群をインストールします。

$ python3.9 -m venv env
$ source env/bin/activate
(env) $ pip install .

 

テストとして '--help' オプションを指定して alma-sbom を実行します。

(env) $ python alma_sbom.py --help

alma-sbom を用いた SBOM 生成

Package SBOM を生成するためには、そのパッケージのハッシュ値が必要になります。
ここでは例として bash-5.1.8-6.el9_1.x86_64.rpm を対象とします。
なお、以下のコマンドは前項のインストール手順の直後につづけて実行することを想定しています。

まずは以下のコマンドを実行し、パッケージを手元にダウンロードします。
※このコマンドは AlmaLinux9 上でのみ動作します。
AlmaLinux8 においては、指定するパッケージ名を AlmaLinux8 のものに置き換えてください。
AlmaLinux 以外のディストリビューションの場合には本コマンドでのパッケージのダウンロードはできませんが、事前にパッケージをダウンロードするか、そのパッケージのハッシュ値が分かれば SBOM の生成は可能であると思われます。

(env) $ dnf download bash-5.1.8-6.el9_1.x86_64

取得したパッケージのハッシュ値を計算します。
以下の手順のとおりにコマンドを実行すると、変数 $HASH にパッケージのハッシュ値が格納されます。

(env) $ PKG=bash-5.1.8-6.el9_1.x86_64.rpm
(env) $ SUM=$(sha256sum $PKG)
(env) $ HASH=${SUM%%\ ${PKG}}

取得したハッシュ値を '--rpm-package-hash' オプションに指定して alma-sbom を実行します。
ほかには以下のオプションを指定しています。

  • --file-format: 出力する SBOM のフォーマットを指定します。今回は 'spdx-json' を指定しています。
  • --output-file: 出力するファイル名を任意に指定します。本オプションが指定されていない場合には、標準出力に出力されます。

そのほかのオプションはヘルプメッセージを参照してください。

(env) $ python alma_som.py --rpm-package-hash $HASH --file-format spdx-json --output-file < 任意のファイル名 > 

以上の手順で AlmaLinux の SBOM を生成することができます。

関連する記事
AlamLinux OS サポートサービス ご相談・お問い合わせ
CentOS 7 延長サポートサービス
デジタルトランスフォーメーションのための電子認証基盤 iTrust
SSL/TLS サーバー証明書 SureServer Prime