スキップしてコンテンツを表示

AWS WAF で、SQLi ルールと XSS ルールによって呼び出されるトラフィックパターンを識別する方法を教えてください。

所要時間2分
0

AWS WAF で、SQL インジェクション (SQLi) ルールとクロスサイトスクリプティング (XSS) ルールによって呼び出されるトラフィックパターンを識別したいです。

簡単な説明

SQLi ルールと XSS ルールによって呼び出されるトラフィックパターンを識別するには、AWS WAF ルールを作成し、AWS WAF ログ記録を有効にします。Amazon CloudWatch Logs または Amazon Simple Storage Service (Amazon S3) バケットのロググループにログを送信します。次に、Amazon CloudWatch Log Insights または Amazon Athena を使用してログをクエリします。

解決策

AWS WAF ログの terminatingRuleMatchDetails ログフィールドには、SQLi ルールと XSS ルールを呼び出したパターンが含まれています。このパターンを使用して、SQLi および XSS ルールの誤検出をトラブルシューティングできます。詳細については、「保護パック (ウェブ ACL) トラフィックのログフィールド」と「保護パック (ウェブ ACL) トラフィックのログ例」を参照してください。

AWS WAF ログの例

AWS WAF ログには、リクエストを評価したルールや、該当する場合には一致したパターンに関する情報など、検査されたすべてのリクエストの詳細が記録されます。
例:

{
  "terminatingRuleId": "CustomRule",
  "terminatingRuleType": "REGULAR",
  "action": "BLOCK",
  "terminatingRuleMatchDetails": [
    {
      "conditionType": "SQL_INJECTION",
      "location": "BODY",
      "matchedData": ["<redacted>"],
      "matchedFieldName": "",
      "sensitivityLevel": "LOW"
    }
  ]
}

conditionType は、どのタイプの検査が一致するかを定義します。前述の例では、condtionType は SQL インジェクションです。

location は、AWS WAF がリクエストのどの部分を検査したかを定義します。前述の例では、location は BODY、URL、または QUERY_STRING です。

matchedData には、ルールを呼び出すリクエスト内の特定の文字列が含まれます。AWS WAF でログ編集が有効になっている場合、ログ出力の一部のフィールドが部分的または完全に編集される場合があります。

sensitivityLevel は、ルールで使用される検査の感度レベルを定義します。デフォルトでは、SQLi や XSS の AWS マネージドルールなどの AWS マネージドルールグループのログエントリの sensitivityLevel は LOW に設定されています。これにより、誤検出の可能性が低くなります。独自のルールグループで定義したカスタム SQLi 検査ステートメントの場合、検査の感度レベルを Low または High に設定できます。

terminatingRuleId、terminatingRuleMatchDetails、action などのフィールドを調べて、リクエストをルールの評価および結果と関連付けてください。

AWS マネージドルールグループを使用すると、AWS WAF はログイベントのルールラベルを通じて多くの検出を公開します。受信リクエストと一致するマネージドルールシグネチャを識別するには、終了ルール情報とルールラベルの両方をクエリします。

ルールに設定されたアクションによっては、AWS WAF がブロックしていないリクエストであってもログに表示される場合があります。action と terminatingRuleId フィールドを使用して、評価されたリクエスト、カウントされたリクエスト、ブロックされたリクエストを区別します。

CloudWatch Logs Insights クエリ

AWS WAF ログが Amazon CloudWatch Logs に保存されている場合は、CloudWatch Logs Insights を使用して、クエリを実行してトラフィックパターンを識別します。
CloudWatch Logs Insights クエリを実行し、terminatingRuleMatchDetails ログフィールドでトラフィックパターンを識別します。次のクエリ例は、タイムスタンプ、クライアント IP アドレス、送信元の国、一致の詳細、リクエスト ID を返します。

fields @timestamp
| parse @message ',"terminatingRuleMatchDetails":[*],' as terminatingRuleMatchData
| filter (terminatingRuleMatchData like /XSS/ or terminatingRuleMatchData like /SQL/)
| display @timestamp, httpRequest.clientIp, httpRequest.country, terminatingRuleMatchData, httpRequest.requestId
| limit 100

詳細については、「CloudWatch の AWS WAF ログを分析する方法を教えてください」を参照してください。

Amazon Athena クエリ

AWS WAF ログが Amazon S3 に保存されている場合は、Amazon Athena クエリを使用してトラフィックパターンを識別します。Amazon Athena クエリを実行し、terminatingRuleMatchDetails ログフィールドでトラフィックパターンを識別します。次のクエリは、タイムスタンプ、クライアント IP アドレス、送信元の国、一致の詳細、リクエスト ID を返します。

SELECT
    to_iso8601(from_unixtime(timestamp / 1000)) as timestamp,
    terminatingRuleId,
    action,
    httpRequest.requestId as RequestID,
    httpRequest.clientIp as ClientIP,
    httpRequest.country as Country,
    termmatchrules.conditionType as ConditionType,
    termmatchrules.location as Location,
    termmatchrules.matchedData as MatchedData
FROM waf_logs  
CROSS JOIN UNNEST(terminatingRuleMatchDetails) as t(termmatchrules)
WHERE termmatchrules.conditionType in ('XSS', 'SQL_INJECTION')

詳細については、「Athena の AWS WAF ログを分析する方法を教えてください」を参照してください。

関連情報

Analyzing AWS WAF Logs in Amazon CloudWatch Logs (Amazon CloudWatch Logs で AWS WAF ログを分析する)

AWS WAF の HTTP リクエストの XSS または SQLi 検査から特定の URI を除外する方法を教えてください。

AWS公式更新しました 7ヶ月前
1コメント

This article was reviewed and updated on 2026-03-16.

エキスパート

応答済み 1ヶ月前

関連するコンテンツ