Surveillance et journalisation du pare-feu d’applications web Azure

Azure Web Application Firewall dans Azure Front Door fournit une journalisation et des données de télémétrie complètes pour vous aider à comprendre les performances de votre pare-feu d’application web (WAF) et les actions qu’il entreprend.

Le journal WAF Azure Front Door est intégré à Azure Monitor. Azure Monitor vous permet de suivre les informations de diagnostic, notamment les alertes et journaux WAF. Vous pouvez configurer l’analyse WAF dans la ressource Azure Front Door du portail Azure sous l’onglet Diagnostics, via des approches d’infrastructure en tant que code, ou en utilisant directement Azure Monitor.

Mesures

Azure Front Door enregistre automatiquement des métriques pour vous aider à comprendre le comportement de votre WAF.

Pour accéder aux métriques de votre WAF :

  1. Connectez-vous au portail Azure et accédez à votre profil Azure Front Door.
  2. Dans le volet le plus à gauche, sous Analyse, sélectionnez l’onglet Métriques.
  3. Ajoutez la métrique Nombre de requêtes Web Application Firewall pour suivre le nombre de requêtes qui correspondent aux règles WAF.

Vous pouvez créer des filtres personnalisés en fonction des types d’action et des noms de règle. Les métriques incluent les requêtes avec toutes les actions, sauf le Log.

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

Journaux et diagnostics

Le WAF Azure Front Door fournit des rapports détaillés sur chaque requête et chaque menace qu’il détecte. La journalisation est intégrée aux journaux et alertes de diagnostic Azure à l’aide des journaux Azure Monitor.

Les journaux ne sont pas activés par défaut. Vous devez activer explicitement les journaux d’activité. Vous pouvez configurer les journaux dans le Portail Azure à l’aide de l’onglet Paramètres de diagnostic.

Screenshot that shows how to enable the WAF logs.

Si la journalisation est activée et qu’une règle WAF est déclenchée, tous les modèles correspondants sont enregistrés en texte brut pour vous aider à analyser et à déboguer le comportement de la stratégie WAF. Vous pouvez utiliser des exclusions pour affiner les règles et exclure toutes les données que vous souhaitez exclure des journaux. Pour plus d’informations, consultez Listes d'exclusions du pare-feu d’applications web dans Azure Front Door.

Azure Front Door fournit deux types de journaux : des journaux d’accès et des journaux WAF.

Accéder aux journaux

Le journal FrontDoorAccessLog inclut toutes les requêtes qui passent par Azure Front Door. Pour plus d’informations sur le journal d’accès Azure Front Door, notamment le schéma de journal, consultez Analyser les métriques et les journaux dans Azure Front Door.

Le journal FrontdoorAccessLog inclut toutes les requêtes qui passent par Azure Front Door. Pour plus d’informations sur le journal d’accès Azure Front Door, notamment le schéma de journal, consultez Analyser les métriques et les journaux dans Azure Front Door (classique).

L’exemple de requête suivant retourne les entrées du journal d’accès :

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

L’extrait de code suivant présente un exemple d’entrée de journal :

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

Journaux WAF

Le journal FrontDoorWebApplicationFirewallLog inclut les requêtes qui correspondent à une règle WAF.

Le journal FrontdoorWebApplicationFirewallLog inclut toutes les requêtes qui correspondent à une règle WAF.

Le tableau suivant présente les valeurs consignées pour chaque requête.

Propriété Description
Action Action effectuée sur la requête. Les journaux incluent des demandes avec toutes les actions. Les actions sont les suivantes :
  • Allow et allow : la demande a été autorisée à poursuivre le traitement.
  • Block et block : la requête correspond à une règle WAF configurée pour bloquer la requête. Sinon, le seuil d’anomalie de scoring a été atteint et la demande a été bloquée.
  • Log et log : la requête correspond à une règle WAF configurée pour utiliser l’action Log.
  • AnomalyScoring et logandscore : La requête correspond à une règle WAF. La règle contribue au score d’anomalie. La demande peut être bloquée ou non en fonction d’autres règles qui s’exécutent sur la même requête.
ClientIP Adresse IP du client à l’origine de la demande. S’il existait un en-tête X-Forwarded-For dans la requête, l’adresse IP du client est plutôt reprise dans ce champ d’en-tête.
ClientPort Adresse IP du port du client qui a effectué la requête.
Détails Plus de détails sur la requête, notamment les menaces qui ont été détectées.
matchVariableName : Nom du paramètre HTTP de la requête correspondant, par exemple, noms d’en-tête (100 caractères maximum).
matchVariableValue : Valeurs qui ont déclenché la correspondance (jusqu’à 100 caractères maximum).
Host En-tête Host de la requête.
Policy Nom de la stratégie WAF correspondant à la requête.
PolicyMode Mode d’opération de la stratégie WAF. Les valeurs possibles sont Prevention et Detection.
RequestUri URI complet de la requête.
RuleName Nom de la règle WAF correspondant à la requête.
SocketIP Adresse IP source vue par WAF. Cette adresse IP est basée sur la session TCP et ne prend pas en compte les en-têtes de requête.
TrackingReference Chaîne de référence unique qui identifie une requête prise en charge par Azure Front Door. Cette valeur est envoyée au client dans l’en-tête de réponse X-Azure-Ref. Utilisez ce champ lorsque vous recherchez une requête spécifique dans le journal.

L’exemple de requête suivant présente les requêtes que le WAF Azure Front Door a bloquées :

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

L’extrait de code suivant présente un exemple d’entrée de journal, notamment la raison pour laquelle la requête a été bloquée :

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

Étapes suivantes

En savoir plus sur Azure Front Door.