OpenVASを使ったセキュリティ監査

openvas_thm.png

 セキュリティはもちろん重要だが、絶えず最新の対策を用意することは難しく、脆弱性のチェックをネットワーク全体に対して行うのは非常に面倒でもある。よって、そうしたテストを自動化し、なおかつ最も適切な最新のテストを実行できる方法が必要になる。 Open Vulnerability Assessment System (OpenVAS)は、セントラルサーバとGUIフロントエンドからなるネットワークセキュリティスキャナである。OpenVASサーバは、Nessus Attack Scripting Language(NASL)で書かれた何種類ものネットワーク脆弱性テスト(NVT)を実行できる。また、こうしたテストはOpenVASプロジェクトによって頻繁に更新されている。

 OpenVASは、Nessusスキャナの以前のバージョン2.2から派生したプロジェクトである。3年ほど前、NessusはGPLを放棄し、バージョン3.0を商用向けとする方針転換を行った。ソフトウェアは無償で提供するが、NVTのアップグレードを有料とし、そのほかにも制約を設けることにしたのだ(ホームユーザについては最近、一部の制約が撤廃された)。今年7月、OpenVASのバージョン1.0がリリースされ、以降もマイナーアップデートが繰り返されている。なお、OpenVASのすべてのコードは、GPLの下で提供されている。

セットアップ

 OpenVASは、複数のコンポーネントで構成されるサーバ/クライアントアーキテクチャをとっている。サーバ側(Linux専用)では、次の4つのパッケージが必要になる。

  • OpenVAS-Server:基本的なスキャン機能を実行する
  • OpenVAS-Plugins:各種NVTが含まれる
  • OpenVAS-LibNASLおよびOpenVAS-Libraries:サーバの機能に必要な要素群

 一方、クライアント側(LinuxまたはWindows)に必要なのは、OpenVAS-Clientパッケージだけである。

 OpenVASは、すでに多数のディストリビューションに収録されている。openSUSEでSmartをパッケージマネージャとして利用している私の環境では、「install openvas-server openvas-manual openvas-plugins openvas-libraries openvas-client」とするだけですべてのインストールが完了した。あるいは、ダウンロードサイトからパッケージを個別に入手し、付属の手順に従ってインストールすることもできる。

 パッケージのインストールが済んだら、スキャンを開始する前に、サーバ側でrootとしていくつかの手順を実行する必要がある。まず、サーバ・クライアント間のすべての通信を暗号化できるように、「openvas-mkcert」を使って適切な証明書を作成する。証明書には有効期限があり、OpenVASを使い続けるには、いずれ再発行が必要になる。

 続いて、ファイアウォールで1241番ポートを開放し、クライアントがサーバに接続できるようにする。さらに、ユーザアカウントの作成で、ログイン名、認証方法(パスワードまたは証明書)、アクセスルールの指定を行う。アクセスルールは、「accept <IPアドレス>/<マスク>」(例:「accept 192.168.0.229/24」)または「deny <IPアドレス>/<マスク>」と、「accept」または「deny」のようになる。最初の2つのルールは、OpenVASによるスキャンの対象となるIPアドレスを指定するもので、ユーザのログイン元のIPアドレスを表す「client_ip」という特殊なパラメータも使える。残り2つのルールはデフォルト動作の設定を行うもので、上記の許可(accept)および拒否(deny)のルールでカバーされていないアドレスについては、こうしたデフォルトルールが適用される。たとえば、デフォルトの許可ルールだけを設定すると、すべてのマシンをスキャンできる。また、「accept client_ip」と「default deny」を組み合わせれば、ユーザ自身のマシンだけをスキャンできることになる。

 OpenVASでは、「/var/lib/openvas/users/」の下にユーザ別のディレクトリが用意され、そこにユーザの設定情報が保存されるので、ユーザごとに個別のルールを作成できる。また、サーバに関するその他の設定情報は「/etc/openvas/openvasd.conf」に保存されるが、こちらはデフォルトの設定値のままで問題はないだろう。ただ、この設定ファイルには詳しいコメントが付いており、変更するのも容易だ。

