前回はIISのセキュリティ強化策として、「必要な役割サービスだけを追加すること」や「IISはドメイン コントローラにしないこと」を紹介した。しかし、IISにはもう少しセキュリティ強化につながりそうな話がある。ということで、今回も引き続き、IISのセキュリティ強化について説明しよう。

スクリプトやCGIの配置を集約・隠蔽する

サーバに限ったことではないが、保護するべき対象、注意を払うべき対象が分散していると、存在を失念して対策が行き届かなくなり、それが原因で攻撃者に隙を与える可能性がある。もっとも、対象を集約した結果として一網打尽になる危険性もあるので、集約したうえできちんと護りを固めることが前提になるのだが。

Webサーバの場合、静的なHTML文書ファイルや画像データと比較すると、スクリプト、CGI、ISAPI、ASP、ASP.NETなどのプログラムのほうが注意を払うべき存在と考えられる。そこで、この種のプログラムは配置を集約するとともに、仮想ディレクトリ機能を使うことで、Webサイト上のパスと実際のパスを一致させないようにすると、攻撃されにくくする効果につながるかもしれない。

例えば、「D:\aspnet」フォルダを作成してASP.NETのファイルを配置しておいて、そのフォルダを仮想ディレクトリ機能で[既定のWebサイト]以下にマッピングする。こうすると、Webサイトにアクセスする際のURLは「http://<ホスト名>/aspnet/<ASP.NETのファイル名>」となるが、パス名として「C:\Inetpub\wwwroot\aspnet」を決め打ちで指定しても、実際にはそういうフォルダは存在しない。つまりASP.NETのファイルを配置した場所を隠蔽できる。

また、この種のファイルを配置するフォルダにはプログラム実行の権限を与える必要があるので、そうしたフォルダを集約できれば、プログラムを実行できる場所を局限する効果につながる。

データベースの配置場所に注意

スクリプトだけでなく、データベースのファイルにも同じことが言える。Webアプリケーションがデータベースをバックエンドに配置して動作することはよくあるが、そのデータベースのファイルが「C:\Inetpub」以下に置かれているよりも、それとは別のフォルダツリー以下に置かれているほうが、IIS用コンテンツとの分離が進むので好ましいと考えられる。

さらにこの考えを進めると、データベースだけ別のサーバに分離してしまう方法も考えられるが、それはそれで費用がかかる。同じサーバでWebサーバとデータベースを同居させるのであれば、次善の策としてWebサーバ用のコンテンツとデータベース関連のファイルを分ける。すると、「C:\Inetpub\wwwroot」に攻撃者がアクセスできるような事態が発生しても、データベースにまで累が及ばないようにできるわけだ。

実際、WebサーバやFTPサーバのセキュリティホールを突かれてWebサーバの公開用フォルダに不正侵入を受けた時に、Webコンテンツ用フォルダの下にあるデータベースファイルまで盗み出された例がある。Webサーバの公開用ディレクトリとは別の場所にデータを置いておけば、少なくとも、Webサーバへの不正侵入すなわちデータベースへの被害ということにはならない。

不要なスクリプトマッピングの削除[W2K3]

IISにはスクリプトマッピングという考え方がある。これは、Webサーバで使用するファイルの拡張子に対して設定するもので、拡張子とDLLの関連付けを行うものだ。指定した拡張子を持つファイルを対象としてHTTPリクエストが発生すると、関連付けを行ったDLLを呼び出して実行する形になる。

もちろん、そうした処理が必要な種類のファイルに対してはスクリプトマッピングを行わなければならないが、スクリプトマッピングが不要な種類のファイル、あるいは使用していない種類のファイルを対象とするスクリプトマッピングの設定をそのまま維持していると、それが攻撃手段として悪用される可能性が考えられる。サーバ管理者は実行するつもりがないDLLファイルでも、マッピングした拡張子に対するHTTPリクエストによって勝手に呼び出されてしまうためだ。

そうした事態を防止するため、使用していない拡張子についてスクリプトマッピングの設定を削除することができる。削除する方が良いとされているスクリプトマッピングの一覧を以下に示す。ここに示したもの以外でも、自分が運用しているWebサーバで使用していないものなら削除して差し支えない。

削除できる機能 対応する拡張子
パスワードのリセット .htr
インターネット・データベース・コネクタ(IDC) .idc
SSI(Server Side Include) .stm, .shtm, .shtml
インターネット印刷 .printer
インデックス・サービス .htw, .ida, .idq

スクリプトマッピングを削除するには、以下の手順を使用する。

  1. IIS管理ツール左側のツリー画面で、(サーバ名)-Webサイト-既定のWebサイト(またはその他のWebサイト)を選択する。

  2. [操作]-[プロパティ]、あるいは右クリックして[プロパティ]を選択する。

  3. 続いて表示するダイアログで[ホームディレクトリ]タブに移動して、[アプリケーションの設定]グループの中にある[構成]をクリックする。

  4. 続いて表示するダイアログに、スクリプトマッピングの一覧を表示している。その拡張子とプログラムの対応付けのうち、不要なものを選択して[削除]をクリックする。

  5. 削除がすべて終了したら、順番に[OK]をクリックしてダイアログを閉じる。

不要なIIS関連ファイルの削除[W2K3]

これは「不要な機能を組み込まない」という考え方と関連する話だが、動作するサーバ機能だけでなく個別のファイルも不要のものは削除するということだ。

Windows Server 2003/2008であれば、初期状態ではIISを組み込んでおらず、必要なものだけを選んで追加できるので、あまり問題にならない。ところが、上書きアップグレードによるセットアップを行うと、その限りではない点に注意が必要だ。

これが問題になるのは、Windows 2000 Server(IIS 5.0が既定値で導入済みとなっている)からWindows Server 2003に上書きアップグレードした場合だろう。上書きアップグレードを行うと、アップグレード前のOSで使用していた各種機能や設定をそのまま引き継ぐからだ。

Windows 2000 Serverで、セキュリティ上の抜け穴につながる可能性があると指摘されたファイルの例としては、サンプルファイルやヘルプファイルなどが挙げられる。IISが動作するWindows 2000 ServerでファイルあるいはIIS関連機能の削除を行っておらず、そこにWindows Server 2003を上書きセットアップすれば、当然ながらファイルも機能もそのまま維持している。

そこで、そうしたケースで削除した方が良いとされているファイルには、以下のものがある。特に難しい作業ではなく、単にフォルダごと削除するだけでよい。特にサンプルファイルは要注意だろう。

●サンプルファイル→ C:\inetpub\iissamples
●ヘルプファイル : C:\winnt\help\iishelp