2025年12月26日金曜日

【Azure】 WAFでログインできない?CookieのSQLインジェクション誤検知を解消する方法

 



Azure Application Gateway(AGW)でWAFを運用していると、昨日まで動いていたのに、急に特定のユーザーだけログインできなくなった」という謎のトラブルに遭遇することがあります。

ログを解析してみると、犯人はシステムへの攻撃ではなく、皮肉にも「セキュリティのために暗号化されたログインCookie」でした。今回は、WAFの誤検知(False Positive)との戦いと、その解決策についてまとめます。



1. 発生したトラブル:ログインボタンを押すと「403 Forbidden」

システム開発の最終盤、受入テストを目前に控えたタイミングで、一部のユーザーから「ログインできない」という報告が上がりました。

ブラウザのデベロッパーツールで確認すると、ログインリクエストに対して 403 Forbidden が返されています。アプリ側のログには何も残っておらず、どうやらアプリに到達する前の「WAF(Web Application Firewall)」で遮断されているようでした。


2. 原因:暗号化されたCookieがSQLインジェクションに見えた

Azureのログストリーム(または診断ログ)を調査したところ、以下の不穏な検知ログが見つかりました。

• 検知されたパターン: ?:/*!?|*/|[';]--|--[\s\r\n\v\f]|--[^-]*?-

• 検知対象: REQUEST_COOKIES:.システムで利用しているソリューション名


なぜこれが「攻撃」と判定されたのか?

ASP.NET Coreの認証システムが発行するCookieは、セキュリティを担保するために強力に暗号化されています。その結果、中身は CfDJ8Iwnl6yp... といったランダムな英数字・記号の羅列になります。

しかし、このランダムな文字列の中に、運悪く --(ハイフン2つ) が含まれてしまうことがあります。WAFの標準ルール(OWASP規則など)は、この -- を 「SQLのコメントアウトを悪用した攻撃コード」 と見なして、通信を即座にブロックしてしまったのです。

つまり、「セキュリティを高く保とうとした暗号化Cookieが、セキュリティ製品(WAF)に攻撃と間違えられた」という皮肉な構図です。


3. 解決策:特定のCookieを監視対象から除外する

全てのSQLインジェクション対策をオフにするわけにはいきません。そこで、「この名前のCookieだけは安全だから、チェックを通す」というピンポイントな除外設定(Exclusion)を行います。


Azure Portal での設定手順

1. WAF ポリシーのリソースを開きます。

2. 左メニューの [設定] > [管理ルール] を選択します。

3. 上部のタブから [除外] をクリックし、[追加] を押します。

4. 以下の通り設定します。

• 対象: 要求クッキー名 (Request cookie name)

• 演算子: 等しい (Equals)

• セレクター: . (※ご自身のシステムの認証Cookie名)

5. [保存] をクリックして適用します。

これで、WAFは「このCookieの中身がどうあれ、SQLインジェクションのチェックは行わない」という挙動になり、誤検知によるブロックが解消されます。


4. まとめ:WAFは「導入して終わり」ではない

今回の件で痛感したのは、WAFは導入後のチューニングが不可欠であるということです。

特にASP.NET CoreやJava Springなどのフレームワークを使っている場合、フレームワークが自動生成するCookieやトークンがWAFのルールに抵触することは珍しくありません。


「403エラーでログインできない」という報告を受けたら、まずはWAFのログを疑ってみてください。正しく「除外設定」を行うことで、鉄壁の守りとスムーズなユーザー体験を両立させることができます。