ディレクトリトラバーサルとは?
ディレクトリトラバーサルとは、Webアプリケーションの脆弱性を悪用し、本来アクセスできないサーバー上のファイルやフォルダを不正に閲覧・取得する攻撃手法です。Webサイト・APIの弱点の中でも基本的でありながら危険な脅威で、「../」(ドットドットスラッシュ)などの特殊な文字列を使ってディレクトリを遡り、パスワードファイル、設定ファイル、ソースコードなどの機密情報にアクセスします。ファイル名やパスを指定できる機能(画像表示、ファイルダウンロードなど)が不適切に実装されている場合に発生し、パストラバーサル攻撃とも呼ばれます。
ディレクトリトラバーサルを簡単に言うと?
図書館の閲覧システムに例えると、「3階の本棚の本を見せてください」という普通のリクエストに、「../../地下金庫/機密書類」という特殊な指示を紛れ込ませて、立ち入り禁止の地下金庫の書類を見せてもらうようなものです。「../」は「一つ上の階に上がる」という意味で、これを繰り返すことで、本来は3階の本しか見せないはずのシステムから、建物全体のどこにでもアクセスできてしまいます。例えば、プロフィール画像を表示する機能で「../../etc/passwd」と指定すると、画像ではなくLinuxのパスワードファイルが表示されてしまう。警備員(アクセス制御)が、「本棚の番号」しかチェックせず、「../」という裏技に気づかないことで起こる攻撃なのです。
ディレクトリトラバーサルで発生する被害は?
ディレクトリトラバーサルにより、機密ファイルの流出、システム情報の露呈、認証情報の窃取などの深刻な被害が発生します。Webサイト・APIの弱点を突かれることで、サーバー内のあらゆるファイルが丸見えになる可能性があり、それらの情報を使った二次攻撃につながります。特に、設定ファイルやソースコードが漏洩した場合、より高度な攻撃を受ける準備情報を攻撃者に与えてしまいます。
ディレクトリトラバーサルで発生する直接的被害
- システム設定ファイルの露出
/etc/passwd、wp-config.php、web.configなどの重要な設定ファイルが読み取られ、ユーザー名、データベース接続情報、APIキーなどが流出する
- ソースコードの完全流出
アプリケーションのソースコードが丸ごと取得され、脆弱性の詳細、ビジネスロジック、ハードコードされたパスワードなどが攻撃者の手に渡る
- 個人情報ファイルの大量窃取
アップロードされた履歴書、契約書、顧客リストなどのファイルが不正にダウンロードされ、大量の個人情報が流出する
ディレクトリトラバーサルで発生する間接的被害
- より高度な攻撃への発展
取得した設定情報やソースコードを解析され、SQLインジェクションやリモートコード実行などのより危険な攻撃を受ける
- 競合他社への情報流出
企業秘密や開発中の新機能のコードが競合他社に渡り、競争優位性を完全に失う
- コンプライアンス違反と信頼失墜
個人情報保護法で定められたセキュリティ対策の不備が露呈し、行政処分や顧客からの信頼を失う
ディレクトリトラバーサルの対策方法
ディレクトリトラバーサルへの対策は、入力値の厳格な検証、ホワイトリスト方式の採用、ディレクトリアクセスの制限が基本となります。Webサイト・APIの弱点を補強するために、パス操作文字(../ ..\)の除去、絶対パスの使用、chroot環境での実行が重要です。また、最小権限の原則に基づくファイルアクセス権限の設定、重要ファイルのWebルート外への配置により、攻撃の影響を最小限に抑えることができます。
ディレクトリトラバーサルの対策を簡単に言うと?
ホテルのルームキーシステムに例えると、まず宿泊客には「部屋番号だけ」を指定させ、「../」のような変な指示は全て無視します(入力検証)。許可された部屋のリスト(ホワイトリスト)を作り、それ以外は絶対に開けません。重要な書類は客室エリアとは別の管理棟に保管し(Webルート外)、たとえ従業員でも必要最小限の場所しか入れないようにします(最小権限)。エレベーターも特定の階にしか止まらないように設定し(chroot)、お客様が勝手に地下金庫や屋上に行けないようにします。「お客様のリクエストは何でも聞く」のではなく、「安全な範囲でのみサービスを提供する」という考え方が、ディレクトリトラバーサルを防ぐ基本です。
ディレクトリトラバーサルに関連した攻撃手法
Webサイト・APIの弱点において、ディレクトリトラバーサルと密接に関連する3つの攻撃手法を解説します。
- XXE(XML External Entity)
ディレクトリトラバーサルとXXEは、どちらも本来アクセスできないファイルを読み取る攻撃です。ディレクトリトラバーサルがパス操作を使うのに対し、XXEはXMLの機能を悪用します。両者を組み合わせることで、より多くのファイルにアクセスし、システムの完全な情報を収集できます。
- SSRF(Server-Side Request Forgery)
ディレクトリトラバーサルがローカルファイルを狙うのに対し、SSRFは内部ネットワークも標的にします。ディレクトリトラバーサルで設定ファイルを取得し、その情報を使ってSSRF攻撃を実行するという連携が可能です。
- OSコマンドインジェクション
ディレクトリトラバーサルで取得した情報を基に、OSコマンドインジェクションの攻撃精度を高めることができます。また、両者とも入力値の検証不足が原因で発生するため、同じアプリケーションに両方の脆弱性が存在することが多いです。
ディレクトリトラバーサルのよくある質問
ファイルダウンロード、画像表示、テンプレート読み込み、ログファイル表示、CSVエクスポートなど、ファイルパスを扱う全ての機能が潜在的に危険です。特にユーザー入力を直接使用する場合は要注意です。
はい、Windowsでも発生します。「..¥」というバックスラッシュを使った同様の攻撃が可能で、C:¥Windows¥system32¥config¥SAMなどの重要ファイルが狙われます。
WAFである程度防げますが、完全ではありません。エンコーディング(%2e%2e%2f)やダブルエンコーディングで回避される可能性があるため、アプリケーション側の対策も必須です。
はい、S3バケットやAzure Blob Storageなどでも、不適切なアクセス制御により類似の問題が発生します。オブジェクトキーの検証を怠ると、意図しないファイルが公開される可能性があります。
非常に危険です。ディレクトリトラバーサルだけでなく、リモートファイルインクルージョン(RFI)につながる可能性があり、任意のコード実行まで発展する恐れがあります。
アクセスログで「../」「..¥」の文字列、エンコードされたパス文字、通常とは異なるファイルへのアクセス試行を監視します。IDSやSIEMツールでの自動検知も有効です。
更新履歴
- 初稿公開