前回は,ファイアウオール製品を例に挙げて,デフォルト設定の危険性を述べた。今回のコラムでは,代表的なWebサーバー・ソフトの1つである「Apache」のデフォルト設定について考えてみたい。Apache はデフォルト設定のままだと,ディレクトリ内のコンテンツ一覧を意図せずに表示してしまう恐れがある。「デフォルト無効の原則」に従い,その機能を無効にして,情報の漏えいを未然に防ごう。

モジュール構造を持つ Apache

 言うまでもなく,Apache は非常に多くのサイトで使用されている オープンソースのWeb サーバー・ソフトウエアである。これを伝える資料の1つが,米Netcraft による調査結果である。このページのグラフからも,その使用率の高さがお分かりになるだろう。

 Apache は機能拡張を容易にするために,「モジュール構造」になっている。中心となるプログラム(「コアプログラム」と呼ぶ)に,「モジュール」と呼ばれる小さなプログラムを組み込むことで,さまざまな機能を実現するできる仕組みである。世界中の開発者によりさまざまなモジュールが公開されており,ユーザーは自由にそれらを組みこんで,機能拡張を図れる。また,コアプログラムとモジュールの API (Application Program Interface) も公開されているので,容易にモジュールを開発できる。

 余談ではあるが,モジュール構造の仕組みは“進化”している。従来,これらのモジュールは Apache のコンパイル時に組み込んでいたが,Apache 1.3 以降では DSO(Dynamic Shared Object)と呼ばれる機構を正式にサポートし,動的にモジュールを組み込めるようにした。これにより,再コンパイルすることなくモジュールを組み込めるようになった。またこの機構により,モジュールはその機能が必要な場合にだけメモリー上に読み込まれるので,サーバー・ソフト全体で必要とするメモリーが少なくて済むという利点もある。

 さて,いくつかのモジュールはデフォルトで組み込まれる。例えば,ログ・モジュールが挙げられる。このモジュールを組み込むことでコンテンツごと,および時間帯ごとのアクセス状況を把握でき,もし攻撃された場合には,攻撃手法や攻撃元などを解析できる。こういうモジュールは,運用上非常に有用なのでぜひ組み込んでおきたい。しかし,デフォルトで組み込まれてしまうものの実は組み込みたくない,というモジュールもある。その1つが次に説明する「Autoindexモジュール」である。

ファイル一覧を表示する Autoindex モジュール

 例えば,ユーザーがブラウザに 「http://itpro.nikkeibp.co.jp/」と入力し,Apache が稼働するWebサーバーへ送信したとする。このように最後がスラッシュ("/")で終わるようなリクエスト,つまりディレクトリへのリクエストを Apacheが受け取ると,そのディレクトリに置かれたインデックス・ファイル(通常は「index.html」)へのリクエストと解釈し,ユーザーにインデックス・ファイルを送信する。これらを行っているのが,「ディレクトリ・モジュール」である。

 ディレクトリ・モジュールは,インデックス・ファイルとして設定されているファイルを,リクエストとして受け取ったディレクトリから検索し,それを表示させることができるのだ。

 もし,インデックス・ファイルが発見できなかった場合にはどうなるか。その場合には,ディレクトリ・モジュールは何もしない。その代わり,「Autoindex モジュール」が実行される。

 Autoindex モジュールは,インデックス・ファイルが見つからない場合に,そのディレクトリのコンテンツ一覧を表示するプログラムである。一見便利に見えるこの機能だが,実はこれが大きな問題になる場合がある。

 問題になるのは,重要な情報を含むファイルが,通常は外部からは見えないもののアクセス可能な場所(Webルート・ディレクトリ以下)に置かれている場合である。コンテンツ一覧を表示させればファイル名が分かるので,直接URLを指定しての閲覧が可能となってしまう。

 アクセス可能な場所に置かれている可能性がある重要なファイルとしては,例えばCGIスクリプトなどが利用する設定ファイルが挙げられる。また,万が一,うかつにも顧客情報ファイルなどを置いておいた場合には,致命的な結果を招くことになる。

インデックス・ファイルを置いても表示する恐れ

 このようなことを避けるために,すべてのディレクトリに「index.html」などのインデックス・ファイルを置いているサイト管理者も多いだろう。しかし,これは対症療法に過ぎない。インデックス・ファイルを置き忘れたら,そのディレクトリは“丸見え”である。さらに,インデックス・ファイルがあっても,一覧を表示してしまう脆弱性が過去に見つかっている。

 例えば,2001年3月1日にリリースされた Apache 1.3.19 のリリース・ノートには,非常に多数のスラッシュを含む URL をリクエストとして受け取った場合,ディレクトリ一覧を表示してしまうという問題をこのバージョンで修正した,という表記があった。すなわち,そのような問題がこのバージョン以前にはあったということだ。

 また,最近見つかった問題は次のような状況下で発生した。仮想ホスト機能を有効にして複数サイトを1つの Apache でまかなっていた。そして,そのうち2つのサイトは,同じディレクトリを Web ルートディレクトリとしていた。さらに,一方のサイトでは index.html をインデックス・ファイルと設定し,別のサイトでは異なったファイルをインデックス・ファイルとして設定していた。このような状況で,あるリクエストを送信したところ,ファイルの一覧が表示されてしまったという。詳細については,発見者のサイトを参照してほしい。

 以上のように,インデックス・ファイルを置いても,一覧を表示してしまう恐れはある。この問題を根本から回避するためには「デフォルト無効の原則」に従って,Autoindex モジュールを無効にしなければならないのだ。

 もちろん,アクセス可能な場所に,見られたくないコンテンツを置かないことも重要である。しかし,置く必要がある場合もあるだろう。また,重要なコンテンツを置いていないという自信があっても,万全を期するためには Autoindex モジュールを無効するというのが,最も確実な対策だ。

◇     ◇     ◇     ◇     ◇     ◇

 Autoindex モジュール以外にも,情報漏えいに関する注意点はいくつかある。例えば,エディタが作成するバックアップ・ファイルが挙げられる。CGI スクリプトなどの修正を行った際に,エディタが自動的に元のファイルのバックアップを,外部からアクセス可能なディレクトリに作成してしまうのだ。

 エディタのバックアップ・ファイル命名法には規則性があるので,バックアップ・ファイル名を簡単に推測できる。そのため,外部から直接アクセスされて閲覧される可能性がある。

 例えばそれがCGIスクリプトのバックアップ・ファイルであった場合,ソースコードが閲覧できてしまうため,スクリプトの脆弱性を発見される恐れがある。さらに,管理用のパスワードがハード・コーディングされているような場合は極めて危険である。

 したがって,必要でないファイルは Web ルートディレクトリ以下に置かないという心がけをサイト管理者は常に持っていなければならない。その上で,Autoindex モジュールなどの機能を無効にして万全を期するようにしたい。


新井悠 (ARAI Yuu)
株式会社ラック コンピュータセキュリティ研究所
y.arai@lac.co.jp


 IT Proセキュリティ・サイトが提供する「今週のSecurity Check [一般編]」は,その週に起きたUNIX関連およびセキュリティ全般のニュースや動向をまとめた週刊コラムです。セキュリティ・ベンダーである「株式会社ラック」のスタッフの方を執筆陣に迎え,専門家の立場から解説していただきます。