他社および他組織のWebサイトなどへのポートスキャンおよびデータの取得などの行為で得た情報を侵入などに悪用するか、または同じ目的を持つ第三者に提供した時点で違法となります。ご注意ください。
本稿の内容を検証する場合は、必ず影響を及ぼさない限られた環境下で行って下さい。
また、本稿を利用した行為による問題に関しましては、筆者および株式会社アットマーク・アイティは一切責任を負いかねます。ご了承ください。
前回は、アプリケーション開発において、セキュリティを向上させる方法について説明した。今回は、Webアプリケーションのセキュリティを向上させるためのプロダクトやツールなどについて紹介しよう。
Webアプリケーションのセキュリティは、アプリケーションそのものがセキュアに作られていて、Webサーバやアプリケーションサーバなどに問題がなければ、クロスサイトスクリプティングやセッションハイジャックなどの攻撃を受けることはない。しかし、どんなアプリケーションにも、1つや2つの問題は存在するのが現実である。これらの問題はもちろん最終的には直す必要があるのだが、まずはフタをして攻撃を受けないようにしてしまうという方法もある。これを行うのが「Webアプリケーションファイアウォール」(以下、WAFと記す)と呼ばれるものである。
なお、筆者はすべてのWAF製品を試用、評価したわけではないので、個々の製品の詳細機能には踏み込まないことにする。本稿では、一般的なWAFに関する説明を行った後、オープンソースのWAFの1つである、mod_securityについて説明していく。
WAFは通常のファイアウォールと同じように、すべてのHTTP/HTTPSトラフィックを中継する構成をとる。WAFは、HTTP(S)通信を中継する際、中身を精査し、不正な文字列が含まれている場合にエラーページを表示したり、リダイレクトしたりする。HTTP(S)通信の中継機能については、通常のWebプロキシとほとんど同じである。唯一異なるのは、HTTPSの場合は暗号化された通信を復号する必要がある点である。WAFを導入した場合の基本的な構成を図1に示す。
WAFには、ポジティブモデルとネガティブモデルの2通りがある。ポジティブモデルとは、
という設定であり、これは一般的なファイアウォールの設定と同じ考え方である。
一方、ネガティブモデルとは、
という設定である。IDSのように不正入力を表すシグネチャを使い、シグネチャに引っ掛かった場合には通信を拒絶する。以降で、それぞれの方式について詳しく説明する。
ポジティブモデルは、すべてのアプリケーション、すべてのパラメータそれぞれについて、「正しい値」の情報をあらかじめWAFに教えておくことにより、不正な入力をはじく方法である。Webアプリケーションにおける入力チェックと同じ考え方であり、不正な文字をはじく方法より確実である。
すべてのアプリケーション、すべてのパラメータの設定を行うのは非常に大変であるように思えるが、WAFの製品によっては、ユーザーが巡回する際に送信するパラメータ値の種類を自動的に記録し、「正しい値」を自動的に設定してくれるものもあるようだ。
「正しい値」をWAFに登録するときに、「数字4けた」のような場合は正規表現を使うことで実現できる。しかし、「正しい値」の設定はこのような設定だけではない。例えばFORMのhidden内に入っている情報は、ユーザーによって改ざんされずにそのまま送信されなければならない値である。
ショッピングサイトで価格がhiddenの中に入っていたとしよう。
<input type="hidden" name="price" value="198000">
悪意のあるユーザーがこの値を以下のように書き換えて送信した場合、どうなるだろうか。
<input type="hidden" name="price" value="198">
パラメータ「price」が取り得る値は価格であるので、「198」はアプリケーション的には問題ない値である。そのため、このままではWAFはこの値を不正として検知することができない。
ここでは価格の改ざんを例に挙げたが、同様の改ざんとして、セッションハイジャック/リプレイなどがある。いわゆるロジック系の攻撃である。これらの攻撃はアプリケーション的に正しい値を入れるため、攻撃検知用のシグネチャでは検知できない。ロジック系の脆弱性は危険度が非常に高いものが多いため、この攻撃を防御できる製品が望ましい。
このようなロジック系の攻撃を検知するためには、WAF自身がセッション管理を行う必要がある。同一ユーザーからのリクエストを判別する仕組みはもちろんのこと、サーバがクライアントに返したページの内容をサーバ側で保持していなければならない。改ざんされていないかどうかチェックするためである。この仕組みを図2に示す。
ここまでの機能を備えていると、その防御はほぼ完ぺきに近くなるが、場合によっては、正当な操作なのに不正として処理されてしまうこともあるかもしれない。また、当然のことながらその分コストも高くなる。大量のアクセスがあるサイトなら、WAFのパフォーマンスも考慮しなければならなくなるだろう。
ネガティブモデルは、不正文字やパターンを登録しておき(これをシグネチャという)、ユーザー入力が登録済シグネチャのどれかにマッチする場合、そのユーザー入力を不正としてはじく方式である。
シグネチャは入力全体に対するものなので、設定はサイト規模には依存しない。ただし、攻撃に使うような文字をあえて許可しているアプリケーションが存在する場合には設定が多少面倒になるだろう。
この方式の場合、基本的にIDSと同じ理論であるので、WAFであるからといって特別なことは行っていない。そのため、それほど知識がなくても導入できるだろう。
現在、販売・公開されているWAFをいくつか紹介しておこう。
【商用】
・Sanctum AppShield ( http://www.sanctuminc.com/)
・TEROS APS ( http://www.teros.com/)
・NetContinuum NCシリーズ ( http://www.netcontinuum.com/)
・CheckPoint Web Intelligence ( http://www.checkpoint.co.jp/)
・eeye SecureIIS ( http://www.eeye.com/)
・iMPERVA SecureSphere ( http://www.imperva.com/)
・KaVaDo InterDo ( http://www.kavado.com/)
・F5 TrafficeShield ( http://www.f5networks.co.jp/)
・Multinet SecureWeb ( http://www.elitesecureweb.com/)
【フリーソフト】
・mod_security ( http://www.modsecurity.org/)
・Guardian@JUMPERZ.NET ( http://www.jumperz.net/)
・CodeSeeker ( http://www.owasp.org/)
本稿では、この中でフリーのWAFである「mod_security」について説明する。mod_securityは、apacheのモジュールとして組み込む形をとるため、手軽に試すことができる。apache+CGIもしくはPHPなどで運用しているサイトでは、かなり有用になると思う。
←「第10回」へ
Copyright © ITmedia, Inc. All Rights Reserved.