|
|
前のページ 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。
|
|
|
|