WAFとは
WAFは、Webアプリへの通信内容を検査し、代表的な攻撃を遮断するWeb Application Firewallです。正式名称はWeb Application Firewall(ウェブ・アプリケーション・ファイアウォール)です。
HTTP・HTTPSの方式、ホスト、パス、問い合わせ、ヘッダー、Cookie、本文などをWeb要求として解析し、SQL注入、サイト横断scripting、パス横断、不正bot、過剰要求などを検知・制御します。
ネットワークファイアウォールが許可したHTTPSの中身を、アプリケーションに近い文脈で検査するものです。脆弱なコードを自動修正する仕組みではありません。

要求を部品へ分けて検査する
どのサイト・API・機能への要求かを選び、公開していない経路を拒否する。
GET・POST、コンテンツタイプ、オリジン、クライアント情報、長さ、エンコーディングを正規化する。
セッション、CSRFトークン、bot識別、比率判定に使う値の存在と形式を見る。
フォーム、JSON、XML、マルチパートアップロードを解析し、危険パターンとスキーマ逸脱を検査する。
認証情報試行、scraping、列挙、異常な操作順序を時間軸で判断する。
許可、ブロック、レート制限、CAPTCHA、ログ、別システムへの通知を行う。
署名と肯定モデルを使い分ける
否定モデルは既知の攻撃パターンや異常をブロックします。広いWeb機能へ導入しやすい一方、未知変形やobfuscationを見逃す場合があります。
肯定セキュリティモデルは、許可する方式、パス、パラメーター、種類、長さをスキーマとして定義し、それ以外を拒否します。APIでは強力ですが、仕様変更と規則更新を同期させる必要があります。
エンコーディングを正規化してから判断する
同じ文字をURL符号化、Unicode、二重符号化、圧縮、分割で表せます。WAFとアプリケーションの復号順が違うと、WAFでは安全に見え、アプリケーションでは攻撃になる要求smuggling・evasionが起き得ます。
プロキシ、WAF、Webサーバー、frameworkのHTTP解析差を試験し、曖昧な要求を拒否します。
誤検知を根拠とともに調整する
正規の検索語、ソースコード投稿、JSON、ファイルアップロードが攻撃パターンに似てブロックされるfalse肯定があります。最初は監視モードでbaselineを取り、規則ID、パラメーター、要求サンプルから狭い例外を作ります。
WAF全体やSQL注入分類を無効にせず、対象パス・パラメーター・方式へ限定し、期限と所有者を付けます。
仮想パッチは暫定的な経路防御
アプリケーションパッチをすぐ適用できないとき、特定パスやペイロードをブロックする規則を仮想パッチと呼ぶことがあります。攻撃面を早く減らせますが、別経路・エンコーディング・内部アクセスで回避される可能性があります。
恒久的にコード・設定を修正し、配備後に一時的な規則を見直します。
WAFが見えない範囲を把握する
SSH、データベース、メールなど非HTTPプロトコル、内部から直接バックエンドへ届く経路、クライアント側だけの問題、盗まれた正規アカウントの許可操作はWAFだけで守れません。
オリジンをWAF経由だけに制限し、アプリケーション認証・認可、安全coding、依存先更新、ログ監視を続けます。
応答と識別情報をログへ残す
要求ID、クライアント情報、ホスト・パス、規則ID、操作、バックエンド状態、遅延を残し、アプリケーションログと対応させます。本文やCookieには個人情報・秘密情報があるためマスキングと保管制限を行います。
WAFの価値は規則数ではなく、実際のWeb仕様に合わせた検査と例外、バックエンドを迂回させない構成、検知をコード修正へ戻す運用にあります。
Web application防御の確認資料:NIST CSRC Glossary「Web Application Firewall」、OWASP「Web Application Firewall」