【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に接続するようにしておきます。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626338/5597d415-055d-e18e-491d-f0002c92f003.png)|
|:--|

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

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626338/f19a298b-a538-3efc-a056-e4dd2a507098.png)|
|:--|

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

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626338/86adc916-9330-54ce-d0a4-b017f9fb8cc1.png)|
|:--|

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

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626338/cf151a1e-88d7-3476-5190-2bcd03582f1b.png)|
|:--|

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

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626338/f7040f13-a8d2-a223-3747-13632d5f9808.png)|
|:--|

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

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

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

すると…

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626338/08e961e9-c529-7058-92de-a998d8c4f02a.png)|
|:--|

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

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

--------------------------------------------
※注意※

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

--------------------------------------------

# 8.考察

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

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626338/ed12d2c4-76fe-dd90-a06c-9a3baa914dac.png)|
|:--|

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

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


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

--------------------------------------------
※注意※

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

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

--------------------------------------------


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

## 参考

https://docs.microsoft.com/ja-jp/azure/web-application-firewall/