私たちは日頃からインターネットを通じて、Webアプリケーションやサービスを利用し、その恩恵を受けています。その一方でWebサイトの改ざんや情報漏えいといった事件・事故が後を絶たないという実情もあり、Webサイトの運営者はセキュリティに対する正しい知識が身に付ける必要があります。Firewall)」をご紹介します。Webサイトを保護し、ユーザーに被害を与えず、会社の信頼を守るためにもディレクトリトラバーサルについての仕組みや対策を理解しましょう。ディレクトリトラバーサルとはどのような攻撃か?ディレクトリトラバーサルは、ディレクトリパスをさかのぼってサーバー上のファイルに不正にアクセスする攻撃です。パストラバーサルと呼ばれることもあります。パラメータでファイルを使用するWebアプリケーションにおいて、ファイル名を指定する実装に不備があった場合、相対パス表記を用いて任意のファイルにアクセスされてしまい、結果として本来公開を意図していないファイルへの参照・実行の恐れがあります。トラバーサルは日本語で横断や横切りを意味し、ファイル名のパラメータに「../../../../etc/passwd」のような入力を与えられ、ディレクトリをさかのぼってファイルにアクセスされます。絶対パスが利用されるケースもあります。ディレクトリトラバーサル攻撃は、有名なCMSであるWordPressの設定ファイルを不正に読み取る攻撃でも多く見られます。WordPressなどのCMSでは、機能拡張を行うためのプラグインなどが豊富であり、CMSの大きな魅力となっていますが、この拡張機能にディレクトリトラバーサルの脆弱性が多く、攻撃に悪用されています。以下にWordPressインストールディレクトリのファイル・ディレクトリ構成を示します。.htaccessindex.phpwp-activate.phpwp-admin(ディレクトリ)wp-blog-header.phpwp-comments-post.phpwp-config.phpwp-content(ディレクトリ)wp-cron.phpwp-includes(ディレクトリ)wp-links-opml.phpwp-load.phpwp-login.phpwp-mail.phpwp-settings.phpwp-signup.phpwp-trackback.phpxmlrpc.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には、データベースのホスト名やユーザー名、パスワードなどの重要な情報が記録されているため、不正に参照されたり外部に漏れるようなことがあってはいけません。外部からの入力によりアクセスするファイル名を指定するアプリケーションについて、ディレクトリトラバーサルの対策が重要であることが分かりました。どのようにして対策すれば良いのでしょうか?ディレクトリトラバーサルの対策ディレクトリトラバーサルは、パラメータにファイルを指定する場合の実装の不備によって起こります。ファイル名にディレクトリが含まれたり、「../../」のような相対パス表記による参照を防ぐようにする必要があります。IPAの安全なウェブサイトの作り方では、根本的対策として外部からのパラメータでウェブサーバ内のファイル名を直接指定する実装を避ける。ファイルを開く際は、固定のディレクトリを指定し、かつファイル名にディレクトリ名が含まれないようにする。2つが紹介されています。パスからディレクトリを取り除いてファイル名だけを取り出すbasename()関数を利用するなどの対策を行いましょう。それだけでなく、そもそも外部からの入力値でファイル名を指定する必要が本当にあるのか?慎重な設計も必要です。そのほか、外部からの入力を検査し、意図しないファイル参照を禁止することも一つの手段となります。WAFによる対策WAFは、Webアプリケーションの脆弱性を悪用する攻撃からWebサイトを保護するためのセキュリティ製品です。前述の根本的な対策が理想ですが、繰り返されるWebアプリケーションの改良の中で対策漏れが生じてしまうこともあるかもしれません。Webアプリケーションの安全性を維持するには高いセキュリティ意識と知識、技術が必要となります。このような実情から根本的な対策を基本としつつ、別のアプローチでの対策が求められるようになり、Webアプリケーションの脆弱性有無とは独立したかたちで攻撃を防御できるWAFの活用が急速に進んでいます。WAFは、Webサーバーにインストールしたり、ゲートウェイ型としてネットワークに設置することでユーザーからのリクエストを検査します。以下のページでSQLインジェクション、ディレクトリトラバーサル、OSコマンドインジェクションによる攻撃とWAFによる防御の解説をしていますので、ぜひ参考にしてください。WAFとは:攻撃デモ~WAFによる防御いかがでしょうか?。WAFを導入することで、ディレクトリトラバーサル攻撃を効率的に検出・防御することができます。Webサイトのセキュリティ強化を検討されている場合は、WAFにご注目ください。