脆弱性スキャナ「OpenVAS」で実行するセキュリティチェック

 昨今ではソフトウェアに脆弱性が発見されることは珍しくない。そのため、既知の脆弱性についていかに迅速に対処を行うかが重要となっている。本記事では既知の脆弱性を発見するためのツールである脆弱性スキャナ「OpenVAS」を使ったサーバーのセキュリティチェック方法について解説する。

オープンソースの脆弱性スキャナ「OpenVAS」とは

 昨今ではWebブラウザやWebサービスの深刻な脆弱性がニュースとなることも多い。しかしソフトウェアに脆弱性が発見されること自体は珍しいことではなく、深刻なものから軽微なものまでさまざまな脆弱性が毎月のように発見されている。しかし、「バグのないプログラムを作成することは不可能である」と言われているように、ソフトウェアに含まれる脆弱性を事前に見つけ出して取り去ることは非常に困難である。そのため、発見された脆弱性に対していかに迅速に対処を行うかがセキュリティ対策の鍵となる。

 脆弱性に関する情報はJPCERT/CCUS-CERTといったWebサイトで公開されている。また、各OSベンダーやソフトウェア開発者らは脆弱性の発見されたコンポーネントに対する対策パッチやセキュリティアップデートなどをリリースしている。これらを定期的に確認して対応することが好ましいのだが、独自にカスタマイズしたソフトウェアを利用している場合や多数のサーバーを管理している場合など、利用しているソフトウェアに関する脆弱性情報の確認が困難な場合もある。このような場合に有用なのが、「脆弱性スキャナ」と呼ばれるソフトウェアだ。

 脆弱性スキャナは、対象のマシンに導入されているソフトウェアのバージョンや設定、構成などを確認してそれらに脆弱性がないかどうかをチェックするツールだ。脆弱性スキャナの多くは簡単な操作でスキャンを実行でき、その結果をレポートとして出力する機能を備えている。既知の脆弱性に関する情報を格納したデータベースを用いて脆弱性のチェックを行うという仕組み上、未知の脆弱性については検出できない可能性はあるものの、定期的にスキャンを実行することでセキュリティ対策の不備を発見しやすくなり、セキュリティをより強固にできる。

 脆弱性スキャナにはさまざまなものがあるが、今回はオープンソースで開発されている「OpenVAS(Open Vulnerability Assessment System )」を紹介する。OpenVASはかつてオープンソースソフトウェアとして開発・リリースされていたセキュリティスキャナ「Nessus」から派生したセキュリティスキャナだ。Nessusは2005年にリリースされたバージョン3以降、非オープンソースライセンスで提供される商用ソフトウェアとなったが、オープンソースで公開されていたバージョン2系をベースに拡張を続けたものがOpenVASとなる。コミュニティベースで開発され無償で利用できるだけでなく、脆弱性データベースは日々更新が続けられており、開発を支援する独Greenbone Networksによる商用サポートも提供されている。

OpenVASのアーキテクチャと動作環境

 OpenVASはユーザーが操作を行うためのクライアントや、実際にスキャン操作を実行するスキャナ、スキャンのための各種設定やデータを管理するマネージャ、サービスやユーザーの管理を行うアドミニストレータといった複数のコンポーネントから構成されている(表1)。

表1 OpenVASのコンポーネント
種別コンポーネント名コマンド名説明
クライアントOpenVAS CLIopenvas-cliOpenVASをコマンドラインで操作するインターフェイスを提供する
Greenbone Security Desktop(GSD)gsdOpenVASをGUIで操作するインターフェイスを提供する
Greebone Security Assistant(GSA)gsadOpenVASをWebブラウザベースのGUIで操作するインターフェイスを提供する
スキャナOpenVAS Scanneropenvassdスキャン処理を行う
マネージャOpenVAS Manageropenvasmdスキャナやそのデータなどを一元管理する
アドミニストレータOpenVAS Administratoropenvasadサービスの起動/停止やユーザー管理などを行う

 これらはそれぞれ同一のマシンで実行させることもできるし、異なるマシンで実行させることも可能だ。なお、Greenbone Security DesktopおよびOpenVAS CLIについてはLinuxおよびWindows向けのバイナリがリリースされているが、それ以外のコンポーネントについては基本的にはLinux向けとなっている。ダウンロードページではソースコードのほか、CentOS 6およびFedora 15~18、Red Hat Enterprise 6向けバイナリパッケージの入手方法が案内されている。なお、Debian GNU/LinuxやFedoraなどはその公式リポジトリでOpenVASのバイナリパッケージが提供されている。ただし、必ずしも最新のバージョンが提供されているわけではないので、それらを利用する際は注意してほしい。

 今回は、CentOS 6.3をインストールした1台のサーバーにOpenVAS ScannerおよびOpenVAS Manager、OpenVAS Administrator、Greebone Security Assistantをインストールし、WebブラウザでそのサーバーにアクセスしてOpenVASの各種操作を実行するという構成で解説を行っていく。

