Supervisión y registro del firewall de aplicaciones web de Azure

Azure Web Application Firewall en Azure Front Door ofrece amplios registros y telemetría que ayudan a comprender el rendimiento del firewall de aplicaciones web (WAF) y las acciones que realiza.

El registro de WAF de Azure Front Door está integrado en Azure Monitor. Azure Monitor le permite hacer un seguimiento de la información de diagnóstico, incluidos los registros y alertas de WAF. Puede configurar la supervisión de WAF dentro del recurso de Azure Front Door en Azure Portal, en la pestaña Diagnóstico, mediante enfoques de infraestructura como código o directamente mediante Azure Monitor.

Métricas

Azure Front Door registra automáticamente las métricas para ayudarle a comprender el comportamiento de WAF.

Para acceder a las métricas del firewall de aplicaciones web:

  1. Inicie sesión en Azure Portal y vaya a su perfil de Azure Front Door.
  2. En el panel de más a la izquierda, en Supervisión, seleccione la pestaña Métricas.
  3. Agregue la métrica Recuento de solicitudes del firewall de aplicaciones web para hacer un seguimiento del número de solicitudes que coinciden con las reglas de WAF.

Puede crear filtros personalizados en función de los tipos de acción y los nombres de las reglas. Las métricas incluyen solicitudes con todas las acciones excepto Log.

Screenshot that shows the metrics for an Azure Front Door WAF.

Registros y diagnósticos

El WAF de Azure Front Door proporciona informes detallados sobre cada solicitud y amenaza que detecta. El registro se integra con los registros de diagnóstico y las alertas de Azure mediante los registros de Azure Monitor.

Estos registros no están habilitados de forma predeterminada. Debe habilitar los registros de manera explícita. Puede configurar los registros en Azure Portal mediante la pestaña Configuración de diagnóstico.

Screenshot that shows how to enable the WAF logs.

Si el registro está habilitado y se desencadena una regla WAF, los patrones coincidentes se registran en texto sin formato para ayudarle a analizar y depurar el comportamiento de la directiva WAF. Puede usar exclusiones para ajustar las reglas y excluir los datos que quiera excluir de los registros. Para obtener más información, vea Listas de exclusión de Web en Front Door.

Azure Front Door proporciona dos tipos de registros: registros de acceso y registros de WAF.

Registros de acceso

El registro FrontDoorAccessLog incluye todas las solicitudes que pasan por Azure Front Door. Para obtener más información sobre el registro de acceso de Azure Front Door, incluido el esquema de registro, consulte Supervisión de métricas y registros en Azure Front Door.

El registro FrontdoorAccessLog incluye todas las solicitudes que pasan por Azure Front Door. Para obtener más información sobre el registro de acceso de Azure Front Door, incluido el esquema de registro, consulte Supervisión de métricas y registros en Azure Front Door (clásico).

La consulta de ejemplo siguiente muestra las entradas del registro de acceso:

AzureDiagnostics
| where ResourceProvider == "MICROSOFT.CDN" and Category == "FrontDoorAccessLog"
AzureDiagnostics
| where ResourceType == "FRONTDOORS" and Category == "FrontdoorAccessLog"

El siguiente fragmento de código es un ejemplo de entrada del registro:

{
  "time": "2020-06-09T22:32:17.8383427Z",
  "category": "FrontDoorAccessLog",
  "operationName": "Microsoft.Cdn/Profiles/AccessLog/Write",
  "properties": {
    "trackingReference": "08Q3gXgAAAAAe0s71BET/QYwmqtpHO7uAU0pDRURHRTA1MDgANjMxNTAwZDAtOTRiNS00YzIwLTljY2YtNjFhNzMyOWQyYTgy",
    "httpMethod": "GET",
    "httpVersion": "2.0",
    "requestUri": "https://wafdemofrontdoorwebapp.azurefd.net:443/?q=%27%20or%201=1",
    "requestBytes": "715",
    "responseBytes": "380",
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4157.0 Safari/537.36 Edg/85.0.531.1",
    "clientIp": "xxx.xxx.xxx.xxx",
    "socketIp": "xxx.xxx.xxx.xxx",
    "clientPort": "52097",
    "timeTaken": "0.003",
    "securityProtocol": "TLS 1.2",
    "routingRuleName": "WAFdemoWebAppRouting",
    "rulesEngineMatchNames": [],
    "backendHostname": "wafdemowebappuscentral.azurewebsites.net:443",
    "sentToOriginShield": false,
    "httpStatusCode": "403",
    "httpStatusDetails": "403",
    "pop": "SJC",
    "cacheStatus": "CONFIG_NOCACHE"
  }
}
{
  "time": "2020-06-09T22:32:17.8383427Z",
  "category": "FrontdoorAccessLog",
  "operationName": "Microsoft.Network/FrontDoor/AccessLog/Write",
  "properties": {
    "trackingReference": "08Q3gXgAAAAAe0s71BET/QYwmqtpHO7uAU0pDRURHRTA1MDgANjMxNTAwZDAtOTRiNS00YzIwLTljY2YtNjFhNzMyOWQyYTgy",
    "httpMethod": "GET",
    "httpVersion": "2.0",
    "requestUri": "https://wafdemofrontdoorwebapp.azurefd.net:443/?q=%27%20or%201=1",
    "requestBytes": "715",
    "responseBytes": "380",
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4157.0 Safari/537.36 Edg/85.0.531.1",
    "clientIp": "xxx.xxx.xxx.xxx",
    "socketIp": "xxx.xxx.xxx.xxx",
    "clientPort": "52097",
    "timeTaken": "0.003",
    "securityProtocol": "TLS 1.2",
    "routingRuleName": "WAFdemoWebAppRouting",
    "rulesEngineMatchNames": [],
    "backendHostname": "wafdemowebappuscentral.azurewebsites.net:443",
    "sentToOriginShield": false,
    "httpStatusCode": "403",
    "httpStatusDetails": "403",
    "pop": "SJC",
    "cacheStatus": "CONFIG_NOCACHE"
  }
}

