AWS WAF で、SQL インジェクション (SQLi) ルールとクロスサイトスクリプティング (XSS) ルールによって呼び出されるトラフィックパターンを識別したいです。
簡単な説明
SQLi および XSS ルールによって呼び出されるトラフィックパターンを識別するには、AWS WAF ルールを作成することで、AWS WAF ログ記録を有効にします。Amazon CloudWatch Logs または Amazon Simple Storage Service (Amazon S3) バケットからロググループに AWS ログを送信できます。
解決策
AWS WAF ログの terminatingRuleMatchDetails ログフィールドに、SQLi および XSS ルールをトリガーしたパターンが入力されます。これは、SQLi および XSS ルールの誤検出をトラブルシューティングするのに役立ちます。詳細については、「ログフィールド」と「ログの例」を参照してください。
CloudWatch Logs Insights クエリ
AWS WAF ログが Amazon CloudWatch ログに保存されている場合は、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
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')
詳細については、「CloudWatch または Amazon S3 に保存されている AWS WAF ログを分析するためのオプションはありますか」を参照してください。
関連情報
Amazon CloudWatch Logs で AWS WAF ログを分析する
Amazon Athena で AWS WAF ログを分析する方法を教えてください
AWS WAF の HTTP リクエストの XSS または SQLi 検査から特定の URI を除外する方法を教えてください