我想识别由 AWS WAF 中的 SQL 注入 (SQLi) 和跨站点脚本 (XSS) 规则调用的流量模式。
简短描述
要识别 SQLi 和 XSS 规则调用的流量模式,您可以创建 AWS WAF 规则并启用 AWS WAF 日志记录。您可以将 AWS 日志从 Amazon CloudWatch Logs 或 Amazon Simple Storage Service (Amazon S3) 存储桶发送到日志组。
解决方法
AWS WAF 日志在 terminatingRuleMatchDetails 日志字段中包含触发 SQLi 和 XSS 规则的模式。这有助于对 SQLi 和 XSS 规则误报问题进行故障排除。有关更多信息,请参阅日志字段和日志示例。
CloudWatch Logs Insights 查询
如果您的 AWS WAF 日志存储在 Amazon CloudWatch Logs 中,则可以使用 CloudWatch Logs Insights 运行查询来识别流量模式。
使用 terminatingRuleMatchDetails 日志字段运行 CloudWatch Logs Insights 查询,以确定流量模式。以下查询返回时间戳、客户端 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 查询来识别流量模式。
使用 terminatingRuleMatchDetails 日志字段运行 Amazon Athena 查询,以识别流量模式。以下查询返回时间戳、客户端 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 中分析 AWS WAF 日志?
相关信息
分析 Amazon CloudWatch Logs 中的 AWS WAF 日志
如何分析 Amazon Athena 中的 AWS WAF 日志?
如何在 AWS WAF 中将特定的 URI 从对 HTTP 请求的 XSS 或 SQLi 检查中排除?