WAFについて

WAFとは

WAF(Web Application Firewall; 「ワフ」と読みます)とは、Webアプリケーションに特化した防御システムです。Webサーバーの前段に設置することで、Webアプリケーションの脆弱性を衝いた攻撃から、Webサイトを防御します。

WAFはどのような脅威に有効か

ケーションに対する攻撃に有効です。加えて、Webサーバー(ApacheやIIS)やWeb用のミドルウェア(Tomcat等)、言語システム(PHP等)の脆弱性についても防御能力があります。

一方、Web以外のプロトコルを用いるメールシステムなどに対する攻撃に対して防御機能は働きません。

WAFの防御戦略

WAFは主に以下の手法により、外部からの攻撃をブロックします。

(1)シグネチャによる攻撃検知とブロック

SQLインジェクションやクロスサイトスクリプティングなどの攻撃パターンをシグネチャとして定義しておき、外部からの要求(リクエスト)がシグネチャとマッチした場合、攻撃とみなし、通信をブロックするなどの防御処置をとります。

(2)ホワイトリストによる検査

パラメータ毎に、値の仕様を定義し、その仕様に外れた場合に要求をブロックします。仕様(ホワイトリスト)は、各画面のパラメータ毎に定義する必要があります。

(3)画面遷移の正当性チェック

WAFによっては、画面遷移の正当性をチェックする機能があります。

外部から遷移して良い「入口」のページを定義
入口以降、リンクやボタンによって遷移できるページのみ参照できる
ページを遷移するにしたがって、参照可能なページは拡大していく
外部からの攻撃は、正規の画面遷移を経ずに直接該当ページを参照する場合が多いことから、画面遷移のチェックにより攻撃を防ぐことができるばあいがあります。

(4)hiddenパラメータやCookieの保護

画面遷移の正当性チェックとあわせて、hiddenパラメータやラジオボタン等の値が改変されていないことをチェックする機能です。Webアプリケーションでは、これらの値は簡単に改変できるため、値が改変されても大丈夫なように設計すべきですが、そうなっていないアプリケーションが多いことが現状であり、攻撃に悪用される場合があります。また、hiddenパラメータ等に対してSQLインジェクション等の攻撃を仕掛ける場合も多くあります。

パラメータの改変防止機能により、これらの攻撃を防御することができます。 同様に、クッキー(Cookie)の改変機能や暗号化機能を有するWAFもあります。クッキーを暗号化することで、セッションハイジャックに対する防御が可能となります。

WAFの種類

WAFは設置形態により、以下の3種類に分類することができます。
・ネットワーク型WAF
・ホスト型WAF
・SaaS型WAF

ネットワーク型WAF

ネットワーク機器として配置するWAFです。アプライアンス製品とソフトウェアとして提供されている製品があります。リバースプロキシ、あるいはブリッジとして配置します。サーバー台数が多い場合に、コストパフォーマンスが高くなります。

ホスト型WAF

Webサーバーにソフトウェアとして導入するタイプのWAFです。Apacheモジュールとして提供されるWAFとして、オープンソースのModSecurityや、商用製品であるSiteGuardLiteがあります。ホスト型のWAFはネットワーク機器が増えないため、レイテンシ(遅延時間)がほとんどないことがメリットです。また、費用も低額なものが多いです。デメリットとして、Webサーバー毎に導入するため、サーバー台数が多い場合にコスト高になる場合があります。その場合は、ネットワーク型WAFの方が低コストになる場合があります。

SaaS型WAF

SaaS(Software as a Service)として提供されるWAFです。ネットワーク型WAF(リバースプロキシ)を共用サービスとして提供するものです。初期投資を抑えることができ、運用負荷も低いことが特徴です。

WAFを導入する目的

Webサイトに対する侵入事件が頻発しています。侵入の経路は大別すると、(1)管理用のログイン口が破られる、(2)Webサーバーのミドルウェアやアプリケーションの脆弱性を悪用される、の2種類があります。WAF(Web Application Firewall)はWebアプリケーションの脆弱性に対する防御機能を提供します。とくに、頻発するSQLインジェクション攻撃に対して、WAFは大きな効果があります。

