Monitoramento e registro em log do Firewall de Aplicativo Web do Azure

O WAF (Firewall de Aplicativo Web) do Azure Front Door fornece um registro abrangente em logs e telemetria para ajudá-lo a entender como é o desempenho do WAF e as ações das quais ele necessita.

O log do WAF do Azure Front Door é integrado ao Azure Monitor. O Azure Monitor permite o controle das informações de diagnóstico, incluindo logs e alertas do WAF. Você pode configurar o monitoramento do WAF dentro do recurso do Front Door no portal do Azure na guia Diagnóstico, por meio de abordagens de infraestrutura como código ou diretamente por meio do serviço do Azure Monitor.

Métricas

O Azure Front Door registra automaticamente as métricas para ajudá-lo a entender o comportamento de seu WAF.

Para acessar as métricas do WAF:

  1. Entre no portal do Azure e navegue até o perfil do Azure Front Door.
  2. No painel mais à esquerda, em Monitoramento, selecione a guia Métricas .
  3. Adicione a métrica Contagem de Solicitações do Firewall de Aplicativo Web para acompanhar o número de solicitações que correspondem às regras do WAF.

Você pode criar filtros personalizados com base em tipos de ação e nomes de regras. As métricas incluem solicitações com todas as ações, exceto Log.

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

Configurar logs e diagnósticos

O WAF do Azure Front Door fornece relatórios detalhados sobre cada solicitação e cada ameaça detectada. O registro em log é integrado aos logs e alertas de diagnóstico do Azure através do uso dos logs do Azure Monitor.

Esses logs não são habilitados por padrão. Você precisa habilitar os logs explicitamente. Você pode configurar os logs no portal do Azure usando a guia Configurações de diagnóstico.

Screenshot that shows how to enable the WAF logs.

Se o log estiver habilitado e uma regra de WAF for disparada, todos os padrões correspondentes serão registrados em texto sem formatação para ajudar a analisar e depurar o comportamento da política do WAF. Você pode usar exclusões para ajustar as regras e excluir todos os dados que você deseja que sejam excluídos dos logs. Para obter mais informações, confira Listas de exclusões do Firewall de Aplicativo Web no Azure Front Door.

O Front Door fornece dois tipos de logs: logs de acesso e logs de WAF.

Logs de acesso

O log FrontDoorAccessLog inclui todas as solicitações que passam pelo Azure Front Door. Para obter mais informações sobre o log de acesso do Azure Front Door, incluindo o esquema de log, consulte Métricas de monitoramento e logs no Azure Front Door.

O log FrontdoorAccessLog inclui todas as solicitações que passam pelo Azure Front Door. Para obter mais informações sobre o log de acesso do Front Door, incluindo o esquema de log, consulte Métricas de monitoramento e logs no Azure Front Door (clássico).

A consulta de exemplo a seguir retorna as entradas de log de acesso:

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

O snippet a seguir é um exemplo de entrada de log:

{
  "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"
  }
}

Logs do WAF

O log FrontDoorWebApplicationFirewallLog inclui solicitações que correspondem a uma regra de WAF.

O log FrontdoorWebApplicationFirewallLog inclui quaisquer solicitações que correspondem a uma regra de WAF.

A tabela a seguir mostra os valores registrados em log para cada solicitação.

Propriedade Descrição
Ação Ação executada na solicitação. Os logs incluem solicitações com todas as ações. As ações são:
  • Allow e allow: a solicitação foi autorizada a continuar o processamento.
  • Block e block: a solicitação correspondeu a uma regra WAF configurada para bloquear a solicitação. Como alternativa, o limite de pontuação de anomalias foi atingido e a solicitação foi bloqueada.
  • Log e log: a solicitação correspondeu a uma regra WAF configurada para usar a ação Log.
  • AnomalyScoring e logandscore: a solicitação correspondeu a uma regra de WAF. A regra contribui para a pontuação de anomalias. A solicitação pode ou não ser bloqueada dependendo de outras regras executadas na mesma solicitação.
ClientIP Endereço IP do cliente que fez a solicitação. Se houver um cabeçalho X-Forwarded-For na solicitação, o endereço IP do cliente será obtido desse campo de cabeçalho.
ClientPort Porta IP do cliente que fez a solicitação.
Detalhes Detalhes adicionais sobre a solicitação, incluindo quaisquer ameaças detectadas.
matchVariableName: nome do parâmetro HTTP da solicitação correspondente, por exemplo, nomes de cabeçalho (máximo de caracteres 100).
matchVariableValue: valores que dispararam a correspondência (até 100 caracteres no máximo).
Host O cabeçalho Host da solicitação.
Política O nome da política do WAF que processou à solicitação.
PolicyMode Modo de operações da política do WAF. Os valores possíveis são Prevention e Detection.
RequestUri O URI completo da solicitação.
RuleName O nome da regra do WAF com a qual a solicitação foi correspondida.
SocketIP O endereço IP de origem visto pelo WAF. Esse endereço IP é baseado na sessão TCP e não considera nenhum cabeçalho de solicitação.
TrackingReference A cadeia de caracteres de referência exclusiva que identifica uma solicitação atendida pelo Azure Front Door. Esse valor é enviado ao cliente no cabeçalho de resposta X-Azure-Ref. Use esse campo ao pesquisar uma solicitação específica no log.

A consulta de exemplo a seguir mostra as solicitações que foram bloqueadas pelo WAF do 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"

Veja a seguir um exemplo de entrada de log de exemplo, incluindo o motivo pelo qual a solicitação foi bloqueada:

{
  "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"
        }
      ]
    }
  }
}

Próximas etapas

Saiba mais sobre o Azure Front Door.