BLOG
2025 年 02 月 27 日
既存 Zabbix を活用した効率的な SBOM 生成と脆弱性管理
1. はじめに:脆弱性管理導入時の課題
近年、情報セキュリティの重要性がますます高まる中、ソフトウェアの脆弱性管理は企業にとって喫緊の課題となっています。特に、多くのサーバーやアプリケーションを運用している環境では、それぞれのシステムが使用しているパッケージやライブラリを把握し、その脆弱性を効率的に管理することが求められています。
脆弱性を管理する主流となりつつある SBOM(Software Bill of Materials)を利用した手法ですが、これは既に運用中のシステム上のサーバー等から SBOM を生成する必要があります。
SBOM を生成するためのツールの例として Syft、trivy、sbom-tools などがありますが、これらは対象ホストにインストールする必要があります。しかし環境によっては新規のソフトウェアのインストールが禁止されていたり、インストールできるとしても検証含めた社内申請が必要なケースもあります。
そこで本稿では多くの企業で導入されている監視ツールである Zabbix/MIRACLE ZBX を活用し、運用中のシステムに手を加えることなく脆弱性管理を実現する手法について紹介します。
2. 既存 Zabbix を活用した脆弱性管理構成の概要
本セクションでは Zabbix を活用して脆弱性管理する構成の解説をします。
まず監視対象のサーバー上の Zabbix Agent がインストールされているパッケージの情報を収集、Zabbix へ監視データを送信します。次にその監視データ(パッケージ情報)を受け取った Zabbix Server がアクション処理にてデータを加工・整形し、SBOM 形式へ変換します。最後に、このように生成された SBOM を脆弱性管理システムに連携します。以降は脆弱性管理システム側で脆弱性の管理を行います。
この構成を取ることで、ユーザーは監視対象のシステムに手を加えることなく Zabbix の設定のみで脆弱性管理を実現できます。
図 1. 既存 Zabbix を活用した脆弱性管理構成の概要
3. 設定例
本章からは実際に脆弱性管理システム側の設定、Zabbix 側の設定手順を示します。また本稿では脆弱性管理システムとして弊社が提供中の MIRACLE Vul Hammer(SaaS)を使用します。
3.1. 脆弱性管理システム(MIRACLE Vul Hammer)設定
図 2. グループ新規作成
グループ作成後、作成したグループをクリックして画面遷移後の URL から groupPath パラメータをメモしてください。
URL 例(冒頭の "/" を含んだ 赤い部分 が groupPath パラメータです):
https://xxx.app.vul-hammer.com/groups/sboms?groupPath=/XXX&groupName=ZBX 監視対象
MIRACLE Vul Hammer 側の設定は以上です。
3.2.Zabbix 設定
3.2.1. 監視設定
パッケージ情報を収集するアイテムは「system.sw.packages」「system.sw.packages.get」の 2 つが存在します。
「system.sw.packages.get」は 7.0 で新しく追加されたアイテムです。6.0 以前の場合には「system.sw.packages」をご利用ください。後のスクリプト内での処理が容易になるため、可能であれば「system.sw.packages.get」を推奨します。
図 3. system.sw.packages 出力例(カンマ区切り)
図 4. system.sw.packages.get 出力例 (JSON 形式 )
図 5. アイテム設定例
Zabbix エージェントがパッケージ情報を収集した際に発火するトリガーの設定も必要です。
トリガーの発火時におけるアクション実行時に連携を行うため、監視項目取得のたびにイベントが発生することとなります。あくまで MIRACLE Vul Hammer と連携する目的の監視項目設定ですので、図 6 の例では深刻度は「情報」とし、正常イベントの生成も「なし」としています。
手動または後のスクリプト内で ZabbixAPI を活用し、自動でクローズさせる仕組みを用いても良いでしょう。
図 6. トリガー設定例
3.2.2. 外部スクリプト設定
前述の通り、今回はトリガー発火時のアクションにて連携を行います。そのためアクションで実行するためのスクリプトの準備が必要となります。本稿ではスクリプトの内容には触れず、必要なスクリプトの要件について述べます。
- Zabbix のアクションからコマンドライン引数として渡されたパラメータをパース
- system.sw.packages.get の出力をパースし、脆弱性管理システムに沿ったフォーマットに整形する処理
- 脆弱性管理システムの API へ HTTP リクエストを送信する処理
- オプショナル : Zabbix のイベントをクローズする処理
この要件に従って作成したスクリプトを Zabbix Server に配置します。(ここでは sbom_uploader.py として以降説明します。)配置場所は " /etc/zabbix/alertscripts " です。また Zabbix から実行できるように所有者、権限を設定する必要があります。
# chown zabbix:zabbix sbom_uploader.py # chmod +x sbom_uploader.py
3.2.3. アクション設定
メディアタイプの追加
Zabbix ではスクリプトを実行するために「メディアタイプ(Media Type)」を設定する必要があります。以下の手順で設定を行います。
- [ 管理 ] → [ メディアタイプ ] →[ メディアタイプの作成 ] をクリック
- 以下の項目を設定
名前 : 任意の名称(例 : SBOM Upload Media)
タイプ : スクリプト
スクリプト名 : 実行したいスクリプト名(先程配置したスクリプト名)
スクリプトパラメータ : {ALERT.MESSAGE} - [ 追加 ] をクリックして保存
図 7. メディアタイプ設定例
ユーザーにメディアタイプ実行権限を付与
次に作成したメディアタイプを利用するユーザーに対して、そのメディアを使用する際の設定を行います。
- [ ユーザー ]→[< アクションを実行するユーザー >]→[ メディア ] タブ→[ 追加 ] をクリック
- 以下の項目を設定
タイプ : 作成したメディアタイプ
送信先 : 利用しないパラメータのため任意の値(ここでは unuse parameter)
指定した深刻度のときに使用 : " 情報 " のトリガーからのみ発火のため " 情報 " にチェック - [ 追加 ] をクリック→[ 更新 ] をクリック
図 8. ユーザー設定例
アクションの設定
次にアクションを作成してトリガー発火時にスクリプトを実行するように設定します。
- [ 設定 ] → [ アクション ] →[ トリガーアクション ]→[ アクションの作成 ] をクリック
- 以下の項目を設定
名前 : 任意の名称(例 : SBOM Upload Action)
実行条件 : トリガーが等しいとき(作成したトリガーを指定) - [ 実行内容 ] をクリックし、以下の項目を設定
ユーザーに送信 : メディアタイプの権限を付与したユーザーを指定
メディアタイプ : 作成したメディアタイプ
メッセージのカスタマイズ : チェックを入れる
メッセージ : {HOST.NAME}{ITEM.LASTVALUE}の 2 項目を指定
{HOST.NAME}: 脆弱性システム側がどのホストの情報か判定するために必要
{ITEM.LASTVALUE}: パッケージ一覧情報
オプショナル {EVENT.ID}: スクリプト側でイベントのクローズに利用できる - [ 追加 ] をクリックして保存
図 9. アクション設定例
図 10. アクション実行内容設定例
Zabbix 側の設定は以上で終了です。
3.3. 動作確認
監視アイテムの監視データを手動で取得し、アクションが正常に動作するか確認します。
- 作成したアイテムの設定を開き、下部の [ 監視データ取得 ] をクリック
- ダッシュボードから正常にアクションが実行されたことを確認
- 脆弱性管理システムにて脆弱性の可視化を確認
図 11. 脆弱性情報の確認
4. おわりに
ここまでの作業を振り返ります。
脆弱性管理システム(MIRACLE Vul Hammer SaaS)
- SaaS のため環境構築なし、基礎設定のみ
Zabbix
- Zabbix 上へのスクリプトの配置
- 対象ホストへのアイテム、トリガー追加
- アクション周りの設定
この振り返りからも分かるように、既存の監視対象に対して手を加えることなく、脆弱性を可視化することができました。本稿を通じて、読者の皆様が脆弱性管理システムの導入し、セキュリティ運用を強化するための一助となれば幸いです。