OpenVASのインストールと設定

 OpenVASのバイナリパッケージはCentOSの標準リポジトリでは提供されていないため、ソースコードからコンパイルしてインストールするか、もしくはサードパーティのリポジトリを利用してバイナリパッケージをインストールすることになる。バイナリパッケージの入手先やサードパーティリポジトリの利用法はOpenVASのWebサイトで説明されているが、CentOS 6の場合は以下のようになる。

Atomicorpのリポジトリを登録する

 OpenVASのCentOS向けバイナリパッケージはAtomicorpというセキュリティ企業の提供するリポジトリ(atomicリポジトリ)から入手できる。atomicリポジトリを利用できるようにするには、http://www6.atomicorp.com/channels/atomic/centos/6/x86_64/RPMS/(x86_64向け)もしくはhttp://www6.atomicorp.com/channels/atomic/centos/6/i386/RPMS/(i386向け)で提供されている「atomic-release-<バージョン番号>.el6.art.noarch.rpm」という、atomicリポジトリの設定情報が含まれるRPMパッケージをインストールすれば良い。たとえば64ビット(x86_64)環境でatomic-release-1.0-14.el6.art.noarch.rpmをインストールする場合、以下のようにする。

# rpm -ivh http://www6.atomicorp.com/channels/atomic/centos/6/x86_64/RPMS/atomic-release-1.0-14.el6.art.noarch.rpm

 atomic-releaseパッケージをインストールすると自動的にatomicリポジトリが有効になり、yumコマンドでこのリポジトリからパッケージをインストールできるようになる。

OpenVASのインストール

 atomicリポジトリでは「openvas」という名称のパッケージでOpenVASが提供されている。このパッケージをインストールすることでOpenVASの利用に必要な一通りのコンポーネントがインストールされる。

# yum install openvas

OpenVASの設定

 OpenVASでは、脆弱性情報やそれをテストするための設定情報を「NVT(Network Vulnerability Tests)」と呼ぶ。NVTは日々更新されており、NVT Feedと呼ばれる形式でその更新情報が配信されている。NVT FeedはOpenVASによって無料で配信されており、OpenVASの利用前には更新されたNVTをダウンロードしておく必要がある。また、OpenVASはNVTだけでなくSCAP(Security Content Automation Protocol)という仕様に基づいて記述された脆弱性情報も利用しており、これらのダウンロードやOpenVASを利用するためのユーザー情報の登録なども必要だ。これらは個別に行うこともできるが、openvasパッケージに含まれる「openvas-setup」というコマンドでまとめて実行できる。

# openvas-setup

 openvas-setupコマンドを実行すると、まずNVTやSCAPベースの脆弱性情報のダウンロードとアップデートが実行される。この処理には数十分ほどの時間がかかるが、気長に待って欲しい。なお、ここでOpenVASプラグインのアップデートに失敗したという旨が表示されることがある。この場合、openvas-setupコマンドの実行後に後述するプラグインのアップデート処理を実行する必要がある。

# openvas-setup

Openvas Setup, Version: 0.3

Step 1: Update NVT's and SCAP data
Please note this step could take some time.
Once completed, NVT's and SCAP data will be updated automatically every 24 hours

Updating NVTs....
Error updating OpenVAS plugins. Please run openvas-nvt-sync manually.
Updating SCAP data...
 
 
Updating OpenVAS Manager database....

 続いて、WebベースのGUI管理コンソールであるGreenbone Security Assistant(GSAD)の設定が行われる。デフォルトでは任意のIPアドレスからGSADに接続できるようになっているが、特定のアドレスからのみ接続できるように変更することも可能だ。

Step 2: Configure GSAD
The Greenbone Security Assistant is a Web Based front end
for managing scans. By default it is configured to only allow
connections from localhost.

Allow connections from any IP? [Default: yes]   ←ここでEnterキーを押す
Stopping greenbone-security-assistant:                     [  OK  ]
Starting greenbone-security-assistant:                     [  OK  ]

 次に、GSADの管理用ユーザーアカウントの作成を求められる。ここで作成したアカウントでGSADの設定変更といった管理操作を行うことになる。

