Quiero identificar los patrones de tráfico invocados por las reglas de inyección de código SQL (SQLi) y scripting entre sitios (XSS) en AWS WAF.
Descripción corta
Para identificar los patrones de tráfico invocados por las reglas de SQLi y XSS, crea reglas de AWS WAF y activa el registro de AWS WAF. Envía registros a un grupo de registro en Registros de Amazon CloudWatch o un bucket de Amazon Simple Storage Service (Amazon S3). A continuación, utiliza Información de registros de Amazon CloudWatch o Amazon Athena para consultar los registros.
Resolución
Los registros de AWS WAF incluyen los patrones que activaron las reglas SQLi y XSS en el campo de registro terminatingRuleMatchDetails. Puedes usar los patrones para solucionar problemas de falsos positivos en las reglas de SQLi y XSS. Para obtener más información, consulta Campos de registro para el tráfico del paquete de protección (ACL web) y Ejemplos de registro del tráfico del paquete de protección (ACL web).
Ejemplo de registro de AWS WAF
El registro de AWS WAF registra los detalles de cada solicitud inspeccionada, incluida la regla que evaluó la solicitud y, cuando corresponde, la información sobre el patrón coincidente.
Ejemplo:
{
"terminatingRuleId": "CustomRule",
"terminatingRuleType": "REGULAR",
"action": "BLOCK",
"terminatingRuleMatchDetails": [
{
"conditionType": "SQL_INJECTION",
"location": "BODY",
"matchedData": ["<redacted>"],
"matchedFieldName": "",
"sensitivityLevel": "LOW"
}
]
}
conditionType define qué tipo de inspección coincide. En el ejemplo anterior, condtionType es una inyección de código SQL.
location define qué parte de la solicitud inspeccionó AWS WAF. En el ejemplo anterior, location es BODY, URL o QUERY_STRING.
matchedData contiene las cadenas específicas de la solicitud que invoca la regla. Si la disociación de registros está habilitada en AWS WAF, es posible que algunos campos estén censurados parcial o totalmente en la salida del registro.
sensitivityLevel define el nivel de sensibilidad de inspección utilizado por la regla. De forma predeterminada, el sensitivityLevel de la entrada de registro está establecido en BAJO para los grupos de reglas administradas de AWS, como las reglas administradas de AWS para SQLi y XSS. Esto reduce la probabilidad de falsos positivos. Para las instrucciones de inspección de SQLi personalizadas que definas en tus propios grupos de reglas, puedes configurar el nivel de sensibilidad de la inspección como Bajo o Alto.
Examina campos como terminatingRuleId, terminatingRuleMatchDetails y action para correlacionar las solicitudes con las evaluaciones y los resultados de las reglas.
Cuando utilizas grupos de reglas administradas de AWS, AWS WAF expone muchas detecciones mediante etiquetas de reglas en los eventos de registro. Para identificar qué firmas de reglas administradas coinciden con las solicitudes entrantes, consulta tanto la información de la regla de terminación como las etiquetas de las reglas.
En función de la acción configurada para una regla, es posible que aparezca una solicitud en los registros aunque AWS WAF no la bloquee. Utiliza los campos action y terminatingRuleId para distinguir entre solicitudes evaluadas, contadas y bloqueadas.
Consultas de Información de registros de CloudWatch
Si tus registros de AWS WAF están almacenados en Registros de Amazon CloudWatch, usa Información de registros de CloudWatch para ejecutar consultas a fin de identificar los patrones de tráfico.
Ejecuta una consulta de Información de registros de CloudWatch con el campo de registro terminatingRuleMatchDetails para identificar los patrones de tráfico. La siguiente consulta de ejemplo devuelve la marca de tiempo, la dirección IP del cliente, el país de origen, los detalles de la coincidencia y el ID de la solicitud:
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
Para obtener más información, consulta ¿Cómo analizo los registros de AWS WAF en CloudWatch?
Consultas de Amazon Athena
Si tus registros de AWS WAF están almacenados en Amazon S3, usa las consultas de Amazon Athena para identificar los patrones de tráfico. Ejecuta una consulta de Amazon Athena con el campo de registro terminatingRuleMatchDetails para identificar los patrones de tráfico. La siguiente consulta devuelve la marca de tiempo, la dirección IP del cliente, el país de origen, los detalles de la coincidencia y el ID de la solicitud:
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')
Para obtener más información, consulta How do I analyze AWS WAF logs in Amazon Athena? (¿Cómo analizo los registros de AWS WAF en Amazon Athena?).
Información relacionada
Análisis de los registros de AWS WAF en Registros de Amazon CloudWatch
¿Cómo excluyo los URI específicos de la inspección de XSS o SQLi para las solicitudes HTTP en AWS WAF?