【Azure】AzureCDNWAFポリシーで特定のIPアドレスのみWAFを無効化することはできるのか


1.はじめに

いつも大変お世話になっております。

アプリケーションで対策を実装しなくても、様々な攻撃を防いでくれるWAF。便利ですね。
AzureにはApplicationGateway、FrontDoor、AzureCDN(プレビュー)で利用できるWAF機能があります。
「Web Application Firewall ポリシー (WAF)」サービスです。

しかしながら、とっても便利なこのWAF機能、たまに邪魔なんですよね。
アプリケーションに対して攻撃をテストする際に、WAFが防いでいるのかアプリケーションが防いでいるのかわからなかったりして。
その結果、「任意のIPだけWAFを無効化できないか?」なんてことを言われたりして。

・・・

WAFポリシーの中には、ルール全体のモード変更機能として、「検出モード」「防止モード」があります。「検出モード」は、アラートを監視してログに記録するだけで、ブロックはしません。
また、ルールには「管理されているルール」と、「カスタムルール」があります。

「管理されているルール」は任意のルール(主にOWASP3.1,3.0,2.2.9)の適用/不適用を設定することができる機能で、「カスタムルール」は様々な条件によりトラフックの許可/不許可を設定できる機能です。
しかし、2つのルールを組み合わせて利用するとき、「カスタムルール」で「許可」されており、かつ「管理されているルール」でルールに合致し「ブロック」される場合は、どのような動きになるのでしょうか?
通信はWAFを通過できる?それともブロックされる?

もし、WAFを通過できるのであれば、「任意のIPだけWAFを無効化できないか?」っていう要望は解決できるわけです。

はい、今回はその検証を行う記事です。

2.結論だけ先に言うと

  • 管理されているルールとカスタムルールは、「カスタムルール」が優先される。ただし「優先される」だけであり、管理されたルールが「評価されない」わけではない
  • どう頑張っても「任意のIPだけWAFを通過する」ようにはできない。

3.管理されているルール

 Web アプリケーション ファイアウォール (WAF) は、一般的な脆弱性や悪用から Web アプリケーションを保護することができます。
 これには、ApplicaitonGateway用のWAFポリシーではOWASP コア ルール セット 3.2、3.1、3.0、または 2.2.9 に基づいて定義されている規則が使用されます。
 同様に、AzureCDN用のWAFポリシーではDefaultRuleSet_1.0に基づいて、FrontDoor用のWAFポリシーではDefaultRuleSet_1.0,Microsoft_DefaultRuleSet_1.1,DefaultRuleSet_preview-0.1に基づいて定義されている規則が使用されます。

これらの規則は、個別に無効にすることができます。 この規則を無効化したり有効化したりするのが、この管理されているルールの主な機能です。

4.カスタムルール

カスタムルールを利用すると、コア規則セット (CRS) の規則を補強するために独自の規則を記述することができます。
この規則により、トラフックをブロックまたは許可することができます。
カスタムルールは、管理されているルールよりも高い優先度を持っています。
これだけ聞くと、「任意のIPだけWAFを通過するようにはできそう」ですね。

5.検証方法

①管理されているルールで、すべてのDefaultRuleSet_1.0ルールを有効にする
②カスタムルールにて、操作PCのIPアドレスに対してすべてトラフックを許可する
③WAFにブロックされる操作をし、結果を確認

6.環境構成

  • WAFポリシー
    • Azure CDNに適用(手軽なので)
    • DefaultRuleSet_1.0
    • 「防止」モード
    • すべてのルールが有効
    • カスタムルールで自宅のグローバルIPアドレスを許可する

7.実験

では早速やってみましょう!

適当にCDNのエンドポイントを作成します。
適当に作ったAppServiceに接続するようにしておきます。

作成したCDNエンドポイントのURL「https://azurecdn-waftest.azureedge.net/
」をたたくと、このような画面が表示されます。

次に、WAFポリシーを作成します。

カスタムルールタブで、自宅のグローバルIPアドレスに対してトラフィックを許可するカスタムルールを作成します。

そして先ほど作成したCDNエンドポイントに接続します。

はい、あとは適当でよいので作成します。
これで準備完了です!

では早速WAFにひっかかるようなことをやってみましょう。
簡単な方法で、XSS攻撃を実行してみます。

https://azurecdn-waftest.azureedge.net/search?q=<script>alert(0)</script>

すると…

おっと、ブロックされてしまいました。

結果としては、「任意のIPだけWAFを無効化することはできない」となりました。


※注意※

2021/10/19追記…
面白いことが分かったのですが、この結果となるのは「AzureCDN」に付加されるWAFポリシーを使ったときです。
「ApplicationGateway」のWAFポリシーでは、ブロックされずに正しく表示されます。


8.考察

さてさて、頭が混乱する結果ですね。「カスタムルールは優先されるのではなかったのか?」と。
それは、カスタムルールが優先的に処理されるとしても、カスタムルールは優先されるだけであり、管理されたルールが評価されないわけではないからです。

カスタムルールさんがいくら「トラフィック通すぜ」って言っても、後ろにいる管理されたルールさんが「ブロックするぜ」って言っていたらブロックされますよね。
ドキュメントに記載がある「カスタムルールが管理されているルールよりも高い優先度を持っている」というのは、あくまでカスタムルールが先に評価される(だけで、管理されたルールがスキップされるわけではない)という意味合いなわけです。

うーん日本語ってむずかしい。

つまり、どう頑張っても「任意のIPだけWAFを通過するようにはできない」ってことです!!!!


※注意※

2021/10/19追記…
上記で書いた通り、これはAzureCDNの場合のみです。
ApplicationGatewayの場合では、OWASPルールが評価されずに、任意のIPだけWAFを通過するようにできます。

WAFポリシーで同じリソースなのに異なる動きをするとは……AzureCDNのWAFポリシーはプレビューだからかもしれませんが。。。


9.終わりに

今回はWAFポリシーを特定のIPだけ通過させるようにできないかどうか、検証を行ってみました。
結果的には日本語って難しいですね、という一言にまとまる内容でした。

参考