Step 3: Choose the GSAD admin users password.
The admin user is used to configure accounts,
Update NVT's manually, and manage roles.

Enter administrator username: sfjp  ←作成するユーザー名を入力
Enter Administrator Password:  ←パスワードを入力
Verify Administrator Password:  ←同じパスワードを再入力

ad   main:MESSAGE:29817:2012-12-27 20h27.09 JST: No rules file provided, the new user will have no restrictions.
ad   main:MESSAGE:29817:2012-12-27 20h27.09 JST: User hylom has been successfully created.

 続いて、通常の作業に利用するGSADの一般ユーザーアカウントを作成する。認証方法としてはパスワードもしくは証明書が利用できるが、通常はパスワードで問題ないだろう。また、ここでユーザーの権限を変更して実行できる処理を制限することも可能だが、これはGSADの起動後にGUIで設定できるので、ここでは設定していない。

Step 4: Create a user

Using /var/tmp as a temporary file holder.

Add a new openvassd user
---------------------------------

Login : hylom  ←作成するユーザー名を入力
Authentication (pass/cert) [pass] :  ←「pass」を選択
Login password :  ←パスワードを入力
Login password (again) :  ←パスワードを入力

User rules
---------------
openvassd has a rules system which allows you to restrict the hosts that sfjp has the right to test.
For instance, you may want him to be able to scan his own host only.

Please see the openvas-adduser(8) man page for the rules syntax.

Enter the rules for this user, and hit ctrl-D once you are done:  ←Ctrl-Dを入力
(the user can have an empty rules set)


Login             : hylom
Password          : ***********

Rules             :


Is that ok? (y/n) [y]
user added.

 以上でopenvas-setupでの初期設定は完了だ。

Starting openvas-administrator...
Starting openvas-administrator:
                                                           [  OK  ]


Setup complete, you can now access GSAD at:
  https://<IP>:9392

 この状態でopenvas-administratorおよびgsadは起動した状態になっているので、続いてopenvas-scannerおよびopenvas-managerを起動しておく。

# service openvas-scanner start
# service openvas-manager start

 また、OpenVASプラグインのアップデートに失敗していた場合はここでopenvas-nvt-syncコマンドを実行し、プラグインのアップデートを行っておく必要がある。

# openvas-nvt-sync

 プラグインのアップデート実行後は、アップデートしたプラグインをロードするためにopenvas-scannerを再起動しておく。プラグインのロードのため再起動には時間がかかる場合があるが、ここでも気長に待って欲しい。

# service openvas-scanner restart

 最後に、openvas-managerをいったん停止させた上でデータベースのリビルドを実行し、完了したらopenvas-managerを再起動させておく。

# service openvas-manager stop
# openvasmd --rebuild
# service openvas-manager start

 これでNVTのアップデートは完了だ。

Greebone Security AssistantによるOpenVASの操作

 OpenVASではコマンドラインクライアント(OpenVAS CLI)で各種設定やスキャン操作を実行できる。また、GUI版クライアントを利用すると各種設定などをより容易に実行できる。ここでは、OpenVASの各種コンポーネントとともにインストールされるWebベースのクライアントであるGreebone Security Assistant(GSA)を使ったOpenVASの操作について説明していこう。

GSAへのログインとローカルホストのスキャン

 GSAを稼働させているサーバーの9392番ポートにHTTPSでアクセスすると、GSAのログイン画面が表示される(図1)。

図1 GSAへのログイン画面
図1 GSAへのログイン画面

 ここでopenvas-setupコマンドで設定したユーザー名およびパスワードを入力してログインすると、「Tasks」画面が表示される(図2)。OpenVASではスキャン設定を「Task(タスク)」と呼び、この画面では登録されているタスク一覧が表示される。

図2 GSAの「Tasks」画面
図2 GSAの「Tasks」画面

 初期状態ではタスクは登録されていないので、まずローカルホストをスキャンするタスクを登録してみよう。タスクを登録するには、「Scan Management」メニューの「New Task」を選択する(図3)。

図3 タスクを登録するには「Scan Management」メニューの「New Task」を選択する
図3 タスクを登録するには「Scan Management」メニューの「New Task」を選択する

 「New Task」画面が表示されるので、ここでタスクに関する情報を登録していく(図4)。

