この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
困っていた内容
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 の数字を低く)設定して完了です。
以上、マネジメントルールにて発生した誤検知への一般的な回避方法でした。