TOP設計・移行・活用> 逆に情報を流出
脆弱なWebアプリケーション
脆弱なWebアプリケーション

第2回:ファイル流出
著者:セントラル・コンピュータ・サービス  長谷川 武
2005/4/27
前のページ  1  2  3   4  次のページ
逆に情報を流出

   このように、ファイル名をパラメータとして取り、サーバコンピュータ内のファイルの内容をクライアントに送り出す形のプログラムは不可欠な存在である。ところが、プログラムミスによってこれらのプログラムがとんでもない情報流出を起こしてしまうことがある。

   問題が起こりがちなのは、アクセス制御にあまりうるさくない状況でこうしたファイル呼び出しプログラムが使われる場面である。例えば共通のプールから画像ファイルを取り出したり、エラーメッセージ表示画面を取り出してブラウザに送り出すプログラムがあぶない。

   例えば、ファイル名のパラメータとしてフルパス名を受け入れてしまうプログラムが案外存在する。以下のようにもともとファイル名だけを受け取る使われ方を想定していたプログラムがあるとする。

通常の使われ方
program.cgi?file=alpha.txt
program.cgi?file=bravo.txt
program.cgi?file=charlie.txt

   このプログラムが次のようなフルパス名のパラメータを受け取った場合にも、ファイルの取り出しに成功してしまうとしたら大きな問題だ。

攻撃例
program.cgi?file=/etc/passwd

   これだと、攻撃者にサーバコンピュータ内のあらゆるファイルを読み出されかねない。

公開していない奥深くのファイルが流出
図3:公開していない奥深くのファイルが流出



ディレクトリトラバーサル攻撃

   上記の攻撃例が成功するには、CGIプログラムの「カレントディレクトリ」上に読み出し対象ファイルが配置されているなど、やや特殊な条件が必要だ。通常、プログラムはファイル名パラメータを受け取ったら次のようにパス名を組み立ててからファイルを読み出すようになっていることが多く、その場合攻撃は成立しない。

  パラメータ   アクセスされるパス名  
正常例  file=alpha.txt  →  /usr/local/data/alpha.txt  通常のアクセス
正常例  file=bravo.txt  →  /usr/local/data/bravo.txt  通常のアクセス
攻撃例  file=/etc/passwd  →  /usr/local/data//etc/passwd  攻撃不成立

   ところが、次のようにすれば攻撃が成功する場合がある。

  パラメータ   アクセスされるパス名  
攻撃例  file=../../../etc/passwd  →  /usr/local/data/../../../etc/passwd(=/etc/passwd)  攻撃成立

   これは、現在位置からの親ディレクトリを相対的に示す「../」という表現(Windowsの場合は「..\」)がパス名の中に含まれるよう仕向けることで、ディレクトリパスを上位へ遡り、別のサブディレクトリの枝に飛び移っているものだ。この手口を「ディレクトリトラバーサル」または「パストラバーサル」と呼ぶ。

ディレクトリの枝をたどる
図4:ディレクトリの枝をたどる


前のページ  1  2  3   4  次のページ


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


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