【でぃれくとりとらばーさる】

ディレクトリトラバーサル とは?

💡 「../」でディレクトリを遡って秘密のファイルを覗き見る攻撃
📌 このページのポイント
ディレクトリトラバーサル攻撃 サーバーのディレクトリ構造 / (ルート) ├─ etc/ └─ passwd ⚠️ └─ var/ └─ www/ Webルート(公開領域) ├─ index.html └─ images/photo.jpg ✓ 正常なリクエスト /images/photo.jpg ✗ 攻撃リクエスト /images/../../../etc/passwd ../ でWebルートの外に脱出 パスの解決: /var/www/images/../../../etc/passwd → /etc/passwd(機密ファイル) 対策: 入力値の正規化・パスのバリデーション・chroot・WAF
ディレクトリトラバーサル攻撃
ひよこ ひよこ

ディレクトリトラバーサルってどういう攻撃?

ペンギン先生 ペンギン先生

たとえばWebアプリに「/download?file=report.pdf」というURLがあるとする。ここで「file=../../../etc/passwd」と書き換えると、サーバの重要ファイルにアクセスできてしまうかもしれない。「../」でディレクトリを遡って、本来アクセスできないファイルを読むんだ。

ひよこ ひよこ

どんなファイルが狙われるの?

ペンギン先生 ペンギン先生

Linuxなら/etc/passwd(ユーザー情報)、/etc/shadow(パスワードハッシュ)、アプリケーションの設定ファイル(データベースの接続情報など)、ソースコードなどが狙われるよ。Windowsだとwin.iniやboot.iniなども対象だね。

ひよこ ひよこ

どうやって防ぐの?

ペンギン先生 ペンギン先生

基本は入力値の検証だよ。「../」や「..\\」を含むパスを拒否する、ファイル名だけを受け取ってディレクトリ部分は固定する、パスを正規化してからチェックする、といった方法がある。多くのWebフレームワークには組み込みの対策があるから、それを活用するのが安全だね。

ひよこ ひよこ

URLエンコードで「../」を隠されたらどうなるの?

ペンギン先生 ペンギン先生

いい質問だね。「../」を「%2e%2e%2f」や「..%252f」のように二重エンコードして検知を回避しようとする手法もあるんだ。だから入力値のデコード処理を適切に行ってからチェックする必要がある。ホワイトリスト方式で許可するファイル名だけを指定するのが最も確実な対策だよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ディレクトリトラバーサル」って出てきたら「パスを遡ってアクセス制限外のファイルを読み取る攻撃だな」と思えればだいたいOK!
📖 おまけ:英語の意味
「Directory Traversal」 = ディレクトリの横断
💬 traverse(横断する)が語源。ディレクトリ構造を「横断」してアクセスするイメージだよ
← 用語集にもどる