NVTの取得
 OpenVASでは1つのフィードで5000を超えるNVTを用意しているが、NVTはそれ以外のところからも入手できる。「/usr/sbin/openvas-nvt-sync」というスクリプトを見ると、「FEED=rsync://rsync.openvas.org:/nvt-feed」のような行があるので、これを適宜変更すればよい。たとえば、AlienVaultのフィードなどが利用できる。また、Nessusのフリーフィードも利用できるが、事前に登録が必要で、新しくリリースされたプラグインを利用できるようになるまでに1週間待つ必要がある。

 では、肝心のテストの実行に取りかかるとしよう。セキュリティのテストを行うには、最新のNVTが必要になる。そのため「openvas-nvt-sync」をたびたび実行して、ローカルサーバのテストを絶えず更新する必要がある。このユーティリティはrsyncとmd5sumを利用するので、これらは各自でインストールしておく。新しいNVTのソースや証明書の追加については、オンラインドキュメントを参照のこと。

 NVTの更新を済ませたら、「openvasd -D」コマンドでサーバを起動する。これで、いつでもクライアントからテストを実行することができる。

テストの実行

openvas1_thm.png
OpenVASクライアント

 OpenVASクライアントを実行するには、大文字と小文字の違いに注意して「OpenVAS-Client」と実行すればよい (openSUSEの場合は、メインメニューの「Utilities」→「Security」から実行できるが、メニューの内容は、ディストリビューションによって異なる)。OpenVASのメインウィンドウは2つの領域に分かれており、左側のツリーリストにはタスク、スコープ、レポートといった項目が表示され、右側のいくつかのタブではスキャンの設定が行える。クライアントを初めて実行したときには、「Global Settings」という、デフォルトの設定を保持しているエントリだけが左側の領域に表示される。なお、設定パラメータは、サーバに接続しなければ変更できない。

 スキャンを実行するには、タスクを定義する必要がある。ツールバーの「New Task」アイコンをクリックし、適切なタスク名(「Check Main Server」など)を付け、詳しい説明を右側の「Comments」タブで入力する。

 続いて、スコープを追加する。少しわかりにくいが、スコープとは、タスクの設定全体を指す用語である。スコープを追加するには、メインメニューから「Scope」→「New」を選択する。先ほどのタスクに下に空のスコープが現れ、タスク名の隣に“unconnected”(未接続)というアイコンが表示される。ツールバーの“connect”(接続)アイコンをクリックし、接続先のサーバを指定して、ログイン名とパスワードを入力する。すると、(少なくとも初回は)サーバの証明書に関するダイアログがいくつか表示され、そのサーバから利用可能なすべてのNVTの情報がダウンロードされる。

 タスクとスコープを定義したあとに早速、標準のチェックを行う場合は、ツールバーの「Execute」をクリックすれば、OpenVASによってすべてのテストが実行される。テストの実行が完了すると、テスト結果の詳細が記されたレポートエントリがスコープの下に作成される。見つかった問題のそれぞれには、CVE(Common Vulnerabilities and Exposures)識別番号(例:CVE-2008-1238)が付いていて、その詳細はCVEサイトまたは米国標準技術局の脆弱性データベース(National Vulnerability Database)で参照できる。レポートには、見つかった脆弱性に関する具体的なリンクや想定される解決策、リスクレベルの評価値(低、中、高)も含まれる。

 オプションについては、スコープを選択すると、画面の右側で次のような項目を選択できる。

  • “攻撃”対象のホスト
  • チェックを行うポート。コンマ区切りのリスト(例:「25,80,1000-1023」)としてポートの範囲を指定できるほか、チェックを行わない「-1」やデフォルト(グローバル設定の定義どおり)も指定できる
  • 同時にテストを実行するホスト数およびチェック項目数。ホストおよびチェックごとにプロセスが生成される
  • セーフチェックの有効/無効。セーフチェックが有効になっていると、OpenVASはサービスを無効にするようなチェックを行わない。このオプションが無効になっていると、OpenVASによってサービスが無効化されるおそれがある
  • 実行するプラグインと各プラグインのオプション(ただし、オプションを持つものは少ない)。プラグインはグループ化されており、安全でない可能性のあるチェックにはアイコンが表示される

 OpenVASでは、HTML(グラフ入り)、LaTeX、PDF(非フリーのHTMLが必要)の各形式でレポートを生成することもできる。

 利用できるテストはNessusのほうが多いが、OpenVAS独自のフィードも積極的に更新が行われているようだ。Nessusのようなコストのかかるクローズドソースのプログラムを選ぶのなら、その前にOpenVASを試してみても損はないだろう。

Federico Kerekiはウルグアイ在住のシステムエンジニア。20年以上にわたり、システムの開発、コンサルティング活動、大学での教育指導を続けている。

Linux.com 原文(2008年10月09日)