WAFはWeb Application Firewallの略で、Webサービスを攻撃から保護するためのシステムです。WAFはHTTP通信を分析して、悪意のあるコマンドやパラメータを含む通信をブロックします。WAFがブロックできる攻撃の例は以下の通りです。
- SQLインジェクション
- クロスサイトスクリプティング
- セッションハイジャック
- ディレクトリトラバーサル
- パスワードリスト攻撃
- その他脆弱性を悪用した攻撃(OpenSSL、Apache Strutsの脆弱性など)
Firewallの限界
Firewallは不要なポートを閉じて必要最小限の通信のみ許可することによって、外部からの不正な通信や攻撃のリスクを削減することができます。一方で必要なポートは解放する必要がありますので、HTTPやHTTPSなどのWebサービスへのアクセスに必要なポートは解放する必要があります。つまり、HTTPの通信に不正な通信や悪意のある通信が紛れ込んでいても、Firewallはそれをブロックすることはできません。
WAFによる攻撃のブロック
そこで、登場したのがWAFです。WAFは多層防御の1つとして、Webサーバの脆弱性を悪用するような攻撃を検知してブロックすることによって、Webサーバを保護します。
WAFはブラックリスト方式とホワイトリスト方式の両方でWebに対する攻撃を検知することができます。ブラックリスト方式としてはシグネチャによるパターンマッチングを行う事により、不正な通信を検知します。不正なシグネチャは毎日定期的にWAFベンダー等からアップデートする必要があります。ホワイトリスト方式はあらかじめ正常な通信パターンを定義して、それと同じ通信は許可するという方法です。ホワイトリスト方式は確実に不正な通信を除去することができますが、正常な通信パターンを定義するための事前準備がとても大変です。最近のWAFには機械学習によって正常な通信パターンの定義をサポートしてくれる機能があるようです。