目次

  1. 1.はじめに
  2. 2.ルール名ごとに検知した割合を表示するクエリ
  3. 3.表示する情報を絞り込むクエリ
  4. 4.時間ごとの検知状況を表示するクエリ
  5. 5.おわりに

1. はじめに

Azure WAF に WafCharm を導入した後の検知状況を確認する方法は以下のブログでご紹介させていただきました。今回はその検知状況をグラフなどに加工して見やすくする方法を実際のクエリを含めてご紹介します。
まずは、以下のブログを確認した上で続きをご確認ください。

https://www.wafcharm.com/jp/blog/azure-check-waf-detection-status-jp/

2. ルール名ごとに検知した割合を表示するクエリ

ルール名ごとに検知した割合を表示するクエリは以下となります。

AzureDiagnostics
| where ResourceProvider == "MICROSOFT.NETWORK" and Category == "ApplicationGatewayFirewallLog"
| parse Message with * "name: " wafcharm_rule ", priority:" *
| summarize count() by wafcharm_rule, bin(TimeGenerated, 1m)
| render timechart

実施した後にグラフの表示は修正しましたが、WafCharm ルールの検知割合を表示することができました。

ポイントはルール名の取得になります。
Azure のカスタムルールのログは ruleId_s という項目でルール名の取得ができません。
表示されるのはルール ID として数字だけ表示されます。
WafCharm のカスタムルールは message 内にルール名を記載しています。そこで parse を利用してルール名のみを wafcharm_rule として取得しました。"name: "と", priority:"で区切る形です。

実際の message

Mandatory rule. Cannot be disabled. Custom rule with name: WafCharm91004Scan, priority: 89

その後、wafcharm_rule で回数を数えて円グラフとして表示しました。

3. 表示する情報を絞り込むクエリ

ファイアウォールログから表示する情報を絞り込んだクエリは以下となります。

AzureDiagnostics
| where ResourceProvider == "MICROSOFT.NETWORK" and Category == "ApplicationGatewayFirewallLog"
| parse Message with * "name: " wafcharm_rule ", priority:" *
| extend Rule = strcat(ruleName_s, wafcharm_rule)
| extend RequestUri = requestUri_s,Hostname = hostname_s,Action = action_s,ClientIP = clientIp_s
| project TimeGenerated,Rule,Action,ClientIP,RequestUri,Hostname
| sort by TimeGenerated

先ほど利用した parse で WafCharm のルール名を取得します。
カスタムルール以外のルールも念のため考慮して Rule という項目に追加します。
“_s”も不要なため、表示を加工して、 project を利用して必要な情報のみ表示します。
最後に時間で sort します。

不要なデータもなくなりすっきりとした表示になったのではないでしょうか。

4. 時間ごとの検知状況を表示するクエリ

時間ごとの検知状況を表示するクエリは以下となります。

AzureDiagnostics
| where ResourceProvider == "MICROSOFT.NETWORK" and Category == "ApplicationGatewayFirewallLog"
| parse Message with * "name: " wafcharm_rule ", priority:" *
| extend Rule = strcat(ruleName_s, wafcharm_rule)
| summarize Amount = count() by Rule, bin(TimeGenerated, 1h)
| project Amount, Rule, TimeGenerated
| order by Amount desc

先ほど利用した parse で WafCharm のルール名を取得します。
カスタムルール以外のルールも念のため考慮して Rule という項目に追加します。
1時間ごとのルールの検知状況を数えます。
必要な情報のみに絞り込み、並べ替えを行い、積み上げ面でグラフ化しました。

検知状況の傾向などが把握できるかと思います。

5. おわりに

WafCharm のルール名も確認できる形のクエリを3つほど紹介させていただきました。
利用するクエリは Kusto 照会言語 (KQL)が利用できます。SQL に慣れている方は違和感なく使えるかと思います。

クイックリファレンス
https://docs.microsoft.com/ja-jp/azure/data-explorer/kql-quick-reference

バージョンによって値が異なることもあるため、一度ログを無条件に取得して確認した上で、適宜加工してください。