12月22日、海外の技術メディアThe New Stackが「Vuls: A Free, Open Source Vulnerability Scanner for Linux」と題した記事を公開し、話題を呼んでいる。この記事では、VulsというLinux向けの無料かつオープンソースの脆弱性スキャナーについて詳しく紹介されている。以下に、その内容を紹介する。
Vulsの利点の一つは、 エージェントが不要 なため、スキャン対象となる各マシンにエージェントをインストールする手間が省ける点である。
Vulsは、エージェントレスなSSHアプローチを採用しており、複数のオペレーティングシステムを対象に、迅速なスキャンや詳細なスキャンなど、さまざまな方法で脆弱性をスキャンすることが可能である。Vulsを使用すると、ローカルおよびリモートの両方でスキャンを実行できる。リモートスキャンはすべてSSH経由で行われるため、対象ホストはSSH接続を受け入れる必要がある。
VulsはNVD、JVN、OVAL、RHSA/ALAS/ELSA/FreeBSD-SA、Changelogなど、複数の脆弱性データベースを使用しており、脆弱性が存在する場合は確実に検出される。
Vulsのインストール
Vulsをインストールするには、パッケージマネージャー経由でインストールする方法と、インストーラスクリプトを使用する方法の2つがある。以下の手順はUbuntu上での操作を前提としている。
パッケージマネージャーを使用した方法は、最新バージョンをインストールできないこともあるのが難点だが、簡便なのが利点だ。
sudo apt-get install vuls -y
インストーラースクリプトを使用する場合は、多少の手間と時間が掛かるが、Vulsの最新バージョンを確実に取得できる。
# システムを更新およびアップグレードする。
sudo apt-get update && sudo apt-get upgrade -y
# 必要な依存関係をインストールする。
sudo apt-get install debian-goodies reboot-notifier -y
# インストーラスクリプトをダウンロードする。
wget https://raw.githubusercontent.com/vulsio/vulsctl/master/install-host/install.sh
# インストーラスクリプトに実行権限を付与する。
chmod u+x install.sh
# インストーラーを実行する。
sudo ./install.sh
インストールを承認するよう求められたら、「y」と入力し、Enterキーを押す。インストールには約2〜5分かかる。
どちらの方法でも、インストールが成功したか確認するには以下のコマンドを実行する。
vuls help
ヘルプファイルの内容が表示されれば成功である。
Vulsの設定
Vulsを使用する前に、簡単な設定を行う必要がある。設定ファイルの作成と脆弱性データベースのインストールが必要だ。
設定ファイルの作成
# Vuls用の新しいディレクトリを作成し、そのディレクトリに移動
sudo mkdir /opt/vuls
cd /opt/vuls
# 設定ファイルを作成する。
sudo nano config.toml
以下の内容を新しい設定ファイルに貼り付ける。
[cveDict]
type = "sqlite3"
SQLite3Path = "/opt/vuls/cve.sqlite3"
[ovalDict]
type = "sqlite3"
SQLite3Path = "/opt/vuls/oval.sqlite3"
[gost]
type = "sqlite3"
SQLite3Path = "/opt/vuls/gost.sqlite3"
[metasploit]
type = "sqlite3"
SQLite3Path = "/opt/vuls/go-msfdb.sqlite3"
[servers]
[servers.localhost]
host = "localhost"
port = "local"
scanMode = [ "fast-root" ]
#scanMode = ["fast", "fast-root", "deep", "offline"]
設定ファイルのテストを実行する。
sudo vuls configtest
設定が正しければ、以下のような出力が表示される。
[Nov 13 17:48:14] INFO [localhost] It can be scanned with fast scan mode even if warn or err messages are displayed due to lack of dependent packages or sudo settings in fast-root or deep scan mode
[Nov 13 17:48:14] INFO [localhost] Scannable servers are below...
localhost
CVEデータベースの作成
- /opt/vulsディレクトリにいることを確認し、以下のコマンドを実行する。
sudo gost fetch debian --dbpath /opt/vuls/gost.sqlite3
sudo go-cve-dictionary fetch nvd --dbpath /opt/vuls/cve.sqlite3
sudo goval-dictionary fetch debian 12 --dbpath /opt/vuls/oval.sqlite3
sudo go-msfdb fetch msfdb --dbpath /opt/vuls/go-msfdb.sqlite3
実行後、.sqlite3拡張子のファイルが複数表示されるはずだ。
初回スキャンの実行
localhostに対するスキャン
ではいよいよ、スキャンを実行してみよう。localhostに対するスキャンは、以下のように簡単に実行できる。
- ローカルホストで脆弱性スキャンを実行する。
sudo vuls scan localhost
- スキャンが完了したら、結果を以下のコマンドで確認する。
sudo vuls tui
発見された脆弱性がマルチペインウィンドウに表示される。
特定のディストリビューションのスキャン
例えば、IPアドレス192.168.1.100のRHEL 9サーバーをVulsでスキャンする場合、まずRHEL 9専用のOVAL CVEデータベースを以下のコマンドでダウンロードする。
sudo goval-dictionary fetch redhat 9 --dbpath /opt/vuls/oval.sqlite3
VulsはSSHおよびSSHキー認証に依存しているため、以下のコマンドでSSHキーを生成する必要がある。
ssh-keygen
生成したキーをサーバーにコピーする。
ssh-copy-id USERNAME@192.168.1.100
上記のUSERNAMEをリモートサーバーの実際のユーザー名に置き換える。
次に、Vulsの設定ファイルを編集する。
sudo nano /opt/vuls/config.toml
ファイルの末尾に以下を追加し、IPアドレスとUSERNAMEを適切な値に置き換える。
[servers.rhel]
host = "192.168.10.100"
port = "22"
user = "USERNAME"
keyPath = "/home/USERNAME/.ssh/id_rsa"
scanMode = [ "fast-root" ] # "fast", "fast-root" or "deep"
ここまで完了したら、設定ファイルのテストを実行してみよう。
sudo vuls configtest
エラーが表示されなければ、リモートスキャンを以下のコマンドで実行する。
sudo vuls scan rhel
スキャンが完了したら、結果を以下のコマンドで確認する。
sudo vuls tui
まとめ
Vulsの導入により、システム管理者は効率的に脆弱性を検出・管理することが可能となる。オープンソースでありながら高機能なVulsは、Linux環境のセキュリティ維持に有用なツールと言える。
詳細はVuls: A Free, Open Source Vulnerability Scanner for Linuxを参照していただきたい。