公開日:2007年6月28日
独立行政法人情報処理推進機構
セキュリティセンター
本ページの情報は2007年6月時点のものです。
記載の資料は資料公開当時のもので、現在は公開されていないものも含みます。
保護されるべき、Webサーバコンピュータ上の重要なファイルの内容が、何らかのミスによってインターネットから容易に読み出せるようになっているのがファイル流出問題である。
ファイル流出はふたつのタイプに分かれる。「Webサーバソフトウェアからのファイル流出」と「Webアプリケーションプログラムからのファイル流出」である。ここでは後者について述べる。
Webアプリケーションプログラムからのファイル流出は、ファイル名をパラメータとして受け取って、その内容を表示するWebプログラムに不備があることから起こる。工夫した値のファイル名パラメータを与えることによって、インターネット上の人物が誰でもサーバコンピュータ内の任意のファイルを読み出せる問題である。
Webアプリケーションプログラムからのファイル流出はさらに、次のふたつのバリエーションに分かれる。
カレントディレクトリ内のファイルをオープンすることを想定し、ディレクトリ修飾を付けることなくファイル名のみを用いてファイルをオープンしようとするプログラムは、実はフルパス名を与えられると、そのパス名が表すファイル内容を流出させてしまう。例えば、次のPerlスクリプト、
open(HANDLE, "<$filename");
の$filenameに「/etc/passwd」等のパス名が与えられて、ファイル流出が起こる。
ディレクトリトラバーサル攻撃というのは、「../」等の親ディレクトリを示す表記をファイル名パラメータの中に混入し、サーバ内の任意のファイルを読み出そうとする攻撃である。
ファイルをオープンする際、与えられたファイル名の先頭にディレクトリ修飾を追加してパス名を組み立てている場合でも、ユーザから与えられたファイル名の中に「../」あるいは「..\」の親ディレクトリを示すパターンが含まれていると、予定外のファイル内容が流出する。例えば、次のPerlスクリプト、
dir = "/var/data1";
open(HANDLE, "<$dir/$filename");
の $filenameに「../../etc/passwd」等のパス名が与えられて、ファイル流出が起こる。
ファイル名をパラメータとして受け取るプログラムは要注意プログラムである。そのようなプログラムをWebサイトに置くことを決めた場合は、経験豊かな技術者を割り当てて、慎重に設計・実装する。
それと並行して、事前に計画されていない、プログラマ自己裁量によるファイル名パラメータの新たな設置を禁止し、違反を警戒する。
ファイル名をパラメータとして受け取るプログラムは、次の入力検査を行う。