TOP設計・移行・活用> ディレクトリリスティング
脆弱なWebアプリケーション
脆弱なWebアプリケーション

第2回:ファイル流出
著者:セントラル・コンピュータ・サービス  長谷川 武
2005/4/27
前のページ  1  2  3  4
ディレクトリリスティング

   直接ファイルの内容が漏れるのではないが、攻撃者がファイルを物色するのを助けてしまうWebサーバの機能がある。それは「ディレクトリリスティング」機能だ。この機能はもともと静的コンテンツを中心とした情報公開を行うWebサイトに便利なよう設けられたものである。URLでページの代わりに、下記のようにディレクトリを指定すると、そのディレクトリに含まれるファイルの一覧が表示される機能である。
http://domain/dir/

   各ファイル名はハイパーリンクになっていて、ユーザはそれを辿ることでディレクトリ階層のあちこちを動き回ることができる。

   静的コンテンツを中心としたサイトでは現在でも活用されているこの機能だが、Webアプリケーションを中心として構成されるサイトにとっては余分な情報を開示してしまう好ましくない存在だ。

   現在流通しているWebサーバソフトの多くでこのディレクトリリスティング機能のデフォルトが「オン」なので、サーバ環境を設営する担当者は要注意だ。


ソースコードの流出

   これまでは、秘密のファイルがインターネットに流出してしまう問題を見てきたが、データだけでなくWebアプリケーションプログラムのソースコードが流出する問題も起こりうる。

   ソースコードが流出するとなぜ具合が悪いかと言うと、そこにはデータベースに接続するアカウント情報、データベースのテーブル名やカラム名、入力データの検査ロジック、アクセス制御のロジックなどが書かれている場合があるからだ。これらが攻撃者の手に渡れば、プログラムの構造と弱点が解析され、実害をなす攻撃の手がかりを与えてしまうことになる。

   C言語によるCGIプログラムやJavaサーブレットなどの場合、ソースコードがいったんコンパイルされて実行可能ファイルの形(あるいはJavaバイトコードの形)でサーバに配置されて稼働するため、ソースコードの流出は起こりにくい。

   しかし、Perl、PHP、Active Server Pages(ASP)、JavaServer Pages(JSP)などのスクリプト言語では、ソースコードの流出に警戒する必要がある。明らかに避けなければならないのは次の2つのケースだ。

  • 本番Webサーバ上にバックアップファイルを残すこと
  • インクルードファイルに安易な拡張子を付けること
本番Webサーバ上のバックアップファイル

   重大な記載誤りの訂正など、コンテンツの修正に緊急を要する場合、本番Webサーバ上でスクリプトファイルを修正せざるを得ないことがある。その際、修正前の内容をバックアップファイルとしてその場に残しておいてはならない。

   例えば、program.phpというプログラムの修正前の内容をprogram.bakのようにリネームしてもとの場所に置いておくと、このバックアップファイルの内容はインターネットから丸見えになるのである。

   このようなことが起こる原因は、ファイルの拡張子を.phpから.bakに変えたところにある。Webサーバはあらかじめいくつもの拡張子(.html、.jpg、.gif、.phpなどなど)のレパートリーを持っていて、拡張子に応じてどのように処理するかを振り分けるしくみを持っている。

   ところが、すべての拡張子に処理が定義されているわけではなく、とくに「.bak」、「.old」、「.org」などは定義されていない部類に入る。こうしたファイルに出会うと、Webサーバはデフォルトの動作=「ファイルの内容をテキストとして開示する」を行ってしまうのである。

   攻撃者にとっては、program.phpというスクリプトの存在がわかるので、そこから類推してprogram.bak、program.old、program.php.orgなどを呼び出して、ファイルの内容が見えないか試してみるのは容易なことである。


インクルードファイルの拡張子

   これと同じ理由から、subroutine.incのようなインクルードファイルを通常のスクリプトと同じ場所に置いておくと、これもインターネットから内容が丸見えになってしまう。

   Webプログラミングの教科書には、しばしばインクルードファイルの拡張子として「.inc」を使う例が登場する。しかしこの拡張子は多くのWebサーバソフトで動作が定義されておらず、テキストファイルとして内容が開示される結果を招く。

   インクルードファイルの名前は通常であればユーザに知られることはないが、Webサーバが表示するエラーメッセージなどからその存在やパス名が暴露されることがある。いったんURLが知られてしまうと、そのファイルは攻撃者の手に落ちたも同然だ。

インクルードファイルの流出
図5:インクルードファイルの流出
(画像をクリックすると別ウィンドウに拡大図を表示します)



まとめ

   「ファイル流出」の問題は、重要なファイルのWebサーバ上の配置方法・保護方法・開示方法の誤りから起こる。特に恐ろしいのは「ディレクトリトラバーサル攻撃」を受け入れてしまうプログラムミスだ。ファイル流出はWebアプリケーションの脆弱性の中で最も基本的なものであり、もしWebサイトにこの問題があるのなら、最優先で対策が必要である。

   さて、次回の第3回は、5つの脆弱性カテゴリーの2番目「パラメータからの情報流出」を取り上げる。

前のページ  1  2  3  4


セントラル・コンピュータ・サービス株式会社
著者プロフィール
セントラル・コンピュータ・サービス株式会社  長谷川 武
シニア・セキュリティ・スペシャリスト、IPA 非常勤研究員。2002年にはIPA ISEC『セキュア・プログラミング講座』の制作ディレクターをつとめた。これを契機に、現在は勤務先とそのパートナー企業を通じてセキュアプログラミングセミナー/実習/スキル評価テストといった教育サービスを「TRUSNET(R)アカデミー」として提供している。問い合わせE-mail:info@trusnet.com


INDEX
第2回:ファイル流出
  はじめに
  非情報システム系からの発注に注意
  逆に情報を流出
ディレクトリリスティング