Webサーバに対するペネトレーションテスト(前編)
0
会員になると、いいね!でマイページに保存できます。
情報漏えいの防止、内部統制をはじめ、昨今の情報システム部門に求められるセキュリティの課題は非常に多い。いかにセキュアなシステムを構築しているつもりであっても、思わぬところに落とし穴があればすべてが水泡に帰す。本特集では、守る側ではなく攻める側に立って自身のシステムをチェックする「ペネトレーションテスト(疑似侵入テスト)」のノウハウをご紹介するとともに、多角的なセキュリティに対する考え方を持つ必要性を説く。第4回はWebサーバに対するペネトレーションテストについてご紹介する。
※弊社および筆者はこの記事によって引き起こされた損害賠償責任、刑事責任、一切の責任を負いません。調査を実施する場合は、調査が許可されたテスト環境に対してのみ行ってください。場合によっては「不正アクセス禁止法」などに抵触することもあるので自己責任の上で十分に注意して実施してください。
Webサーバのセキュリティチェックを行う理由
前回までは、ペネトレーションテストの概要が説明された。しかし、昨今企業のセキュリティレベルの向上により、インターネットから接続できるポートは80番ポートか443番ポートしかないのが現状である。理由は簡単で、ほとんどのサーバにおいてファイアウォール(F/W)が設置されており、80番ポート(http)か443番ポート(https)しか開いていないからである。
しかし、悪意を持った攻撃者はこういった現状に対しても新たなる攻撃を行う。それが近頃多いセッション層以上での攻撃である。誌面の都合もあり、本稿では特にこれらのポートを対象にしたペネトレーションテストに絞ってチェック方法をご紹介しよう。
Webサーバのセキュリティには2段階あると考えられる。すなわち、Webサーバ自身のセキュリティとWebサーバの上で動作するWebアプリケーションのセキュリティだ。(
図1)。
図1 Webサーバにおけるセキュリティ |
|
ここではまず前者、6つの基本的なWebサーバ自身のセキュリティチェック項目について、実際に外部からWebサーバに対する情報収集を行い(調査)、その情報を基にどのような脆弱性があるのか、またその脆弱性に対する攻撃が行われるとどのような結果が発生するのか(攻撃)、さらに、それぞれの脆弱性に対する対策(対策)の3点に分けてそれぞれご紹介する。
調査に使用するツールを準備する
それではさっそく、Webサーバ調査の準備に取りかかろう。今回、Webサーバの調査に使用するツールは「
Netcat」だ。これは生のプロトコルをやり取りするためのツールである。単純に生のプロトコルをやりとりするだけであればTelnetでも行うことができるが、NetcatにはTelnetにはないさまざまな機能が存在する。まず、Netcatは、汎用のTCP/UDP接続ツールで接続先のIPアドレスとポート番号を指定することで、相手のサービスと接続できる。これはWebブラウザやOutlookなどといった既製のツールを介さずに多様な操作が可能であることを意味する。
そのほかUDP通信やリッスンモードなども備えており、セキュリティ技術者必携のツールとなっている。Windows版/UNIX版ともに存在するが、動作するオプションが微妙に異なる。調査を行うクライアントのOSはどちらでも構わないが、今後のことを考えると汎用性の高いUNIX版を使用した方が良いと言える。
1.OSとWebサーバの種類およびバージョン
まずはもっとも基本的な情報から調査を行っていこう。Webサーバにおける基本的な情報とは、Webサーバが使用しているOSとWebアプリケーションのプログラムとして何が使われているのかといったことである。
・調査
調査はコマンドラインから行うため、調査クライアントにWindowsを使用している場合はコマンドプロンプトを、Linuxなどを使用している場合は仮想端末などのコンソールを使用する。
コマンドを入力できる状態になったら、以下のコマンドを入力する。<ポート番号>はWebサーバが動作している番号を指定する。通常は、80を指定する。
nc <調査対象サーバIPアドレス> <ポート番号>
エラーが出力されずにコマンドが実行できただろうか。このコマンドを入力してもWebサーバの接続が行われただけで、何のメッセージも出力しないことに注意してほしい。
接続ができたら、以下のリクエストを入力する([Enter]の部分はEnterキーを入力する)。
HEAD / HTTP/1.0[Enter]
[Enter]
Webサーバでリクエストが実行されると、多少の差異はあるだろうが、
実行例1や、
実行例2のような結果が画面に出力されるはずだ。出力された結果を詳しく見てみよう。
実行例1 IIS5.0へのHEADメソッド
cova@cova-desktop:~$ nc 192.168.1.51 80
HEAD / HTTP/1.0
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Sun, 21 Oct 2007 09:15:35 GMT
Connection: Keep-Alive
Content-Length: 1230
Content-Type: text/html
Set-Cookie: ASPSESSIONIDGGGQGLXK=KFEFMPFBILNDEGPDCKFFKDLF; path=/
Cache-control: private
実行例2 ApacheへのHEADメソッド
cova@cova-desktop:~$ nc 192.168.1.53 80
HEAD / HTTP/1.0
HTTP/1.1 200 OK
Date: Sun, 21 Oct 2007 05:36:25 GMT
Server: Apache/2.2.4 (Ubuntu) PHP/5.2.3-1ubuntu6
Connection: close
Content-Type: text/html
まず、
実行例1を確認するとサーバからの応答の1行目に「HTTP/1.1 200 OK」とある。これは、Webサーバが入力されたリクエストを正常に完了できたことを表す。
次に注目するのは2行目のServerヘッダの行である。「Server: Microsoft-IIS/5.0」と表示されている。これは、どのような種類のWebサーバが動作しているのかを表している。この場合は、文字列の内容からIIS 5.0が動作していることがわかる。あわせて、使用しているOSがWindows 2000 Server、もしくはWindows 2000 Professionalであることがわかる。これは、IISがWindows以外のプラットフォームで動作しないことに加えて、IISのバージョンとWindowsのバージョンの組み合わせが固定されているためである。
もし、仮にマイクロソフトがLinux用のIISを開発したり、IISのバージョンとWindowsのバージョンの組み合わせを自由に変更できるようになった場合はこのような断定はできないが、今のところ、OSはWindows 2000 ServerかProfessionalのいずれかとなる。
では、次に
実行例2の内容を確認しよう。ここでも注目するのはServerヘッダの行である。こちらでは、「Server: Apache/2.2.4 (Ubuntu) PHP/5.2.3-1ubuntu6」と表示されている。こちらは文字列の内容からWebサーバとして、Apache 2.2.4が使用されており、(Ubutu)という文字列からOSとしてLinuxディストリビューションの1つであるUbuntuが使用されていることがわかる。また、PHPがWebサーバの拡張として組み込まれていることもわかる。
これらは一例であるが、このようにしてWebサーバの種類およびバージョンを確認するのである。このバナー情報からだけでなくパケットレスポンスやヘッダ行の出力順番などによっても確認を行う方法があるが、ここでは、基本的な確認方法を紹介するだけにとどめさせていただく。
・攻撃
上記のようにOSおよびWebサーバの種類とバージョンを調査した結果から、該当のバージョンに既知の脆弱性が存在するかセキュリティ情報提供サイトで調べることができる。また、それらを攻撃するためのツールを入手することも可能な場合がある。
関連タグ