FutureVuls Blog

Linuxサーバの脆弱性を一元管理!OS、ミドルウェア、ライブラリに対応

はじめに

一般的なサーバは、OS、ミドルウェア、アプリケーション、外部からダウンロードしたパッケージなど、複数のレイヤにわたるソフトウェアで構成されています。各レイヤには異なる脆弱性が存在するため、「過不足なく」「迅速に」検知することが重要です。
インターネット上には多様な脆弱性情報元があり、それぞれにソフトウェアとの関連を特定する仕組みが存在します。しかし、すべての脆弱性を完璧にカバーできる単一の手法は存在しません。
FutureVulsでは、「過不足なく」「迅速に」脆弱性検知を実現するため、各レイヤに適したスキャン方法を用意しております。

スキャン名 検知対象
サーバOSスキャン OS, ミドルウェア
依存ライブラリスキャン アプリケーション
CPEスキャン その他ソフトウェア

これらのスキャンを用いて、FutureVulsでは各レイヤごとに検知された脆弱性を「サーバ」として登録・管理します。
そのため、1台のサーバをスキャンすると、FutureVuls上ではスキャンの種類ごとに「サーバ」が作成され、それぞれ別々に管理されます。
例えば、OSやミドルウェアの脆弱性を検知するために「サーバOSスキャン」を実行すると、FutureVuls上ではそのスキャン結果が、「1台のサーバ」として登録されます。
同様に、アプリケーションの依存ライブラリの脆弱性を検知するために「依存ライブラリスキャン」を実行すると、そのスキャン結果も別の 「1台のサーバ」として登録されます。
つまり、実際のサーバは1台でも、FutureVuls上ではスキャンの種類ごとに複数の「サーバ」として管理されることになります。
しかし、運用担当者の視点では、各レイヤのスキャン結果を個別に管理するのではなく、FutureVuls上で「1台のサーバ」としてまとめて管理したいというニーズがあります。

そこで本記事では、サーバに含まれる各レイヤで検知された脆弱性を、FutureVulsで一元管理する方法について解説します。

ハンズオン: サーバOSスキャン + CPEスキャン でサーバの脆弱性を一元管理する

前提

本記事の内容は、以下の環境で実行しました。

1
2
3
4
5
6
7
8
# EC2 の AMI名
al2023-ami-2023.5.20240916.0-kernel-6.1-x86_64

# ミドルウェア
Elasticsearch(ベンダの公式サイトからダウンロード)

# アプリケーション
Java(JARファイル)

OSはAmazon LinuxのEC2で起動しており、ベンダの公式サイトからダウンロードしたミドルウェアと、JARファイルを含んでいることとします。

1. スキャナのインストール

グループ設定 > スキャナから、スキャナインストールコマンドを取得し、root権限で実行します。
スキャナのインストール

詳細は「Linuxへのインストール」をご参照ください。

2. LockFileやバイナリのパスを指定

以下のように順を追って説明します。

  1. vulsスキャナはデフォルトでは依存ライブラリの脆弱性は検知不可
  2. vulsスキャナにLockFileやバイナリのパスを指定

1. vulsスキャナはデフォルトでは依存ライブラリの脆弱性は検知不可

Vulsスキャナのデフォルト設定では、OSやミドルウェアに含まれるパッケージの脆弱性は検知できますが、アプリケーションの依存ライブラリの脆弱性は検知できません。

試しにデフォルト設定で実行してみます。インストールされたスキャナをそのまま実行するだけです。

スキャンを実行するサーバ名はserver01とします。
スキャナのインストール完了後、5分後に自動スキャンが実行されますが、手動でも実行可能です。

1
[root@server01:~]# sudo -H -u vuls-saas /opt/vuls-saas/vuls-saas.sh >/dev/null 2>&1

スキャン結果は、数分後にFutureVulsのWeb画面に反映されます。
さらに、以下のログファイルを確認することで、スキャンの成否やエラーの詳細を把握できます。

  • /opt/vuls-saas/vuls-saas.log
    scan.logとreport.logの概要
  • /opt/vuls-saas/scan.log
    スキャンの成否
  • /opt/vuls-saas/report.log
    レポートの詳細、FutureVulsへのアップロードエラー等

筆者の環境では、スキャンとアップロードが成功していました。

1
2
3
4
5
[root@server01:~]# cat /opt/vuls-saas/vuls-saas.log
[2025/02/12 18:29:31] "INFO": Start to scan.
[2025/02/12 18:29:32] "SUCCESS": Refresh scanner. [/opt/vuls-saas/vuls type: linux_x86_64]
[2025/02/12 18:29:40] "SUCCESS": Complete vuls scan.
[2025/02/12 18:29:40] "SUCCESS": Complete vuls upload.

