Edgio Blog

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

「ディレクトリ」とは、コンピュータ内の階層構造のことです。GUI(グラフィカル・ユーザー・インターフェイス)を持っているOSであればフォルダがいくつもありますが、それらはディレクトリを一般の人にも分かりやすく表現するための工夫です。「ディレクトリトラバーサル」は、その階層構造を使った攻撃を言います。「パストラバーサル」とも言います。
 

ディレクトリトラバーサル攻撃の流れ

ディレクトリトラバーサル攻撃では、攻撃者はウェブサーバー上に置かれ外部には公開していない、アクセスが許可されていないファイルにアクセスしようとします。「トラバーサル」とは、英語で「横断」「横切る」という意味です。ファイルのある場所(ディレクトリ、パス)を横切って別の場所に到達する、というイメージです。攻撃の流れを見てみましょう。

ディレクトリトラバーサル攻撃

  1. 攻撃者は、ディレクトリトラバーサルの脆弱性を持っているウェブサイトやウェブアプリにアクセスします。そして、パラメータとして特定のパス名やファイル名を指定します。その際、「相対パス」を示す「../」(通称「ドットドットスラッシュ」。上位の階層を示す)を使用したりすることがあります。
  2. ディレクトリトラバーサルの脆弱性により、外部には公開していないパスやファイルが表示されてしまいます。

 

相対パスと絶対パス

ここで「相対パス」という言葉が出てきました。これはいったい何でしょう。
 

相対パス

簡単に言うと、ファイルやフォルダが「今いる場所からどこにあるか」を指定するのが相対パスです。図で説明しましょう。

絶対パスと相対パスの説明図

図の中央にあるpost-1.htmlファイルからみるとlogo.jpegファイルは1つ下、「img」フォルダの中にあるので、logo.jpegの場所は「img/logo.jpeg」と表現します。また、style.cssはpost-1.htmlが入っている「html」フォルダと同じ階層にある「css」フォルダ内に入っていますので、style.cssは「../css/style.css」と表現します。「../」は先ほどの図で説明しましたが「上位の階層である」ことを示す記号列で、複数記述すればその分上位の階層にあがっていきます。相対パスは記述が簡略化できるのがメリットですが、ディレクトリトラバーサルの問題だけでなく、外部サイトの指定ができない、というデメリットがあります。
 

絶対パス

一方、ファイルやフォルダが「どこにあるのか」を上から順に指定するのが絶対パスです。図の例でいうと、logo.jpegのある場所は「example.com/html/img/ logo.jpeg」と表現します。ウェブブラウザで表示されるURLを考えると分かりやすいです。絶対パスは外部サイトを含めフォルダやファイルの位置を確実に指定ができるのがメリットですが、記述が長くなりがちなこと、上位層(図でいうとexample.com)が変わったときにはすべての記述を書き換える必要が生じるのがデメリットです。
 

ディレクトリトラバーサルの狙い

ディレクトリトラバーサルで狙われるのは、以下のファイルです。

  • ウェブサイトやウェブアプリの動作に必要なファイル(設定ファイル など)
  • 機密情報を含んだファイル(アカウント・パスワード情報 など)
  • サーバーにうっかりアップロードしてそのまま残っているファイル(マニュアル、テスト用ファイル など)

 

攻撃が引き起こす問題

攻撃としては、以下が考えられます。特に機密情報については、自社以外のウェブサイトやウェブアプリを巻き込んで被害が大きくなってしまう可能性があります。

  • データや設定ファイルの改ざん、削除
  • アカウントの乗っ取り、なりすまし
  • さらなる機密情報の入手、その流出・公開

 

サービス提供者・管理者がとるべき対策

ディレクトリトラバーサル攻撃は、攻撃者が指定したパス名・ファイル名をそのままパラメータとして利用するウェブサイトやウェブアプリで成立します。

そのため、開発時の対策としては、以下の方法が有効です。

  • 相対パスでのファイル参照をさせない
  • 外部から入力(ファイルのアップロードなども含む)したパス名・ファイル名をそのままパラメータとして利用しない

また、サービス公開・運用時には

  • パスやファイルに適切なアクセス権を設定する
  • 不要なファイルを外部公開するサーバー上に置かない

ことも、有効な対策となります。

 

まとめ

今回はディレクトリトラバーサルについて説明しました。開発時に適切に対策を施すことがもっとも大事ですが、大規模なウェブサイトやウェブアプリになると、セキュリティテストなどでディレクトリトラバーサル脆弱性が発覚した際でもすぐに修正ができない場合があるでしょう。また、WordPressやEC-CUBEなど人気の高いウェブアプリを運用している場合、ディレクトリトラバーサル脆弱性が発見されても大抵の場合は修正版が公開されるのを待つしかないので、その間は無防備になってしまいます。

それに備え、次善の策としてWAF(Web Application Firewall)を導入するとよいでしょう。WAFであればウェブサイトやウェブアプリに対して起こる攻撃と思しき通信を検知し、遮断することができます。