ディレクトリパスを横断し、サーバー上のファイルに不正にアクセスする手法
ディレクトリとは、コンピューターが複数のファイルを管理する際に使われるフォルダーのようなもので、一般的にはディレクトリの中に子ディレクトリがあり、その中にまた孫ディレクトリが存在するという、階層構造となっている。パソコンの中のファイルもディレクトリ(最近はフォルダーと呼ぶことが多い)で管理されており、Webサーバーなどのサーバーも、原則としてディレクトリ構造を採用している。
ディレクトリトラバーサルのトラバーサルとは、日本語では「横断」や「横切り」という意味で、ディレクトリパス(ディレクトリを指定する住所のようなもの)を横断して、本来アクセスされることを意図していないファイルにアクセスする手法だ。古くからある攻撃の手法ながら、現在でもディレクトリトラバーサル攻撃により、情報漏えいに至る被害などが発生している。
ディレクトリトラバーサルの仕組み
先述のとおり、攻撃者はディレクトリトラバーサルの手法を用いることで、ユーザーがアクセスされることを想定していないファイルも含めてアクセスが可能になる。通常、ディレクトリパスの指定方法は、絶対パスと相対パスの二種類に分けられる。絶対パスは、ディレクトリの一番上の階層からファイルがある場所までの経路をもれなく記述する方法である。絶対パスは、ユーザーがどのディレクトリで作業していても変わらない。それに対し、ユーザーが現在作業している場所を起点にして、そこから目指すファイルへの経路を記述する方法が相対パスである。
相対パスは絶対パスと異なり、一番上の階層からの経路をすべて書き出す必要がない。そのため、対象のファイルが同じ階層や近い階層にある場合、短い記述で済ませることができるというメリットがある。URLでは、階層構造の区切りは「/」という文字を使うが、相対パスで一つ上の階層にさかのぼる場合は、「../」と記述することでパスが指定される。ディレクトリトラバーサルの手法では、本来正常な動作である、相対パスのこのような仕様を悪用する。例えば、パラメータとしてファイル名を利用するWebアプリケーションに「../../../../etc/passwd」のような入力を与えることで、それぞれのディレクトリの名称がわからなくても、ディレクトリを横断してパスワードファイルにアクセスできる可能性が生じる。攻撃者が複数のパターンで試行を続けることで、パスワードのありかを導き出す恐れがあるのだ。
WordPressの脆弱性も攻撃対象となる
ディレクトリトラバーサルは、WordPressの設定ファイルに不正アクセスし、内容を閲覧するといった攻撃でも用いられる。WordPressには、機能拡張を行うプラグインが多数用意されていることが魅力である一方、こうしたプラグインにディレクトリトラバーサル関連の脆弱性があることが少なくなく、攻撃者から狙われる対象となっている。WordPressの設定ファイルには、データベースのホスト名やユーザー名、パスワードなどの重要な情報が記述されているため、不正にアクセスされると甚大な被害につながる恐れがある。
ディレクトリトラバーサルへの有効な対策
ディレクトリトラバーサルを防ぐためには、「外部から入力されたパラメータでのファイル参照を許可しないこと」、「相対パスでのファイル参照を許可しないこと」、その上で「ファイルのパーミッション(権限)を適切に設定すること」に加えて「公開すべきではないファイルはサーバー上に設置しないこと」、といった対策が有効だ。
こうした根本的な対策が難しい場合は、攻撃に対する検知システムを導入する方法がある。IDS(不正侵入検知システム)やIPS(不正侵入防止システム)を導入することで、ディレクトリトラバーサルを含む各種攻撃を検知し、通信を遮断させることができる。
また、WAFの導入も効果的だ。WAFは「Web Application Firewall」の略称であり、クライアントとWebサイトの間に位置するファイアウォールのようなものであり、Webアプリケーションの脆弱性を悪用する攻撃からWebサイトを保護する役割を担う。IDS/IPSとWAFでは、監視するレイヤーが異なるため、両者を併用することで、ディレクトリトラバーサル攻撃などへの耐性は、より一層高まることだろう。