Inicio Linux & Systems Networks & Infrastructure Cybersecurity Cloud & DevOps SIEM & Monitoring DFIR & Threat Intel Development & Other Todas las categorias Herramientas

Troubleshooting del tráfico bloqueadopor la política WAF de Azure Application Gateway

Troubleshooting del tráfico bloqueadopor la política WAF de Azure Application Gateway

Tabla de contenidos

Recientemente solucioné un problema con falsos positivos en Azure Application Gateway WAF. Al revisar las reglas que bloqueaban el tráfico, descubrí que el identificador de regla (ruleid_s) no coincidía con ningún ID de reglas en el WAF.

Este artículo explica cómo detectar la regla que está bloqueado el tráfico y cómo realizar excepciones oportunas.

Paso 1: Configurar logs de Application Gateway. Para hacerlo: Ir a Application Gateway > Sección Monitoring > Diagnostic setting > + Add diagnostic setting.

Además, en mi caso, envié estos logs a Log Analytics para una mejor análisis y diagnóstico.

Algunos comandos útiles para ver el tráfico de Application Gateway en Log Analytics incluyen:

  1. AzureDiagnostics: Muestra información detallada sobre los eventos y registros enviados a Log Analytics.
  2. ApplicationGatewayAccessLog: Muestra información detallada sobre el tráfico que pasa a través de Application Gateway.
  3. ApplicationGatewayFirewallLog: Muestra información detallada sobre las reglas de firewall de Application Gateway y cuales se activaron.
  4. union *: Combina todos los registros de Log Analytics para una vista global del tráfico y eventos.
  5. filter ruleid_s: Filtra los registros por el identificador de regla específico para identificar la regla que está causando un bloqueo.

Estos comandos se pueden utilizar en la búsqueda de Log Analytics para analizar y resolver problemas relacionados con el tráfico de Application Gateway.

Application Gateway Firewall

CODE
AzureDiagnostics 
| where  Category == "ApplicationGatewayFirewallLog"

Application Gateway Access

CODE
AzureDiagnostics 
| where  OperationName contains "ApplicationGatewayAccess"

Comencemos sin más dilación. Identifiquemos las consultas bloqueadas por el WAF. Podemos hacerlo utilizando la siguiente consulta

CODE
AzureDiagnostics
| where action_s contains "Block"

Al ejecutar esta consulta, podemos ver que el ID de la regla es 494110, pero al buscar en el Managed Rules del WAF, no encontramos una regla con ese ID

Para identificar la regla asociada con este bloqueo, podemos utilizar el ID transactionId_g. Este identificador es único para cada transacción y nos permite asociar la regla que causó el bloqueo con el registro correspondiente en el firewall

CODE
AzureDiagnostics
| where transactionId_g contains "90d76277-bdd4-e7ca-f7b6-67e73f9fbe9e"
and action_s contains "Matched"
| project ruleGroup_s, ruleSetType_s, ruleId_s, details_message_s, transactionId_g

Como se puede ver en la imagen anterior, el ID de la regla que coincidió y bloquear la consulta es 931130. Al buscar este ID en el Managed Rules del WAF, encontramos que está asociado a la regla ‘REQUEST-931-APPLICATION-ATTACK-RFI’.

Una vez identificada la regla causante del problema, vamos a Managed Rules > Exclusiones > Añadir Exclusión y configuramos la exclusión.

Aquí hay algunos comandos útiles para trabajar con ApplicationGatewayFirewallLog en Log Analytics:

  • Consultar los últimos 20 registros:
CODE
AzureDiagnostics 
| where  OperationName contains "ApplicationGatewayFirewallLog"
| limit 2
  • Ordenar los registros por hora:
CODE
AzureDiagnostics 
|  where  Category == "ApplicationGatewayFirewallLog"
| sort by TimeGenerated desc
  • Filtrar por reglas específicas:
CODE
AzureDiagnostics 
|  where  Category == "ApplicationGatewayFirewallLog"
and ruleId_s == "931130"
  • Contar la cantidad de bloqueos por regla:
CODE
AzureDiagnostics 
| where  Category == "ApplicationGatewayFirewallLog"
and action_s contains "Block" 
| summarize count() by ruleId_s
  • Ver la cantidad de bloqueos por regla y por día:
CODE
AzureDiagnostics 
| where  Category == "ApplicationGatewayFirewallLog"
and action_s contains "Block" 
| summarize count() by ruleId_s, bin(TimeGenerated, 1d)
  • Ver la cantidad de bloqueos por regla y por día:
CODE
AzureDiagnostics 
| where  Category == "ApplicationGatewayFirewallLog"
and action_s contains "Block" 
| summarize count() by ruleId_s, bin(TimeGenerated, 1d)
  • Ver la cantidad de bloqueos por IP origen:
CODE
AzureDiagnostics 
| where  Category == "ApplicationGatewayFirewallLog"
and action_s contains "Block" 
| summarize count() by clientIp_s
  • Ver la cantidad de bloqueos por regla y por hora del día:
CODE
AzureDiagnostics 
| where  Category == "ApplicationGatewayFirewallLog"
and action_s contains "Block" 
|  summarize count() by ruleId_s, bin(TimeGenerated, 1h), datetime_part('hour', TimeGenerated)

:wq!