FE EXAM

ディレクトリトラバーサル(パス改ざん攻撃)

パス指定を悪用して公開対象外のファイルに不正アクセスする攻撃。

INTERACTIVE VISUALIZATION
公開フォルダ
機密ファイル
対策
フェーズ
idle
入力検証
なし
機密ファイル
保護中
シナリオ
ステップ1 / 5
STEP 1/5正常なファイル要求Webサーバは「公開フォルダ(www/public)」の中のファイルだけを利用者に見せる約束になっています。利用者が画像やページを要求すると、サーバは公開フォルダを起点にファイルを探します。ディレクトリ(=フォルダ)の階層を上から下へたどるイメージです。
要求パス:public/index.htmlvar/www/ (公開フォルダ)public/index.htmletc/ (非公開・システム設定)passwd ← 機密ファイル到達先: /var/www/public/index.html
パス解決のしくみ
起点: /var/www/public/ (公開フォルダ)
入力: ../../../etc/passwd
解決: public → www → var → / → etc/passwd
結果: /etc/passwd を読み取り(公開フォルダ外)
対策: ../ を検出して拒否 / 公開フォルダ外を遮断
解説

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

public/(公開)../ で上へetc/passwd(機密)

ディレクトリトラバーサルとは、ファイルの パス(=置き場所を表す住所のような文字列)の指定を悪用して、本来は公開していないディレクトリ(=フォルダ)の中のファイルに不正アクセスする攻撃です。「トラバーサル」は英語で「横断・たどること」を意味します。

身近な例で考えると、図書館で「閲覧コーナーの本」しか借りられないはずなのに、棚の裏を通って書庫の機密資料を持ち出すようなものです。本来たどってよい通路(公開フォルダ)から、こっそり立入禁止区域(機密フォルダ)へ抜け出してしまいます。

上のツールで▶ボタンを押すと、攻撃者が ../ を使って公開フォルダの外へさかのぼり、機密ファイルを読み取る流れと、入力検証で攻撃が止まる様子を確認できます。

⚙️
攻撃の仕組み

鍵になるのは ../(ドット2つ+スラッシュ)という記号です。これは相対パスで「ひとつ上のフォルダへ戻る」という意味を持ちます。たとえば public/img/a.png にいるとき ../ を付けると img の親である public に戻ります。

攻撃は次の順で進みます。
① 注入:ファイル名のかわりに ../../../etc/passwd のようなパスを送る
② 解決:脆弱なサーバが ../ をそのまま解釈し、public → www → var とフォルダをさかのぼる
③ 脱出:公開フォルダの外(システム設定フォルダ)まで到達してしまう
④ 漏えい:利用者一覧・設定ファイル・ソースコードなど機密情報が読み取られる

原因は 「上に戻る」操作に制限がないことです。利用者の入力をそのままファイルの場所として使ってしまうため、本来たどってよい範囲を超えてしまいます。上のツールのresolveステップで、フォルダを次々とさかのぼる様子を見てください。

🛡️
対策(入力検証)

../../../etc検証拒否../ を見つけたらアクセスを拒否

根本的な対策は入力値検証です。利用者から受け取ったパスを、ファイルの場所として使う前にチェックします。基本の考え方は「公開フォルダより上には絶対に出さない」ことです。

具体的には次の対策を組み合わせます。
../ の検出:パスに ../ が含まれていたら拒否する
絶対パスへの変換:実際にアクセスする場所を求め、公開フォルダの内側か確認する
ホワイトリスト方式:あらかじめ許可したファイル名だけを受け付ける
権限設定:Webサーバが公開フォルダの外を読めないようにアクセス権を制限する

これらを徹底すれば、たとえ ../ を送られても 公開フォルダの外には到達できず、機密ファイルは守られます。立入禁止の扉に必ず鍵をかけておくイメージです。上のツールの最終ステップで、検証によって攻撃が拒否される様子を確認してください。

📌
../ の仕組みと相対パス

/var/www/public/ ← 公開フォルダ(ここから使えるはず)../../../../ → /var/ に到達。さらに ../etc/passwd へ

コンピュータのファイルは「フォルダの中にフォルダ」という階層構造(ツリー構造)で管理されています。ファイルの場所を表す文字列をパス(path=道筋)と言い、../ は「ひとつ上のフォルダへ戻る」という特別な意味を持つ相対パス記号です。

パスには2種類あります。
絶対パス:ルート(=最上位のフォルダ)から書いたフルの住所。例:/var/www/public/top.html
相対パス:今いる場所を基点に書いた住所。../ で「ひとつ上へ」、../../ で「ふたつ上へ」と移動できる

なぜ攻撃に使えるのか。Webサーバは本来、公開フォルダ(/var/www/public/)の中だけを外部に見せる設計です。しかし ../ を重ねると階層を「上へ上へ」とさかのぼれるため、公開フォルダの外にあるファイル(設定ファイル・パスワードが入ったファイルなど)へもアクセスできてしまいます。マンションの自分の部屋から廊下に出て、鍵がかかっていない別の部屋に入れてしまうイメージです。

📌
Webアプリのファイル構造

サーバのファイルシステム全体public/(公開)html, css, imgWebで見せてよいもの非公開(外から禁止)設定ファイル, DB情報パスワード一覧 等本来はここに壁

Webサーバのファイルは大きく2つの領域に分かれています。
公開フォルダ:ブラウザから誰でも取得できるHTMLやCSSが入った領域
非公開領域:データベースの接続情報(=どのサーバに誰の名前でつなぐかの情報)、設定ファイル、パスワードが入った領域。外部に出ると重大な問題になる

なぜこの境界が大切なのか。Webサーバは「公開フォルダに入ったファイルの取得要求」だけを処理するよう設計されています。ところが入力値を検証しないと、../ を使って非公開領域まで到達できてしまいます。これがディレクトリトラバーサルです。

身近な例で考えると、ショーウィンドウ(公開フォルダ)に展示してあるものは誰でも見られますが、バックヤード(非公開)は関係者以外立入禁止です。バックヤードへの扉に鍵をかけておくこと(入力検証・アクセス権設定)が、トラバーサル攻撃を防ぐための基本です。上のツールのdefenseステップで、入力検証が壁として機能する様子を確認してください。

練習問題

🎯
基本情報技術者 練習問題

Q1.ディレクトリトラバーサルの説明として最も適切なものはどれか。
A.パス指定を悪用し、公開対象外のファイルに不正アクセスする攻撃
B.Webページにスクリプトを埋め込んで実行させる攻撃
C.大量のリクエストでサーバを停止させる攻撃
D.通信を傍受して内容を盗み見る攻撃
Q2.ディレクトリトラバーサルでよく使われる文字列「../」の意味として正しいものはどれか。
A.カレントディレクトリ(現在のフォルダ)を表す
B.ひとつ上の階層のディレクトリへ移動することを表す
C.ファイルを削除することを表す
D.通信を暗号化することを表す
Q3.ディレクトリトラバーサルへの対策として最も適切なものはどれか。
A.パスワードを定期的に変更する
B.入力されたパスに ../ が含まれないか検証し、公開フォルダ外へのアクセスを拒否する
C.SQL文をプリペアドステートメントで実行する
D.通信ポートを増やす

関連コンテンツ