Registros de WAF

El registro FrontDoorWebApplicationFirewallLog incluye solicitudes que coinciden con una regla de WAF.

El registro FrontdoorWebApplicationFirewallLog incluye cualquier solicitud que coincida con una regla de WAF.

En la tabla siguiente se muestran los valores registrados para cada parámetro.

Propiedad Descripción
Acción Acción realizada en la solicitud. Los registros incluyen solicitudes con todas las acciones. Las acciones son:
  • Allow y allow: se permitió que la solicitud continuara procesando.
  • Block y block: la solicitud coincide con una regla WAF configurada para bloquear la solicitud. Como alternativa, se alcanzó el umbral de puntuación de anomalías y se bloqueó la solicitud.
  • Log y log: la solicitud coincide con una regla WAF configurada para usar la acción Log.
  • AnomalyScoring y logandscore: la solicitud coincide con una regla de WAF. La regla contribuye a la puntuación de anomalías. Es posible que la solicitud se bloquee o no en función de otras reglas que se ejecuten en la misma solicitud.
ClientIP Dirección IP del cliente que realizó la solicitud. Si había un encabezado X-Forwarded-For en la solicitud, la dirección IP del cliente se toma de ese campo de encabezado.
ClientPort Puerto IP del cliente que realizó la solicitud.
Detalles Más detalles sobre la solicitud, incluidas las amenazas detectadas.
matchVariableName: nombre del parámetro HTTP de la solicitud coincidente, por ejemplo, nombres de encabezados (hasta 100 caracteres como máximo).
matchVariableValue: valores que desencadenaron la coincidencia (hasta 100 caracteres como máximo).
Host Encabezado Host de la solicitud.
Directiva El nombre de la política WAF que procesó la solicitud.
PolicyMode Modo de operaciones de la directiva WAF. Los valores posibles son Prevention y Detection.
RequestUri URI completo de la solicitud.
RuleName El nombre de la regla de WAF que coincidió con la solicitud.
SocketIp La dirección IP de origen que WAF detectó. Esta dirección IP se basa en la sesión TCP y no tiene en cuenta ningún encabezado de solicitud.
TrackingReference La cadena de referencia única que identifica una solicitud servida por Front Door. Este valor se envía al cliente en el encabezado de respuesta X-Azure-Ref. Use este campo cuando busque una solicitud específica en el registro.

En el siguiente ejemplo de consulta se muestran las solicitudes que bloqueó el WAF de Azure Front Door:

AzureDiagnostics 
| where ResourceProvider == "MICROSOFT.CDN" and Category == "FrontDoorWebApplicationFirewallLog" 
| where action_s == "Block" 
AzureDiagnostics
| where ResourceType == "FRONTDOORS" and Category == "FrontdoorWebApplicationFirewallLog"
| where action_s == "Block"

En el fragmento de código a continuación se muestra una entrada de registro de ejemplo, que incluye la razón por la que se bloqueó la solicitud:

{
  "time": "2020-06-09T22:32:17.8376810Z",
  "category": "FrontdoorWebApplicationFirewallLog",
  "operationName": "Microsoft.Cdn/Profiles/Write",
  "properties": {
    "clientIP": "xxx.xxx.xxx.xxx",
    "clientPort": "52097",
    "socketIP": "xxx.xxx.xxx.xxx",
    "requestUri": "https://wafdemofrontdoorwebapp.azurefd.net:443/?q=%27%20or%201=1",
    "ruleName": "Microsoft_DefaultRuleSet-1.1-SQLI-942100",
    "policy": "WafDemoCustomPolicy",
    "action": "Block",
    "host": "wafdemofrontdoorwebapp.azurefd.net",
    "trackingReference": "08Q3gXgAAAAAe0s71BET/QYwmqtpHO7uAU0pDRURHRTA1MDgANjMxNTAwZDAtOTRiNS00YzIwLTljY2YtNjFhNzMyOWQyYTgy",
    "policyMode": "prevention",
    "details": {
      "matches": [
        {
          "matchVariableName": "QueryParamValue:q",
          "matchVariableValue": "' or 1=1"
        }
      ]
    }
  }
}
{
  "time": "2020-06-09T22:32:17.8376810Z",
  "category": "FrontdoorWebApplicationFirewallLog",
  "operationName": "Microsoft.Network/FrontDoorWebApplicationFirewallLog/Write",
  "properties": {
    "clientIP": "xxx.xxx.xxx.xxx",
    "clientPort": "52097",
    "socketIP": "xxx.xxx.xxx.xxx",
    "requestUri": "https://wafdemofrontdoorwebapp.azurefd.net:443/?q=%27%20or%201=1",
    "ruleName": "Microsoft_DefaultRuleSet-1.1-SQLI-942100",
    "policy": "WafDemoCustomPolicy",
    "action": "Block",
    "host": "wafdemofrontdoorwebapp.azurefd.net",
    "trackingReference": "08Q3gXgAAAAAe0s71BET/QYwmqtpHO7uAU0pDRURHRTA1MDgANjMxNTAwZDAtOTRiNS00YzIwLTljY2YtNjFhNzMyOWQyYTgy",
    "policyMode": "prevention",
    "details": {
      "matches": [
        {
          "matchVariableName": "QueryParamValue:q",
          "matchVariableValue": "' or 1=1"
        }
      ]
    }
  }
}

Pasos siguientes

Obtenga más información acerca de Azure Front Door.