webアプリケーションやサービスの多くは、インターネットを通じてサーバーにアクセスすることで、プログラムやスクリプト、コードによって様々な恩恵を受けることができます。
しかし、アクセスしたwebアプリケーションやサービスがサーバー攻撃を受けた時、webセキュリティを意識した対策が行われていないと、サービスを提供する側、サービスを受ける側・ユーザーの双方に何らかの被害が出る恐れもあるのです。
今回はサーバーに対する攻撃の中でも、ディレクトリトラバーサルについての説明と、起こり得る被害や防止するための対策についてお話します。
ディレクトリトラバーサルとは本来、アクセスして欲しくないファイルやディレクトリの位置を、相対パス指定などでプログラムに表示させて、不正なアクセスをする攻撃手法です。
ほぼ全てのサーバーはディレクトリによる構造があり、プログラムやコード内でもURLを参照したり、位置を指定することで可動する仕組みとなっており、正しく動作することを悪用した防ぎにくい攻撃であると言えます。
例えば、webページを作成する時に、スタイルシートの位置や画像の格納されているフォルダを指定、ファイル名を指定することで、HTMLタグに沿ったデザインや画像が表示されます。
ブラウザなどで画像の上で右クリックして「新しいタブで画像を開く」をクリックするした時に、アドレスバーに表示されるURLが画像の格納されているフォルダ・ディレクトリの位置であり、ファイル名であり、このURLは絶対パスです。
仮に sample.com/img/ というディレクトリの中にheader.pngというファイルがあるとします。
この場合、 sample.com/img/header.png が絶対パスとなります。
sample.com/page/index.htmlというページでheader.pngを利用する場合、上記の絶対パスで指定する方法がまずひとつ。
もうひとつが相対パスで指定し、参照する方法であり、相対パスで指定すると ../img/header.png となります。
相対指定による参照を受けて、プログラムは実際の位置を参照できるように正規化します。
正規化はサーバーやプログラム、コードにおいては「正常な動作」であり、ディレクトリトラバーサルはこの挙動を悪意を持って利用している攻撃と言えます。
ディレクトリトラバーサルは、パスの指定を制御するための処理の仕方に不備がある場合に問題となります。
例えば、「../」の文字列を無効にするように設定していても、エンコード後に「../」の文字列と等価になる文字列が適切に処理されていなければ、ディレクトリトラバーサルの標的になってしまう危険性があるのです。
ディレクトリトラバーサルへ対応するためには、そういった処理に万全を期することが重要となります。
webセキュリティに対する知識や経験が無い、または浅い場合には、既存のシステムによる運営、サーバーシステムの構築がデフォルトの場合では被害を受けやすいとも言えるでしょう。
ディレクトリトラバーサルの対策がされていない場合、相対パス指定による参照を利用して、本来であればアクセス権のないディレクトリを参照し、ファイルを不正に閲覧されてしまいます。
では、実際にディレクトリトラバーサルによって、どのような被害が起こり得るのか見てみましょう。
実際にディレクトリトラバーサルによる攻撃を受けて起きた被害に本来、アクセスできないファイルを閲覧・ダウンロードされてしまい、データの漏洩や流出があります。
公的な機関や企業の公式ページやサービスであれば、個人情報が流出した場合、利用するユーザーが直接的、間接的な被害を受ける恐れがあります。
同時に、サービスや企業に対するイメージや信頼性が損なわれてしまうという被害にも繋がります。
もし、閲覧されたファイルの中にIDやパスワードが含まれていた場合、システムやサービスそのものを乗っ取られてしまう可能性も考えられます。
また、システムそのものについてのセキュリティは十分に注意していて乗っ取られないとしても、先ほどの流出したデータの中に個人情報があり、メールアドレスとパスワードがあった場合、他のサービスのアカウントやSNSの乗っ取り被害など起こってしまうこともあるのです。
アクセス権のないファイルに不正にアクセスし、場合によってはデータの改ざんや削除をされてしまう恐れもあります。
例えば企業イメージを損ねる表現や情報が同ドメインによって発信された場合、信頼性を損ねるだけでなく、顧客離れ、ユーザー離れを引き起こします。
また、データそのものを削除されてしまった場合、サービスの停止やコンテンツを失ってしまう可能性もあり、直接的な被害が発生することも考えられます。
ディレクトリトラバーサルによる被害を受けないようにするためには予め対策を練っておく必要があります。
言語やシステム、OSによって様々ですので、全てを紹介することはできませんが、ディレクトリトラバーサルの対策にどのようなものがあるか見ておきましょう。
まず、相対パス、またはパラメータが外部から入力された時に、サーバーやプログラムがどのように処理するかを把握する必要があります。
把握した上で、外部からの入力によって渡されたパラメータによって、ファイル名を直接指定しない方法や、相対パスが正規化される際に前方一致を行う方法、または一部の一致を確認する方法があります。
外部からのパラメータ入力による処理を把握し、実行するパスの指定などで対策をする方法とは別で、ディレクトリトラバーサルによる攻撃を受けた際に検知する仕組みを導入するのも有効です。
また、検知に加えて、プログラムが求めるパス形式ではない形式で不正なアクセスがあった場合、、新たなディレクトリトラバーサル攻撃のパターンを蓄積することで、日々変化してしまうサーバー攻撃に対する情報を増やすことを意識しても良いかもしれません。
webページやサービス、サーバーを狙った悪意のある攻撃への対策については、攻撃手法が増えた分だけ、守るための方法も増えることになります。
また、サーバーのOSやプログラム言語ごとに処理の仕方、データの受け渡しなどに違いがあり、環境によって同じ対策が取れないことも考えられるでしょう。
システムを運営する立場、またはシステムを作成する立場の両方の方が、インターネット上、web上でサービスやページを提供する上で、ディレクトリトラバーサルの対策だけでなく、webセキュリティへの意識を持つことも大切です。
今回はディレクトリトラバーサルについて、起こり得る被害や対策などのご説明をしました。
webセキュリティの対策を学んだり考えたりする上で見えてくるのは、脆弱性を利用したサーバーやサービスに対する攻撃は、本来の意図と違った挙動や処理をさせるものが多いということです。
言い換えれば、プログラムを作成する上でのお手本や技術を学び、当たり前になっている意識の隙を付かれている場合も数多く存在するということ。
また、ディレクトリトラバーサルへの対策を行う際も、サービスやwebページを利用するユーザーの利便性も考えて行う必要もあります。
ユーザーからの入力は受け付けて、悪意のある攻撃による入力は検知し、排除する仕組みを意識しておくことも、webセキュリティを高くするためには必要なことかもしれませんね。
ディレクトリトラバーサル対策としておススメなのが「WAF」の導入です。
WAFには色々なものがありますが、その中でもクラウド型WAFであれば、コストや手間も少なくセキュリティ対策することができます。クラウド型のWAFは導入ハードルが極めて低いので、これからWebセキュリティ対策を行う企業様には有力な選択肢となります。
WAFを選定する時には、サポート体制や導入実績なども重視して、自社に最適なものを選びましょう。
クラウド型WAF「攻撃遮断くん」は、最新の攻撃パターンにも自動的に対応していくため、セキュリティパッチをすぐに適用できない状況や、定期的に脆弱性診断が出来ない状況でも、セキュアな環境を保てます。
ぜひこの機会にWebセキュリティ対策を見直し、WAFの導入を検討してみてください。
「攻撃遮断くん」の詳細資料は、こちらからダウンロード頂けます。
(2018/5/23 執筆、2019/4/8修正・加筆)
この記事と一緒に読まれています
2020.06.10
セキュリティ対策
WAFとはなにか?不正な通信を検知・遮断するセキュリティ対策
2020.02.25
セキュリティ対策
サイバー攻撃可視化ツールおすすめ6選!ツールを提供しているプロの目線でご紹介
2022.01.21
セキュリティ対策
2019.11.22
用語集
2022.01.22
セキュリティ対策
2020.04.16
セキュリティ対策