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

La supervisión y el registro del firewall de aplicaciones web de Azure (WAF) se proporcionan mediante el registro y la integración con Azure Monitor y con los registros de Azure Monitor.

Azure Monitor

El registro de WAF de Front Door se integra con Azure Monitor. Azure Monitor le permite hacer un seguimiento de la información de diagnóstico incluidos los registros y las alertas de WAF. Puede configurar la supervisión de WAF dentro del recurso Front Door en el portal, en la pestaña Diagnóstico, mediante enfoques de infraestructura como código o mediante el uso del servicio Azure Monitor directamente.

Desde Azure Portal, vaya al tipo de recurso Front Door. En la pestaña Supervisión/Métricas a la izquierda, puede agregar WebApplicationFirewallRequestCount para realizar un seguimiento del número de solicitudes que coinciden con las reglas de WAF. Se pueden crear filtros personalizados en función de los tipos de acción y los nombres de las reglas.

WAFMetrics

Registros y diagnósticos

WAF con 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. Estos registros pueden integrarse con los registros de Azure Monitor.

WAFDiag

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 más información, consulte Listas de exclusión del firewall de aplicaciones web en Azure Front Door.

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

Registros de acceso

FrontDoorAccessLog incluye todas las solicitudes que pasan por Front Door. Para más información sobre el registro de acceso a Front Door, incluido el esquema de registro, consulte Registros de Azure Front Door.

FrontDoorAccessLog incluye todas las solicitudes que pasan por Front Door. Para más información sobre el registro de acceso a 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"

A continuación se muestra un ejemplo de entrada de 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

FrontDoorWebApplicationFirewallLog incluye solicitudes que coinciden con una regla WAF.

FrontdoorWebApplicationFirewallLog incluye cualquier solicitud que coincida con una regla WAF.

En la tabla siguiente se muestran los valores predeterminados para cada parámetro:

Propiedad Descripción
Acción Acción realizada en la solicitud. Los registros incluyen solicitudes con todas las acciones. Las métricas incluyen solicitudes con todas las acciones excepto Registro.
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 Detalles adicionales 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 atendida 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.

El siguiente ejemplo de consulta muestra las solicitudes que fueron bloqueadas por el WAF de 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"

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