ディレクトリトラバーサルとは?情報漏洩を防ぐ方法

ディレクトリトラバーサルとは?情報漏洩を防ぐ方法

Webアプリケーションの中にはネットワーク上の脆弱性を利用した攻撃がいくつか存在します。その中の1つで、管理者が公開を想定していないファイルを表示させる手法であるディレクトリトラバーサル(directory traversal)の説明と対策を今回はご紹介します。

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

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

ディレクトリトラバーサル(directory traversal)とは、Webサーバー上にあるファイル名などを入力してファイルを表示させるようなWebアプリケーションに対して行われる攻撃手法の1つです。

トラバーサル(traversal)の意味は「横断する」であり、公開ディレクトリから別の場所にある目的のディレクトリへ横断して攻撃が行われることから命名されています。Webアプリケーションなどに対し「../」といった相対パスを使用して非公開になっているファイルを表示させます。

「../」を使うことから、ドットドットスラッシュ攻撃やパストラバーサル、バックトラッキングといった別名で呼ばれることもあります。

バックトラッキング

画像のような構造の場合「/sample/txt/index.html」のページ内に、入力したファイル名から、対象となるディレクトリ内のファイルを開くようなWebアプリケーションがある場合、「sample.txt」のみを公開する想定であったとしても、「../pass/password.txt」といったパスを含むファイル名を指定することにより、「/pass/password.txt」が開かれ内容を表示してしまう可能性があります。

絶対パスとは

ルートディレクトリという階層構造の一番上から目的地までの経路(パス)を表しているのが絶対パスです。どのディレクトリであっても、常に同じスタート地点、常に同じ経路の表示になります。ブラウザに表示されるURLなどが絶対パスです。

相対パスとは

絶対パスは階層構造の一番上からみた経路でしたが、相対パスは「現在作業している・見ているファイル」をスタート地点とした、対象までの経路を指します。

画像のような構造の場合、「sample.txt」から見た「password.txt」の相対パスは「../pass/password.txt」といった形式になります。このように相対パスを示す際に、現在のディレクトリの1つ上の階層を表す「../」といったパスを使用することができます。

ディレクトリトラバーサルは「../」が使われた相対パスを正規化する処理を悪用した攻撃手段なので、エンコードの際に指定されたパスの処理方法に問題があると攻撃を許すことになってしまいます。

最新情報をいち早くお届け!

無料会員登録していただくと、
会員限定の特別コンテンツ記事を最後まで
読むことができます!
その他、更新情報・イベント情報を
お届けいたします。

ディレクトリトラバーサルによる被害

ディレクトリトラバーサルによる被害

ディレクトリトラバーサルは、管理者がWebサーバー上で非公開を想定しているファイルを表示させることが可能です。もし非公開データの中に個人情報やアカウント情報といったものを置いている場合、情報漏洩の危険やデータの破壊といった危険に繋がる可能性やシステムを乗っ取られる可能性があります。そうなった場合、企業に対する信頼性が大きく失われるだけでなく、情報が流失したユーザーにも被害が及ぶことも考えられるため注意しなくてはなりません。

ディレクトリトラバーサルへの対策

ディレクトリトラバーサルへの対策

ディレクトリトラバーサルは、サーバー上で動いているWebアプリケーションへ入力されるデータの処理に対しての備えが不足している場合に発生する脆弱性を狙ったものです。使用する言語やシステムによって取れる対策はさまざまですが、ディレクトリトラバーサルへの対策例としては以下のようなものがあります。

  • ディレクトリパスが入力された際に、入力内容からはパス部分を取り除き、ファイル名だけを使用する
  • 「/」や「」を含むパス名を禁止する
  • 入力されたパスの前方一致・部分一致を使用する
  • 入力内容に「../」や「%2e%2e%2f」などの文字が含まれないかをチェックする
  • ディレクトリのアクセス権を設定する

エンコード後に「../」と同じ文字列になる「%2e%2e%2f」のような形式の文字列も、適切に処理されなければ攻撃されてしまうため注意が必要です。基本的には直接入力された文字列をそのまま使用されることがないよう処理する形にすることで、非公開ファイルが表示されることを防ぐことができます。

このようにパスを適切に処理することで攻撃を防ぐことはできますが、構築者がパスのエンコードやセキュリティに対する知識・経験の浅い場合には、攻撃を受けやすくなってしまう恐れがあるため、一層の注意が必要になります。

Webアプリケーションに対する有名な攻撃

Webアプリケーションに対する有名な攻撃

ディレクトリトラバーサルのように脆弱性を利用した攻撃として有名なものに「SQLインジェクション」「クロスサイトスクリプティング」があります。

SQLインジェクションはデータベースへのSQL文による命令文に対して、不正な文字列を挿入することでデータベースへ攻撃する手法です。データベースを利用した動的ページが数多くありますが、このようなアプリケーションにはSQLインジェクション攻撃による危険が存在します。

クロスサイトスクリプティングは、掲示板のようなユーザーの入力内容をWebページに表示するようなWebアプリケーションを利用した攻撃手法です。攻撃用のスクリプトを入力内容に含むことでHTMLとして認識されます。このスクリプト部分は読み込まれた瞬間に実行されるため、実行されてしまうと個人情報漏洩やなりすましの被害にあう可能性があります。これらの攻撃も入力内容に対し問題となる部分をエスケープするなどの処理をすることで対策を行うことができます。

入力内容への対策と十分な検証を行おう

入力内容への対策と十分な検証を行おう

ディレクトリトラバーサルのように脆弱性を突いた攻撃は、注意を払うことで事前に防ぐことができます。公開前にもコードに不備がないか十分な検証を行って情報漏洩などを防げるようにしていきましょう。

マーケティングでお悩みでしたら、
Bigmacにお任せください。

バナーlefty
バナー総合
バナー総合
  • この記事を書いた人
  • 最新記事