AWS WAF のマネージドルールで誤検知が発生した場合、どうすれば回避できますか?
困っていた内容
AWS WAF のマネージドルールにて誤検知(BLOCK)が発生しました。
どのような設定を行えば誤検知を回避できるか教えてください。
具体的な回答
誤検知の一般的な回避方法は、以下手順にて設定を行う必要があります。
①.誤検知があったルールと文字列を特定する。
②.誤検知があった文字列を許可(ALLOW)するルールを追加する。
③.追加したルールを、誤検知があったルールより高い優先度に設定する。
誤検知があったルールと文字列を特定する。
始めに、誤検知があったルールと誤検知の根本的な原因である文字列を WAF のログから特定する必要があります。
※WAF ログが無効となっている場合は有効に設定し、ログの取得を行う必要があります。
誤検知が発生した時間帯の WAF ログを取得し、ログから誤検知があったルールと文字列を特定します。
まず、ログから "action" フィールドが "BLOCK" となっているルールを探します。
例として、AWS ドキュメントのログの例を抜粋して解説します。
{ "timestamp":1592361810888, "formatVersion":1, "webaclId":"arn:aws:wafv2:us-east-1:123456789012:global/webacl/hello-world/5933d6d9-9dde-js82-v8aw-9ck28nv9" ,"terminatingRuleId":"RG-Reference" ,"terminatingRuleType":"GROUP" ,"action":"BLOCK", "terminatingRuleMatchDetails": [{ "conditionType":"XSS" ,"location":"HEADER" ,"matchedData":["<","frameset"] }] ,"httpSourceName":"-" ,"httpSourceId":"-" ,"ruleGroupList":
ログの例 - AWS WAF、AWS Firewall Manager、および AWS Shield Advanced
"action" フィールドが "BLOCK" となっているルールの、
"terminatingRuleId" フィールド内の記述が、誤検知したルールID
"matchedData"フィールド内が、誤検知した文字列です。
※文字列は ,(カンマ)区切りで1文字です。
上記 JSON を例とすると、
"RG-Reference"が誤検知したルールID
"<"、"frameset" が誤検知した文字列となります。
誤検知があった文字列を許可(ALLOW)するルールを追加する。
文字列一致ステートメントを用いて、誤検知した文字列を許可するルールを追加します。
ルール一覧画面から「Add rules」→「Add my own rules and rule groups」を選択し、ルール追加画面に移行します。
ここでは、ルール名やステートメントを設定します。
今回は例として、下記の設定にしていますが、こちらの設定は要件に合った選択肢を選んでください。
If a request:matches the statement
(以下に設定するステートメントに一致した場合に、Action の内容を行う)
Inspect:All query parameters
(全てのクエリパラメータを検査する)
Match type:Contains string
(以下に設定した「文字列を含む」場合に一致とする)
※文字列一致で設定を行うため、Match type は String match condition(文字列一致)の中から選んでください。(下記画像参照)
選択肢の詳細については、以下ドキュメントを参照ください。
ウェブリクエストコンポーネント - AWS WAF、AWS Firewall Manager、および AWS Shield Advanced
文字列一致ルールステートメント - AWS WAF、AWS Firewall Manager、および AWS Shield Advanced
String to match に先ほど特定した文字列を入力、Action を ALLOW に設定し、ルールの追加を完了します。
例として取り上げた設定内容の場合、「全てのクエリパラメータを検査、その中に誤検知があった文字列を含む記述があった場合、一致と判定する。一致と判定した場合、許可アクションを行う」となります。
追加したルールを、誤検知があったルールより高い優先度に設定する。
最後に、Set rule priority にて、追加したルールのpriority(優先度)を調整します。
Move up、Move down のボタンでルールの priority(優先度)を調整し、誤検知があったルールよりも追加したルールの優先度を高く(priority の数字を低く)設定して完了です。
以上、マネジメントルールにて発生した誤検知への一般的な回避方法でした。