ディレクトリ・トラバーサル(Directory Traversal)とは、サーバー上で公開されていないファイルやディレクトリに不正アクセスする攻撃手法の一つです。「パストラバーサル」や「../(ドットドット)攻撃」とも呼ばれ、攻撃者がファイルパスの指定を悪用し、サーバー上のファイルシステムを横断してアクセス可能な範囲を超えた場所にある機密情報や設定ファイルなどにアクセスすることを目的としています。
例えば、「../../../etc/passwd」というような「../」の記号を繰り返して、ディレクトリを遡り、サーバーのルートディレクトリまで辿り着き、機密情報を含むファイルにアクセスするという手法が取られます。サーバー側のファイルアクセス制御やバリデーションが不十分な場合に、この攻撃は成功することがあります。
ディレクトリ・トラバーサルの仕組み
ディレクトリ・トラバーサルでは、攻撃者が特定のパターンでパスを改変し、サーバー上の任意のファイルにアクセスしようとします。一般的な流れは次の通りです。
- 相対パスを利用したディレクトリ移動
「../」の記号を使うことで、1つ上のディレクトリに移動することができます。攻撃者はこれを繰り返し使用して、サーバーのディレクトリ階層を遡り、ルートディレクトリ(例:/etc/)までアクセスできるように試みます。 - 目的ファイルのパス指定
例えば、「../../../etc/passwd」や「../../../conf/config.php」といったパス指定を用いて、機密性の高いファイル(認証情報や設定ファイル)を狙います。これにより、攻撃者はユーザー情報やシステム設定などの情報を不正に取得できる可能性があります。 - サーバーのレスポンス確認
攻撃者はこのようなパス指定を行い、サーバーのレスポンス(エラーメッセージや表示結果)から、ファイルが存在するかどうかやアクセス権限があるかを確認します。ファイルが取得できた場合、不正なアクセスに成功していることになります。
ディレクトリ・トラバーサルがもたらすリスク
1. 機密情報の漏洩
ディレクトリ・トラバーサルにより、サーバー上の重要ファイル(例:パスワード情報、設定ファイル、データベース接続情報など)にアクセスされると、システムの脆弱性が悪用され、機密情報が流出するリスクがあります。例えば、「/etc/passwd」ファイルを取得されると、ユーザーアカウントの情報が漏洩する可能性があります。
2. サーバーシステムの不正操作
攻撃者がサーバーの重要な設定ファイルにアクセスしたり、不正に改ざんすることで、サーバー全体に悪影響を及ぼすリスクがあります。設定ファイルを改ざんされると、攻撃者がサーバーを乗っ取ることも可能になるため、システムの安全性が著しく低下します。
3. 他の攻撃への足がかり
ディレクトリ・トラバーサルを成功させて取得した情報(認証情報、APIキー、環境変数など)は、さらなる攻撃(SQLインジェクション、リモートコード実行など)への足がかりとなる可能性があります。攻撃者は、サーバーを通じてさらに深刻な攻撃を仕掛ける準備を整えることができます。
ディレクトリ・トラバーサルの防止方法
1. ファイルパスのバリデーション
サーバー側でリクエストされたファイルパスに「../」が含まれていないか確認し、相対パスでのアクセスができないようにすることが基本的な防御策です。ユーザーが入力したファイルパスの検証とサニタイズを行い、不正なパス指定を除去することが重要です。
2. 許可されたディレクトリへのアクセス制限
公開されたディレクトリ外のファイルやディレクトリにはアクセスできないように設定を行います。サーバーの設定ファイル(例:ApacheのDocumentRoot
や<Directory>
設定、NGINXのlocation
ブロック)でアクセス制限を設定し、公開するファイルに限定したアクセスを許可します。
3. 絶対パスの使用
ファイルアクセスには、相対パスではなく絶対パスを指定することで、不正なパス遡りを防ぐことが可能です。絶対パスを使用することで、特定のディレクトリのみがアクセス可能な範囲に設定され、ディレクトリ・トラバーサル攻撃を避けることができます。
4. Webアプリケーションファイアウォール(WAF)の導入
Webアプリケーションファイアウォール(WAF)を導入することで、ディレクトリ・トラバーサル攻撃のパターンを検出し、自動的にブロックすることが可能です。WAFは、攻撃パターンをリアルタイムで監視し、不審なアクセスが発生した場合に遮断する役割を果たします。
5. 適切なファイルアクセス権限の設定
OSレベルでファイルやディレクトリへのアクセス権限を制限し、Webサーバーが必要な範囲外のディレクトリにアクセスできないようにすることも有効です。たとえば、重要な設定ファイルや機密情報が格納されているディレクトリには、最低限のアクセス権限のみを与えます。
ディレクトリ・トラバーサルの具体例
1. シンプルなディレクトリ・トラバーサル
例えば、URLのパラメータで指定されたファイルを開く処理があるWebアプリケーションに対して、次のように「../」を含むパスを指定する例です。
http://example.com/view?file=../../../etc/passwd
このリクエストにより、サーバーの設定が不十分である場合、/etc/passwd
ファイルが表示され、ユーザー情報が取得されるリスクがあります。
2. 動的ファイル表示機能の悪用
多くのWebアプリケーションでは、動的にファイルを表示する機能(例:画像ギャラリー)が実装されています。攻撃者は、URLにパスを追加して指定し、不正なファイルへのアクセスを試みます。
http://example.com/showImage?img=../../../../../../secret/important.doc
上記のようにパスが不正に指定されると、アプリケーションが意図しない場所のファイルを開いてしまう可能性があります。
まとめ
ディレクトリ・トラバーサルは、サーバー上で許可されていないファイルやディレクトリにアクセスする攻撃手法です。攻撃者は「../」を利用してディレクトリを遡り、機密情報やシステム設定ファイルなどを不正に取得しようとします。この攻撃は、ファイルアクセスの制限やパスの検証が不十分なサーバーで発生しやすく、成功すれば機密情報の漏洩やシステム改ざんにつながる可能性があります。
ディレクトリ・トラバーサルを防止するには、ファイルパスのバリデーションや絶対パスの使用、アクセス権限の適切な設定、WAFの導入などが重要です。これらの対策を講じることで、不正アクセスを防ぎ、安全なシステム環境を維持することができます。