ディレクトリトラバーサルを初心者でも分かりやすく解説

あなたのWebサイトのファイル表示機能が、サーバーの全ファイルを丸見えにしているかもしれません。ディレクトリトラバーサルは、「../」という単純な文字列を使って、本来アクセスできないパスワードファイルや設定ファイルを盗み見る攻撃手法です。Webサイト・APIの弱点の中でも、シンプルながら破壊力のある脅威で、一つの脆弱性がシステム全体の情報流出につながります。本記事では、なぜこんな単純な攻撃が成功するのか、どんな被害が発生するのか、そして安全なファイル処理を実現するための実践的な対策について、専門知識がなくても理解できるように解説します。

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

ディレクトリトラバーサルとは、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ツールでの自動検知も有効です。

更新履歴

初稿公開

京都開発研究所

システム開発/サーバ構築・保守/技術研究

CMSの独自開発および各業務管理システム開発を行っており、 10年以上にわたり自社開発CMSにて作成してきた70,000以上のサイトを 自社で管理するサーバに保守管理する。