FutureVulsのWEB画面を開きます。
Web画面

server01が追加されていました。
OSやミドルウエアのパッケージが登録されていますが、ライブラリは登録されていませんでした。

2. vulsスキャナにLockFileやバイナリのパスを指定

Vulsスキャナで依存ライブラリの検知するためには、config.tomlにサーバ上に配置されているLockFileやバイナリのパスを指定します。スキャン時に指定されたパスからファイルを解析し、依存ライブラリのリストを取得します。
スキャン対象となるLockfileやバイナリは「対応環境」をご参照ください。

今回は依存ライブラリが検知されるかの差分を確認するために、新たにserver02を用意して行います。
サーバ環境はserver01と同じです。

以下のコマンドを実行し、config.tomlが作成されていることを確認します。

1
[root@server02:~]# cat /opt/vuls-saas/config.toml

筆者の環境では、以下のような出力になりました。

1
2
3
4
5
6
7
8
9
10
11
12
[servers]

[servers.server02]
host = "localhost"
port = "local"
user = "vuls-saas"
scanMode = ["fast-root"]

[saas]
GroupID = XXXX
Token = "XXXXXXXXXX"
URL = "https://auth.vuls.biz/one-time-auth"

[servers.server02]lockfilesを追加し、ファイルのパスを指定します。

1
[root@server02:~]# vim /opt/vuls-saas/config.toml

筆者の環境では、以下のようにJARファイルのパスを指定しました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[servers]

[servers.server02]
host = "localhost"
port = "local"
user = "vuls-saas"
scanMode = ["fast-root"]
lockfiles = [
"/home/user/application/log4j-core-2.13.0.jar"
]

[saas]
GroupID = XXXX
Token = "XXXXXXXXXX"
URL = "https://auth.vuls.biz/one-time-auth"

ファイルのパスを直接指定する以外にも、ディレクトリを指定して配下にあるファイルを自動検索する方法があります。
詳細は「Vuls ScannerでLockFileを指定したスキャン」をご参照ください。

スキャンを実行し、FutureVulsのWEB画面を開いてサーバの追加とライブラリが登録されているか確認します。
ソフトウェア

server02の追加と、ライブラリの登録が確認できました。
JARファイルに含まれるライブラリに関連する脆弱性が検知されているか確認します。

JARに関連する脆弱性

ライブラリに関係のある脆弱性が検知されていました。

3. CPE登録

Vulsスキャナで、OSやミドルウェアのパッケージ、アプリケーションの依存ライブラリの脆弱性が検知できましたが、以下のようなソフトウェアは検知対象外です。

  • Oracle Database, Oracle WebLogicなどの商用ミドルウェア
  • 自分でソースからコンパイルしてインストールしたソフトウェア

これらを脆弱性管理の対象とするには、CPE形式で登録する必要があります。
詳細は「CPEスキャン」をご参照ください。

今回は、ベンダの公式サイトからダウンロードしたログ収集のためのミドルウェアelasticsearchserver02に登録します。
サーバ > ソフトウェア > CPE追加から、CPEを登録できます。
CPE追加の方法はいくつかありますが、ここではCPE検索機能を用いて、elasticsearchのバージョン7.8.1を追加します。
CPE登録

「送信」ボタンをクリック後、CPEが追加されていることを確認します。
CPE確認

CPEが追加されていることが確認できました。
サーバ > 詳細から手動スキャンを実行し、CPE登録したソフトウェアの脆弱性が検知されていることを確認します。
手動スキャン

脆弱性の確認

CPEで登録したミドルウェアの脆弱性が検知されました。

このように設定することで、FutureVuls上で「1台のサーバ」として脆弱性を管理することができました。

以降FutureVuls上でスキャンが実行されると、OSやミドルウェアのパッケージ、アプリケーションの依存ライブラリ、CPE登録したソフトウェアの脆弱性がまとめて検知されるため、一元管理が可能になります。

おわりに

本記事では、Vulsスキャナを活用して、OSやミドルウェアのパッケージ、アプリケーションの依存ライブラリの脆弱性を検知する方法を解説しました。さらに、CPEを登録することで、OSやライブラリに限らず、その他のソフトウェアの脆弱性も検知し、FutureVulsで一元管理する手順についても紹介しました。
本記事が、効率的な脆弱性管理のお役に立てれば幸いです。

FutureVulsの詳細な説明やデモのご要望は「こちら」からお気軽にお問い合わせください。