Je souhaite identifier les modèles de trafic invoqués par les règles d'injection SQL (SQLi) et de script inter-site (XSS) dans AWS WAF.
Brève description
Pour identifier les modèles de trafic invoqués par les règles SQLi et XSS, vous pouvez créer des règles AWS WAF et activer la journalisation AWS WAF. Vous pouvez envoyer des journaux AWS à un groupe de journaux depuis Amazon CloudWatch Logs ou un compartiment Amazon Simple Storage Service (Amazon S3).
Résolution
Les journaux AWS WAF incluent les modèles qui ont déclenché les règles SQLi et XSS dans le champ de journal terminatingRuleMatchDetails. Cela permet de résoudre les problèmes de faux positifs liés aux règles SQLi et XSS. Pour plus d'informations, consultez les sections Champs de journaux et Exemples de journaux.
Requêtes CloudWatch Logs Insights
Si vos journaux AWS WAF sont stockés dans Amazon CloudWatch Logs, vous pouvez utiliser CloudWatch Logs Insights pour exécuter des requêtes afin d'identifier les modèles de trafic.
Exécutez une requête CloudWatch Logs Insights à l'aide du champ de journal terminatingRuleMatchDetails pour identifier les modèles de trafic. La requête suivante renvoie l'horodatage, l'adresse IP du client, le pays d'origine, les détails de la correspondance et l'ID de requête :
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
Requêtes Amazon Athena
Si vos journaux AWS WAF sont stockés dans Amazon S3, vous pouvez utiliser les requêtes Amazon Athena pour identifier les modèles de trafic.
Exécutez une requête Amazon Athena à l'aide du champ de journal terminatingRuleMatchDetails pour identifier les modèles de trafic. La requête suivante renvoie l'horodatage, l'adresse IP du client, le pays d'origine, les détails de la correspondance et l'ID de requête :
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')
Pour plus d'informations, reportez-vous à la section Quelles sont les options disponibles pour analyser les journaux AWS WAF stockés dans CloudWatch ou Amazon S3 ?
Informations connexes
Analyse des journaux AWS WAF dans Amazon CloudWatch Logs
Comment analyser les journaux AWS WAF dans Amazon Athena ?
Comment puis-je exclure des URI spécifiques de l'inspection XSS ou SQLi pour les requêtes HTTP dans AWS WAF ?