本記事では「ディレクトリトラバーサル」分かりやすく説明していきます。
スポンサーリンク
目次
ディレクトリトラバーサルとは
ディレクトリトラバーサルとは、Webサイトからファイル名を直接指定するようなWebアプリケーションに対して、ファイル名を不正に書き換え、本来閲覧することができないファイルにアクセスする攻撃です。
例えば、以下のようなWebアプリケーションが存在するとします。
Webサーバには、以下の2つのファイルが存在。
- /home/work/sample.txt :公開しているファイル
- /home/pass/password.txt :機密情報で公開していないファイル
そしてURLに「https://〇〇.co.jp/?file=sample.txt」とファイル名を指定することで、Webサーバにある「sample.txt」ファイルの内容を閲覧することを可能とします。
ここで「悪意のある攻撃者」がURLを書き換えたらどうなるのでしょうか。
以下の図では、URLを「https://〇〇.co.jp/?file=../pass/password.txt」に書き換えています。
正常時はURLに「file=sample.txt」とsample.txtのファイルを指定していました。しかし今回は「file=../pass/password.txt」と相対パスでpassword.txtを指定しています。このように相対パスで指定することで意図しないファイル/home/pass/password.txtにアクセスしています。
結果「悪意のある攻撃者」は、Webサーバにある「password.txt」ファイルの内容を閲覧することに成功しています。
上記の例ではURLにファイル名が書かれているパターンですが、hidden パラメータでWebサーバ内のファイル名を指定している場合も同じです。パラメータを「改ざん」することで上記の例と同じ動作となります。
メモ
相対パスとは、現在の場所を基準に目的地を指定する手法です。
上記の例では現在の場所が「/home/work/」です。
「../pass/password.txt」と相対パスで書くことでpassword.txtに辿り着きます。
※「../」は1つ上の階層に戻るという意味
ディレクトリトラバーサル対策
スポンサーリンク
外部からのパラメータでWebサーバ内のファイル名を直接指定しない
外部からのパラメータでWebサーバ内のファイル名を直接指定している場合、パラメータを「改ざん」されると意図しないファイルにアクセスされる危険性があります。
基本的に外部からのパラメータでWebサーバ内のファイル名を直接指定するような実装は避けるべきです。
ファイルを公開するディレクトリは固定し、ファイル名にディレクトリを含まれないようにする
外部からのパラメータでWebサーバ内のファイル名を直接指定している場合、「絶対パス」や「相対パス」で指定されると意図しないファイルにアクセスされる危険性があります。
外部からパラメータはファイル名だけを取得(ディレクトリが含まれていたら取り除く)するようにして、公開しているディレクトリ以外にアクセスされないようにしましょう。
Webサーバ内のファイルには適切な権限をつける
ディレクトリトラバーサルで意図していないファイルにアクセスされたとしても、ファイルに適切な権限が付与されていれば、閲覧されることはありません。
Webサーバ内のディレクトリやファイルには適切な権限をつけることが大切です。