WAFによるディレクトリトラバーサル攻撃の防御

 2020.01.21  株式会社ジェイピー・セキュア

私たちは日頃からインターネットを通じて、Webアプリケーションやサービスを利用し、その恩恵を受けています。その一方でWebサイトの改ざんや情報漏えいといった事件・事故が後を絶たないという実情もあり、Webサイトの運営者はセキュリティに対する正しい知識が身に付ける必要があります。

本稿では、ディレクトリトラバーサルの基礎を解説し、セキュリティ対策として有効な「WAF(Web Application Firewall)」をご紹介します。Webサイトを保護し、ユーザーに被害を与えず、会社の信頼を守るためにもディレクトリトラバーサルについての仕組みや対策を理解しましょう。

ディレクトリトラバーサルとはどのような攻撃か?

ディレクトリトラバーサルは、ディレクトリパスをさかのぼってサーバー上のファイルに不正にアクセスする攻撃です。パストラバーサルと呼ばれることもあります。

パラメータでファイルを使用するWebアプリケーションにおいて、ファイル名を指定する実装に不備があった場合、相対パス表記を用いて任意のファイルにアクセスされてしまい、結果として本来公開を意図していないファイルへの参照・実行の恐れがあります。

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

トラバーサルは日本語で横断や横切りを意味し、ファイル名のパラメータに「../../../../etc/passwd」のような入力を与えられ、ディレクトリをさかのぼってファイルにアクセスされます。絶対パスが利用されるケースもあります。

ディレクトリトラバーサル攻撃は、有名なCMSであるWordPressの設定ファイルを不正に読み取る攻撃でも多く見られます。WordPressなどのCMSでは、機能拡張を行うためのプラグインなどが豊富であり、CMSの大きな魅力となっていますが、この拡張機能にディレクトリトラバーサルの脆弱性が多く、攻撃に悪用されています。

以下にWordPressインストールディレクトリのファイル・ディレクトリ構成を示します。

.htaccess
index.php
wp-activate.php
wp-admin(ディレクトリ)
wp-blog-header.php
wp-comments-post.php
wp-config.php
wp-content(ディレクトリ)
wp-cron.php
wp-includes(ディレクトリ)
wp-links-opml.php
wp-load.php
wp-login.php
wp-mail.php
wp-settings.php
wp-signup.php
wp-trackback.php
xmlrpc.php

そして、これが不正にwp-config.phpの読み取りを試みる攻撃リクエストの例です。

/wp-content/themes/テーマ名/download.php?file=../../../wp-config.php
/wp-content/plugins/プラグイン名/download.php?download_file=../../../wp-config.php

/wp-content/themes、/wp-content/pluginsにインストールされるテーマやプラグインのディレクトリトラバーサルの脆弱性を悪用し、設定ファイル(wp-config.php)を不正に読み取ろうとしていることが分かります。wp-config.phpには、データベースのホスト名やユーザー名、パスワードなどの重要な情報が記録されているため、不正に参照されたり外部に漏れるようなことがあってはいけません。

外部からの入力によりアクセスするファイル名を指定するアプリケーションについて、ディレクトリトラバーサルの対策が重要であることが分かりました。では、どのようにして対策すれば良いのでしょうか?

WAFとは~WAF選定・導入のポイントとSiteGuardが選ばれる理由~
ジェイピー・セキュアソフトウェアライセンス価格表

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

ディレクトリトラバーサルは、パラメータにファイルを指定する場合の実装の不備によって起こります。ファイル名にディレクトリが含まれたり、「../../」のような相対パス表記による参照を防ぐようにする必要があります。

IPAの安全なウェブサイトの作り方では、根本的対策として

  • 外部からのパラメータでウェブサーバ内のファイル名を直接指定する実装を避ける。
  • ファイルを開く際は、固定のディレクトリを指定し、かつファイル名にディレクトリ名が含まれないようにする。

の2つが紹介されています。パスからディレクトリを取り除いてファイル名だけを取り出すbasename()関数を利用するなどの対策を行いましょう。それだけでなく、そもそも外部からの入力値でファイル名を指定する必要が本当にあるのか?慎重な設計も必要です。

そのほか、外部からの入力を検査し、意図しないファイル参照を禁止することも一つの手段となります。

WAFによる対策

WAFは、Webアプリケーションの脆弱性を悪用する攻撃からWebサイトを保護するためのセキュリティ製品です。前述の根本的な対策が理想ですが、繰り返されるWebアプリケーションの改良の中で対策漏れが生じてしまうこともあるかもしれません。Webアプリケーションの安全性を維持するには高いセキュリティ意識と知識、技術が必要となります。

また、自社で開発したプログラムではなく、利用しているフレームワークやCMSのプラグインなどに脆弱性が見つかった場合は、自ら対処することは非常に困難であり、開発元からのバージョンアップ版やパッチの提供を待ち、速やかに適用する必要があります。このようなときにWAFが導入されていると、攻撃を受けた際の影響を低減することができ、セーフティネットとして大きな役割を果たします。

WAFは、Webサーバーにインストールしたり、ゲートウェイ型としてネットワークに設置することでユーザーからのリクエストを検査します。以下のページでSQLインジェクション、ディレクトリトラバーサル、OSコマンドインジェクションによる攻撃とWAFによる防御の解説をしていますので、ぜひ参考にしてください。

WAFとは:攻撃デモ~WAFによる防御

いかがでしょうか?WAFを導入することで、ディレクトリトラバーサル攻撃を効率的に検出・防御することができます。Webサイトのセキュリティ強化を検討されている場合は、WAFにご注目ください。

信頼の純国産ソフトウェア型WAF SiteGuardシリーズ製品概要

RECENT POST「技術動向」の最新記事


WAFによるディレクトリトラバーサル攻撃の防御
SITEGUARD

RANKING人気資料ランキング

RECENT POST 最新記事

ブログ無料購読

RANKING人気記事ランキング