WebサイトをWAFで守る
WAFを導入する目的
Webサイトに対する侵入事件が頻発しています。侵入の経路は大別すると、(1)管理用のログイン口が破られる、(2)Webサーバーのミドルウェアやアプリケーションの脆弱性を悪用される、の2種類があります。WAF(Web Application Firewall)はWebアプリケーションの脆弱性に対する防御機能を提供します。とくに、頻発するSQLインジェクション攻撃に対して、WAFは大きな効果があります。
脆弱性対処の考え方
SQLインジェクションなどの攻撃に対処するには、アプリケーションの脆弱性を修正することが不可欠です。アプリケーションが完璧ならば、WAFは必要ないはずです。
しかし、脆弱性をゼロにすることは中々困難な課題です。脆弱性が混入してしまう要因としては、以下の二つの要素があります。
- 脆弱性対処をしているつもりでも、方法が間違っている(質的問題)
- 正しい脆弱性対処方法を知っているが、対処もれの箇所がある(網羅性の問題)
WAFはこれら両方に対して有効です。特に、防御箇所の網羅性については、WAFは高い効果があります。そのためには、優れたシグネチャによる防御が不可欠です。
脆弱なWebアプリケーションのイメージと脅威

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

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

先のWebアプリケーションにWAFを導入後の安全性レベルを右図に示します。元々安全である箇所はそのままで、危険な箇所も一定水準のセキュリティに引き上げるとが可能になります。
そのための条件として、WAFをできるだけ設定なしに使うことが挙げられます。例えば、ホワイトリストを設定するタイプのWAFだと、ホワイトリストの設定漏れが危険性に繋がります。そうではなく、アプリケーション全ての箇所で、同一のシグネチャで守るからこそ、前記のような均質な防御な可能になります。