図4 「New Task」画面
図4 「New Task」画面

 「Name」および「Comment」には任意のタスク名およびコメントを入力する。「Scan Config」ではスキャン方法を選択できるが、通常はデフォルトの「Full and fast」で良いだろう。「Scan Targets」ではスキャン対象を指定する。初期状態ではLocalhostのみが用意されているはずなので、これを選択する。これ以外についてはデフォルトのままでOKだ。最後に「Create Task」ボタンをクリックするとタスクが作成され、Tasks画面に作成されたタスクが表示される(図5)。

図5 Tasks画面に作成されたタスクが表示される
図5 Tasks画面に作成されたタスクが表示される

 登録したタスクを実行するには、ここで「Actions」列にある三角(Start)ボタンをクリックする。すると「Status」が「Requested」や進捗表示に変わり、スキャン処理が実行される(図6)。

図6 スキャン実行中は「Status」部分に進捗が表示される
図6 スキャン実行中は「Status」部分に進捗が表示される

 スキャンが完了すると「Status」が「Done」となり、また脆弱性が発見された場合は「Threat」の部分にその重大さが表示される(図7)。

図7 脆弱性が発見されるとその重大さに応じて「Threat」項目が変化する
図7 脆弱性が発見されるとその重大さに応じて「Threat」項目が変化する

 ここで「Reports」の「Last」欄にはスキャンを実行した日付が表示されており、これをクリックするとスキャンレポートが表示される(図8)。

図8 スキャンの実行日をクリックするとスキャンレポートが表示される
図8 スキャンの実行日をクリックするとスキャンレポートが表示される

 スキャンレポートには発見された脆弱性がその重大性ごとに表示され、それぞれの説明や対策などの情報も確認できるようになっている(図9)。

図9 スキャンレポートでは検出された脆弱性の情報を確認できる
図9 スキャンレポートでは検出された脆弱性の情報を確認できる

スキャン対象ホストの追加と認証情報を使った脆弱性スキャン

 localhost以外のホストをスキャンしたい場合、「Configuration」メニューの「Targets」でスキャン対象となるTarget(ターゲット)を登録しておく必要がある(図10)。

図10 「New Target」画面
図10 「New Target」画面

 ここで「Name」にはターゲット名を、「Hosts」には対象ホストのホスト名を、「Port List」にはスキャン対象とするポートを指定できる。「Hosts」で「From file」を選択し、ホスト名が列挙されたテキストファイルを指定することで複数のホストを登録することも可能だ。必要な情報を入力し、最後に「Create Target」をクリックするとターゲットが追加される。

 また、一部のテストでは対象のホストにログインしてセキュリティテストを実行する。このようなテストの実行にはログインに使用するためのアカウント情報(Credential)が必要だが、これについては「Configuration」メニューの「Credentials」から登録できる(図11)。

図11 「New Credential for Local Security Checks」画面
図11 「New Credential for Local Security Checks」画面

 ここで「Name」にはアカウント情報名を、「Login」にはログインに使用するユーザー名を入力する。また、認証にはパスワードもしくはSSHを利用できる。SSHを利用する場合「Autogenerate credential」を選択するとSSH鍵が自動的に生成されて登録されるほか、「Key pair」を選択して公開鍵および暗号鍵、パスフレーズを入力することもできる。これらの情報を入力して「Create Credential」をクリックするとアカウント情報が保存される。作成/登録された公開鍵は、「Credentials for Local Security Checks」の「Actions」列に表示されている鍵(「Download Public Key」)アイコンをクリックすることでダウンロードが可能だ(図12)。

図12 「Actions」列に表示されている鍵アイコンをクリックすると公開鍵をダウンロードできる
図12 「Actions」列に表示されている鍵アイコンをクリックすると公開鍵をダウンロードできる

 また、ここで作成したアカウント情報を使用するはターゲットの設定時に「SSH Credential」項目で作成したアカウント情報を指定すれば良い(図13)。

図13 ターゲットの設定時に「SSH Credential」項目で作成したアカウント情報を指定できる
図13 ターゲットの設定時に「SSH Credential」項目で作成したアカウント情報を指定できる

放置されている脆弱性は意外に多い、ぜひ定期的なチェックを

 OpenVASによる脆弱性のチェックを実行することで、気付いていなかった脆弱性を簡単に発見できる。多くのLinuxディストリビューションではデフォルトでセキュリティに配慮した設定が取られていることが多いが、それでも見過ごされていた脆弱性やセキュリティ的に問題のある設定というのは意外に存在する。コマンドラインでOpenVASを操作できるOpenVAS CLIを併用すれば、cronコマンドで定期的に脆弱性スキャンを実行する、といったことも可能だ。ぜひ一度、OpenVASを使って自分の管理しているサーバーのセキュリティを確認してみてはいかがだろうか。