はじめに
一般的なサーバは、OS、ミドルウェア、アプリケーション、外部からダウンロードしたパッケージなど、複数のレイヤにわたるソフトウェアで構成されています。各レイヤには異なる脆弱性が存在するため、「過不足なく」「迅速に」検知することが重要です。
インターネット上には多様な脆弱性情報元があり、それぞれにソフトウェアとの関連を特定する仕組みが存在します。しかし、すべての脆弱性を完璧にカバーできる単一の手法は存在しません。
FutureVulsでは、「過不足なく」「迅速に」脆弱性検知を実現するため、各レイヤに適したスキャン方法を用意しております。
スキャン名 | 検知対象 |
---|---|
サーバOSスキャン | OS, ミドルウェア |
依存ライブラリスキャン | アプリケーション |
CPEスキャン | その他ソフトウェア |
これらのスキャンを用いて、FutureVulsでは各レイヤごとに検知された脆弱性を「サーバ」として登録・管理します。
そのため、1台のサーバをスキャンすると、FutureVuls上ではスキャンの種類ごとに「サーバ」が作成され、それぞれ別々に管理されます。
例えば、OSやミドルウェアの脆弱性を検知するために「サーバOSスキャン」を実行すると、FutureVuls上ではそのスキャン結果が、「1台のサーバ」として登録されます。
同様に、アプリケーションの依存ライブラリの脆弱性を検知するために「依存ライブラリスキャン」を実行すると、そのスキャン結果も別の 「1台のサーバ」として登録されます。
つまり、実際のサーバは1台でも、FutureVuls上ではスキャンの種類ごとに複数の「サーバ」として管理されることになります。
しかし、運用担当者の視点では、各レイヤのスキャン結果を個別に管理するのではなく、FutureVuls上で「1台のサーバ」としてまとめて管理したいというニーズがあります。
そこで本記事では、サーバに含まれる各レイヤで検知された脆弱性を、FutureVulsで一元管理する方法について解説します。
ハンズオン: サーバOSスキャン + CPEスキャン でサーバの脆弱性を一元管理する
前提
本記事の内容は、以下の環境で実行しました。
1 | # EC2 の AMI名 |
OSはAmazon LinuxのEC2で起動しており、ベンダの公式サイトからダウンロードしたミドルウェアと、JARファイルを含んでいることとします。
1. スキャナのインストール
グループ設定 > スキャナ
から、スキャナインストールコマンドを取得し、root権限で実行します。
詳細は「Linuxへのインストール」をご参照ください。
2. LockFileやバイナリのパスを指定
以下のように順を追って説明します。
- vulsスキャナはデフォルトでは依存ライブラリの脆弱性は検知不可
- 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 | [root@server01:~]# cat /opt/vuls-saas/vuls-saas.log |
FutureVulsの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 | [servers] |
[servers.server02]
にlockfiles
を追加し、ファイルのパスを指定します。
1 | [root@server02:~]# vim /opt/vuls-saas/config.toml |
筆者の環境では、以下のようにJARファイルのパスを指定しました。
1 | [servers] |
ファイルのパスを直接指定する以外にも、ディレクトリを指定して配下にあるファイルを自動検索する方法があります。
詳細は「Vuls ScannerでLockFileを指定したスキャン」をご参照ください。
スキャンを実行し、FutureVulsのWEB画面を開いてサーバの追加とライブラリが登録されているか確認します。
server02
の追加と、ライブラリの登録が確認できました。
JARファイルに含まれるライブラリに関連する脆弱性が検知されているか確認します。
ライブラリに関係のある脆弱性が検知されていました。
3. CPE登録
Vulsスキャナで、OSやミドルウェアのパッケージ、アプリケーションの依存ライブラリの脆弱性が検知できましたが、以下のようなソフトウェアは検知対象外です。
- Oracle Database, Oracle WebLogicなどの商用ミドルウェア
- 自分でソースからコンパイルしてインストールしたソフトウェア
これらを脆弱性管理の対象とするには、CPE形式で登録する必要があります。
詳細は「CPEスキャン」をご参照ください。
今回は、ベンダの公式サイトからダウンロードしたログ収集のためのミドルウェアelasticsearch
をserver02
に登録します。サーバ > ソフトウェア > CPE追加
から、CPEを登録できます。
CPE追加の方法はいくつかありますが、ここではCPE検索機能を用いて、elasticsearch
のバージョン7.8.1を追加します。
「送信」ボタンをクリック後、CPEが追加されていることを確認します。
CPEが追加されていることが確認できました。サーバ > 詳細
から手動スキャンを実行し、CPE登録したソフトウェアの脆弱性が検知されていることを確認します。
CPEで登録したミドルウェアの脆弱性が検知されました。
このように設定することで、FutureVuls上で「1台のサーバ」として脆弱性を管理することができました。
以降FutureVuls上でスキャンが実行されると、OSやミドルウェアのパッケージ、アプリケーションの依存ライブラリ、CPE登録したソフトウェアの脆弱性がまとめて検知されるため、一元管理が可能になります。
おわりに
本記事では、Vulsスキャナを活用して、OSやミドルウェアのパッケージ、アプリケーションの依存ライブラリの脆弱性を検知する方法を解説しました。さらに、CPEを登録することで、OSやライブラリに限らず、その他のソフトウェアの脆弱性も検知し、FutureVulsで一元管理する手順についても紹介しました。
本記事が、効率的な脆弱性管理のお役に立てれば幸いです。
FutureVulsの詳細な説明やデモのご要望は「こちら」からお気軽にお問い合わせください。