Monitoraggio e registrazione di Web application firewall di Azure

Web application firewall di Azure in Frontdoor di Azure offre dati di telemetria e registrazione estesi per comprendere le prestazioni del web application firewall (WAF) e le azioni eseguite.

Il log WAF di Frontdoor di Azure è integrato con Monitoraggio di Azure. Monitoraggio di Azure consente di tenere traccia delle informazioni di diagnostica, inclusi avvisi e log waf. È possibile configurare il monitoraggio waf all'interno della risorsa frontdoor di Azure nella portale di Azure nella scheda Diagnostica, tramite l'infrastruttura come approcci al codice o usando direttamente Monitoraggio di Azure.

Metriche

Frontdoor di Azure registra automaticamente le metriche per comprendere il comportamento del WAF.

Per accedere alle metriche di WAF:

  1. Accedere al portale di Azure e passare al profilo frontdoor di Azure.
  2. Nel riquadro all'estrema sinistra in Monitoraggio selezionare la scheda Metriche .
  3. Aggiungere la metrica Conteggio richieste web application firewall per tenere traccia del numero di richieste che corrispondono alle regole WAF.

È possibile creare filtri personalizzati in base ai tipi di azione e ai nomi delle regole. Le metriche includono le richieste con tutte le azioni tranne Log.

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

Log e diagnostica

Frontdoor di Azure WAF fornisce report dettagliati su ogni richiesta e ogni minaccia rilevata. La registrazione è integrata con i log e gli avvisi di diagnostica di Azure usando i log di Monitoraggio di Azure.

I log non sono abilitati per impostazione predefinita. È necessario abilitare in modo esplicito i log. È possibile configurare i log nel portale di Azure usando la scheda Impostazioni di diagnostica.

Screenshot that shows how to enable the WAF logs.

Se la registrazione è abilitata e viene attivata una regola WAF, tutti i modelli di corrispondenza vengono registrati in testo normale per analizzare ed eseguire il debug del comportamento dei criteri WAF. È possibile usare le esclusioni per ottimizzare le regole ed escludere tutti i dati da escludere dai log. Per altre informazioni, vedere Elenchi di esclusione di Web application firewall in Frontdoor di Azure.

Frontdoor di Azure offre due tipi di log: log di accesso e log WAF.

Accedere ai log

Il log FrontDoorAccessLog include tutte le richieste che passano attraverso Frontdoor di Azure. Per altre informazioni sul log di accesso di Frontdoor di Azure, incluso lo schema di log, vedere Monitorare le metriche e i log in Frontdoor di Azure.

Il log FrontdoorAccessLog include tutte le richieste che passano attraverso Frontdoor di Azure. Per altre informazioni sul log di accesso di Frontdoor di Azure, incluso lo schema di log, vedere Monitorare le metriche e i log in Frontdoor di Azure (versione classica).

La query di esempio seguente restituisce le voci del log di accesso:

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

Il frammento di codice seguente mostra una voce di log di esempio:

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

Log WAF

Il log FrontDoorWebApplicationFirewallLog include le richieste che corrispondono a una regola WAF.

Il log FrontdoorWebApplicationFirewallLog include qualsiasi richiesta corrispondente a una regola WAF.

Nella tabella seguente vengono illustrati i valori registrati per ogni richiesta.

Proprietà Descrizione
Azione Azione eseguita sulla richiesta. I log includono le richieste con tutte le azioni. Le azioni sono:
  • Allow e allow: la richiesta è stata autorizzata a continuare l'elaborazione.
  • Block e block: la richiesta corrisponde a una regola WAF configurata per bloccare la richiesta. In alternativa, è stata raggiunta la soglia di assegnazione dei punteggi anomalie e la richiesta è stata bloccata.
  • Log e log: la richiesta corrisponde a una regola WAF configurata per l'uso dell'azione Log .
  • AnomalyScoring e logandscore: la richiesta corrisponde a una regola WAF. La regola contribuisce al punteggio di anomalia. La richiesta potrebbe o non essere bloccata a seconda di altre regole eseguite nella stessa richiesta.
ClientIP Indirizzo IP del client che ha eseguito la richiesta. Se nella richiesta è presente un'intestazione X-Forwarded-For , l'indirizzo IP del client viene invece ricavato da tale campo di intestazione.
ClientPort Porta IP del client che ha effettuato la richiesta.
Dettagli Altri dettagli sulla richiesta, incluse eventuali minacce rilevate.
matchVariableName: nome del parametro HTTP della richiesta corrispondente, ad esempio nomi di intestazione (fino a un massimo di 100 caratteri).
matchVariableValue: valori che hanno attivato la corrispondenza (fino a 100 caratteri massimo).
Host Intestazione Host della richiesta.
Criteri Nome del criterio WAF che ha elaborato la richiesta.
Policymode Modalità operativa dei criteri WAF. I valori possibili sono Prevention e Detection.
RequestUri URI completo della richiesta.
RuleName Nome della regola WAF corrispondente alla richiesta.
SocketIP Indirizzo IP di origine visualizzato da WAF. Questo indirizzo IP si basa sulla sessione TCP e non considera le intestazioni di richiesta.
TrackingReference Stringa di riferimento univoca che identifica una richiesta servita da Frontdoor di Azure. Questo valore viene inviato al client nell'intestazione della X-Azure-Ref risposta. Usare questo campo quando si cerca una richiesta specifica nel log.

La query di esempio seguente mostra le richieste bloccate dal WAF di Frontdoor di Azure:

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

Il frammento di codice seguente mostra una voce di log di esempio, incluso il motivo per cui la richiesta è stata bloccata:

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

Passaggi successivi

Altre informazioni su Frontdoor di Azure.