WAF(Web Application Firewall)とは、脆弱性を突いた攻撃からWebアプリケーションを守るためのファイアウォールである。
WAF(Web Application Firewall)とは、脆弱(ぜいじゃく)性を突いた攻撃からWebアプリケーションを守るためのファイアウォールである。オープンソースソフトウェアのWAFとしては「mod_security」が有名。
通常のファイアウォールのようにWebサーバの前方(利用者側)に設置し、トラフィックの解析を行うことで危険な通信を遮断するが、通常のファイアウォールと異なるのは、機能がアプリケーションレイヤーに特化している点である。例えば、クロスサイトスクリプティングやSQLインジェクションのような攻撃に対し有効である。
検出方法については、「ブラックリスト方式」と「ホワイトリスト形式」の2種類が存在する。
前者は、「不正な値」や「パターン」などのブラックリストを指定し、それに合致する通信を発見した場合に、それを「不正な通信」として検出する方式である。そのため、最新の攻撃に対応するためには常にブラックリストを更新する必要がある。また後者に比べ、誤検出しやすい。例えばUNION句を用いたSQLインジェクションの脆弱性に対応するため、「union」という文字列でブラックリストに追加したとする。この場合、全く関係のない「the union of ……」という文字列についても攻撃ペイロードであると判断してしまうことになる。このように、安易にブラックリストに登録すると正常な通信を遮断してしまう可能性があるため、「攻撃が正しく遮断されること」だけではなく「正常な通信を遮断しないこと」にも注意して使う必要がある。
後者は、「正しい値」や「パターン」をパラメーターごとに定義し、その定義に合致しない場合「不正な通信」として検出する方式である。そのため、未知の攻撃にも対応可能である。なお、Webアプリケーションごとにホワイトリストを定義する必要がある。仕様の異なるアプリケーションに対し同一のホワイトリストを適用した場合、正常な通信を遮断してしまう可能性があるためである。
不正な通信を検出した場合、「遮断する」他にも、「ログに残して通過させる」などの処理を行うことも可能である。
近年では、ハードウェア型、ソフトウェア型に加え、クラウド型のWAFも存在する。状況に応じて選択するとよいだろう。
また、ブラックリスト方式やホワイトリスト方式だけではなく、機械学習を用いたWAFについても研究が進められている。既存のWAFには、正しい通信を遮断してしまう場合(false positive)や、遮断すべき通信を通してしまう場合(false negative)が存在するが、機械学習を用いた場合、これらを低減できると期待されている。
WAFはあくまでも「攻撃の影響を緩和する」ためのものであり、脆弱性の根本的な解決を行うものではない。そのため、アプリケーション側で正しく脆弱性を修正することが望ましい。
【2004/1/1】初版公開。
【2018/10/22】最新情報に合わせて内容を書き直しました(セキュリティ・キャンプ実施協議会 著)。
Copyright © ITmedia, Inc. All Rights Reserved.