対象試験と出題頻度
詳細をクリックして確認
ITパスポート
情報セキュリティマネジメント
基本情報技術者
応用情報技術者
★★★★☆
ランクA(重要)
用語の定義
ディレクトリトラバーサルとは、一言で言うと「パス名に特殊な文字列を入れて、本来アクセスできないはずのファイルやフォルダに不正にアクセスする攻撃」のことです。
イメージとしては、「図書館で『棚A-3の本を見せてください』と頼むところを、『棚A-3の隣の隣の…館長室の金庫の中身を見せてください』と指定して、立入禁止エリアに入り込む」ようなものです。
「親ディレクトリに戻る」という相対パス指定を悪用し、公開されていないサーバー上の機密ファイルを読み取られてしまう危険な攻撃です。
解説
ディレクトリトラバーサル(Directory Traversal)は、「パストラバーサル(Path Traversal)」とも呼ばれるWebアプリケーションの脆弱性を悪用した攻撃です。Webアプリケーションがファイル名をパラメータとして受け取る際、入力値の検証が不十分だと、攻撃者は「ドット・ドット・スラッシュ」(Unix/Linux系)や「ドット・ドット・バックスラッシュ」(Windows系)といった相対パス指定を使って、意図しないディレクトリにアクセスできてしまいます。
- 攻撃の仕組み:例えば「download.php?file=report.pdf」というURLがあった場合、攻撃者がfileパラメータに親ディレクトリへの移動を繰り返す文字列を指定すると、本来公開していないシステムファイルにアクセスされる可能性があります。
- 狙われるファイル:Linuxではユーザー情報ファイルやパスワードハッシュファイル、Windowsではシステム設定ファイルなどが標的になります。またはアプリケーションの設定ファイル(データベース接続情報など)も狙われます。
ディレクトリトラバーサル攻撃が成功すると、サーバーの設定ファイル、ソースコード、データベース接続情報、ユーザーの個人情報など、機密性の高いファイルが漏えいする恐れがあります。これらの情報は、さらなる攻撃(SQLインジェクション、不正ログインなど)の足がかりとしても悪用されます。
具体的な活用例・対策
ディレクトリトラバーサル対策は、入力値の検証とアクセス制御の両面から行う必要があります。
- 入力値の検証(バリデーション): ファイル名として受け取る入力値に、親ディレクトリへ移動する文字列やそのURLエンコード表現などの危険な文字列が含まれていないかチェックし、含まれていれば拒否します。
- ファイル名の正規化: 入力されたパスを正規化(絶対パスに変換)した上で、許可されたディレクトリ内かどうかを検証します。
- ホワイトリスト方式: アクセス可能なファイルをあらかじめリスト化し、リストに含まれるファイルのみアクセスを許可します。最も安全な方法です。
- chroot環境の利用: Webアプリケーションが参照できるディレクトリを制限し、仮にパス操作されても上位ディレクトリにアクセスできないようにします。
- 最小権限の原則: Webサーバーの実行ユーザーに必要最小限のファイルアクセス権限のみを付与し、被害を最小化します。
試験ではこう出る!
ITパスポート、情報セキュリティマネジメント、基本情報技術者、応用情報技術者で頻出です。以下のキーワードとセットで覚えましょう。
【重要キーワード】
- パストラバーサル(別名)
- 相対パス(親ディレクトリ移動)の悪用
- 入力値検証(バリデーション)
- システムファイルへの不正アクセス
- ホワイトリスト方式
試験問題で「パラメータに親ディレクトリへ移動する文字列を含めることで、公開を意図していないファイルにアクセスする攻撃」や「相対パスを使って上位ディレクトリのファイルを不正に取得する攻撃」といった記述があれば、それは「ディレクトリトラバーサル」に関する記述です。
【確認テスト】理解度チェック
ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。
Q. ディレクトリトラバーサルに関する説明として、最も適切なものはどれでしょうか?
- A. Webアプリの入力欄に不正なSQL文を挿入し、データベースを不正に操作する攻撃
- B. パラメータに親ディレクトリへ移動する相対パスを含めて、本来アクセスできないファイルを不正に取得する攻撃
- C. 大量のリクエストを送りつけてサーバーを過負荷状態にし、サービスを停止させる攻撃
正解と解説を見る
正解:B
解説:
ディレクトリトラバーサル(パストラバーサル)は、Webアプリケーションのファイル参照機能において、親ディレクトリへ移動する相対パス指定を悪用し、本来アクセスを許可していないディレクトリやファイルに不正にアクセスする攻撃です。対策としては入力値の検証やホワイトリスト方式の採用が有効です。
選択肢Aは「SQLインジェクション」の説明です。選択肢Cは「DoS攻撃/DDoS攻撃」の説明であり、いずれもディレクトリトラバーサルとは異なる攻撃手法です。