脆弱性対処の考え方

SQLインジェクションなどの攻撃に対処するには、アプリケーションの脆弱性を修正することが不可欠です。アプリケーションが完璧ならば、WAFは必要ないはずです。

しかし、脆弱性をゼロにすることは中々困難な課題です。脆弱性が混入してしまう要因としては、以下の二つの要素があります。

脆弱性対処をしているつもりでも、方法が間違っている(質的問題)
正しい脆弱性対処方法を知っているが、対処もれの箇所がある(網羅性の問題)
WAFはこれら両方に対して有効です。特に、防御箇所の網羅性については、WAFは高い効果があります。そのためには、優れたシグネチャによる防御が不可欠です。

脆弱なWebアプリケーションのイメージと脅威

右の図は、脆弱性を持つ典型的なWebアプリケーションのイメージ図です。左側の「安全な箇所」は、正しい脆弱性対処をしていて、攻撃を受ける心配のない箇所、中央の「不完全な対策」という領域が、間違った方法による対処をしている箇所、右側の「対処もれの箇所」という領域が、脆弱性対処を怠っている箇所であることを示します。

 

security_about-waf-figure01

右の図は、脆弱性を持つ典型的なWebアプリケーションのイメージ図です。左側の「安全な箇所」は、正しい脆弱性対処をしていて、攻撃を受ける心配のない箇所、中央の「不完全な対策」という領域が、間違った方法による対処をしている箇所、右側の「対処もれの箇所」という領域が、脆弱性対処を怠っている箇所であることを示します。

 
security_about-waf-figure02

次に、各エリアを色分けしたものを右図に示します。赤色の部分(直ちに危険)が、攻撃ツールなどで容易に攻撃されてしまう箇所、黄色の部分(少し高度な攻撃に遭うと危険)が、手動などで高度な攻撃を受けると脆弱性を悪用されうる箇所です。不完全な脆弱性対処の例として、弊社代表の徳丸のブログ記事「JavaとMySQLの組み合わせでUnicodeのU+00A5を用いたSQLインジェクションの可能性」などを参考にして下さい。

 

WAFの導入により安全性の底上げが可能

security_about-waf-figure03

先のWebアプリケーションにWAFを導入後の安全性レベルを右図に示します。元々安全である箇所はそのままで、危険な箇所も一定水準のセキュリティに引き上げることが可能になります。

そのための条件として、WAFをできるだけ設定なしに使うことが挙げられます。例えば、ホワイトリストを設定するタイプのWAFだと、ホワイトリストの設定漏れが危険性に繋がります。そうではなく、アプリケーション全ての箇所で、同一のシグネチャで守るからこそ、前記のような均質な防御な可能になります。

WAF選定のポイント

WAF選定にあたっては、シグネチャの性能が重要です。シグネチャの性能を測る物差しとして、2種類の誤検知「偽陽性」と「偽陰性」が少ないことが要求されます。

「偽陽性」と「偽陰性」とは

WAFによる攻撃判定は、パターンマッチ技術によるため、どうしても誤検知の可能性があります

偽陽性(false positive):利用者からの正当なリクエストを誤って攻撃と判定すること
偽陰性(false negative):攻撃であるのに攻撃と判定せず見逃すこと
偽陽性があると、利用者の正答な要求をブロックしてしまい、サービスが使えなくなります。偽陰性があると、そのパターンを用いた攻撃に対する防御ができません。

どちらの誤検知もないにこしたことはありませんが、偽陽性があるとサービスが使えなくなってしまうという点で、良いWAFの条件として、偽陽性が少ないことが重要です。

日経SYSTEMSの評価結果

この点について、弊社代表の徳丸浩が日経SYSTEMS誌の企画で主要5製品の評価をしたことがあります。

WAFでWebアプリの脆弱性を守れるか

この際にもっとも高評価だった製品が、株式会社ジェイピー・セキュア社のSiteGuardでした。

SiteGuard製品情報

SiteGuard Lite製品情報
HASHコンサルティングは、SiteGuardおよびSiteGuard Liteの正規販売代理店として、これらWAF製品の販売を開始しています。