Configurer des listes d’exclusions de pare-feu d'applications web

Il peut arriver que l’Azure Web Application Firewall d’Azure Front Door bloque une demande légitime. Au moment de régler votre pare-feu d’applications web (WAF), vous pouvez le configurer de sorte qu’il autorise les demandes de votre application. Les listes d’exclusion WAF vous permettent d’omettre certains attributs de demande dans une évaluation WAF. Le reste de la requête est évalué comme étant normal. Pour plus d’informations sur les listes d’exclusions, consultez Listes d’exclusions Azure Web Application Firewall avec Azure Front Door.

Une liste d’exclusions peut être configurée à l’aide d’Azure PowerShell, d’Azure CLI, de l’API REST, de Bicep, de modèles Azure Resource Manager et du portail Azure.

Scénario

Supposez que vous avez créé une API. Vos clients envoient des demandes à votre API qui incluent des en-têtes avec des noms comme userid et user-id.

Pendant le réglage de votre pare-feu WAF, vous remarquez que certaines demandes légitimes avaient été bloquées, car les en-têtes utilisateur contenaient des séquences de caractères que WAF a prises pour des attaques par injection de code SQL. Plus précisément, l’ID de règle 942230 détecte les en-têtes des demandes et bloque celle-ci. La règle 942230 fait partie du groupe de règles SQLI.

Vous décidez de créer une exclusion pour permettre à ces demandes légitimes de passer sans être bloquées par WAF.

Créer une exclusion

  1. Ouvrez votre stratégie WAF Azure Front Door.

  2. Sélectionnez Règles managées>Gérer les exclusions.

    Capture d’écran du portail Azure montrant la page Règles managées de la stratégie WAF, avec le bouton Gérer les exclusions mis en évidence.

  3. Sélectionnez Ajouter.

    Capture d’écran du portail Azure avec le bouton Ajouter une liste d'exclusions.

  4. Configurez la section S’applique à de l’exclusion :

    Champ Valeur
    Ensemble de règles Microsoft_DefaultRuleSet_2.0
    Groupe de règles SQLI
    Règle 942230 Détecte des tentatives d’injection de code SQL conditionnel
  5. Configurez les conditions de correspondance d’exclusion :

    Champ Valeur
    Variable de correspondance Nom de l’en-tête de la demande
    Opérateur Starts With (Commence par)
    Sélecteur Utilisateur
  6. Examinez l’exclusion, qui doit se présenter comme dans la capture d’écran suivante :

    Capture d’écran du portail Azure montrant la configuration de l’exclusion.

    Cette exclusion s’applique à tous les en-têtes de demandes qui commencent par le mot user. Sachant que la condition de correspondance ne respecte pas la casse, les en-têtes qui commencent par User sont également visés par l’exclusion. Si la règle WAF 942230 détecte un risque dans ces valeurs d’en-tête, elle ignore l’en-tête et continue.

  7. Sélectionnez Enregistrer.

Définir un sélecteur d’exclusion

Utilisez l’applet de commande New-AzFrontDoorWafManagedRuleExclusionObject pour définir un nouveau sélecteur d’exclusion.

L’exemple suivant identifie les en-têtes de demandes qui commencent par le mot user. Sachant que la condition de correspondance ne respecte pas la casse, les en-têtes qui commencent par User sont également visés par l’exclusion.

$exclusionSelector = New-AzFrontDoorWafManagedRuleExclusionObject `
  -Variable RequestHeaderNames `
  -Operator StartsWith `
  -Selector 'user'

Définir une exclusion par règle

Utilisez l’applet de commande New-AzFrontDoorWafManagedRuleOverrideObject pour définir une nouvelle exclusion par règle, qui inclut le sélecteur que vous avez créé à l’étape précédente.

L’exemple suivant crée une exclusion pour l’ID de règle 942230.

$exclusion = New-AzFrontDoorWafManagedRuleOverrideObject `
  -RuleId '942230' `
  -Exclusion $exclusionSelector

Appliquer l’exclusion au groupe de règles

Utilisez l’applet de commande New-AzFrontDoorWafRuleGroupOverrideObject pour créer un remplacement de groupe de règles, qui applique l’exclusion au groupe de règles approprié.

L’exemple suivant utilise le groupe de règles SQLI, car ce groupe contient l’ID de règle 942230.

$ruleGroupOverride = New-AzFrontDoorWafRuleGroupOverrideObject `
  -RuleGroupName 'SQLI' `
  -ManagedRuleOverride $exclusion

Configurer l’ensemble de règles managé

Utilisez l’applet de commande New-AzFrontDoorWafManagedRuleObject pour configurer l’ensemble de règles managées, y compris le remplacement de groupe de règles que vous avez créé à l’étape précédente.

L’exemple suivant configure l’ensemble de règles DRS 2.0 avec le remplacement de groupe de règles et son exclusion.

$managedRuleSet = New-AzFrontDoorWafManagedRuleObject `
  -Type 'Microsoft_DefaultRuleSet' `
  -Version '2.0' `
  -Action Block `
  -RuleGroupOverride $ruleGroupOverride

Appliquer la configuration d’ensemble de règles managées au profil WAF

Utilisez la cmdlet Update-AzFrontDoorWafPolicy pour mettre à jour votre stratégie WAF afin d’inclure la configuration que vous avez créée. Vérifiez que vous utilisez le nom de groupe de ressources et le nom de stratégie WAF appropriés pour votre propre environnement.

Update-AzFrontDoorWafPolicy `
  -ResourceGroupName 'FrontDoorWafPolicy' `
  -Name 'WafPolicy'
  -ManagedRule $managedRuleSet

Créer une exclusion

Utilisez la commande az network front-door waf-policy managed-rules exclusion add pour mettre à jour votre stratégie WAF en y ajoutant une nouvelle exclusion.

L’exclusion identifie les en-têtes de demandes qui commencent par le mot user. Sachant que la condition de correspondance ne respecte pas la casse, les en-têtes qui commencent par User sont également visés par l’exclusion.

Vérifiez que vous utilisez le nom de groupe de ressources et le nom de stratégie WAF appropriés pour votre propre environnement.

az network front-door waf-policy managed-rules exclusion add \
  --resource-group FrontDoorWafPolicy \
  --policy-name WafPolicy \
  --type Microsoft_DefaultRuleSet \
  --rule-group-id SQLI \
  --rule-id 942230 \
  --match-variable RequestHeaderNames \
  --operator StartsWith \
  --value user

Exemple de fichier Bicep

L'exemple de fichier Bicep suivant montre comment :

  • Créer un profil WAF Azure Front Door.
  • Activez l’ensemble de règles DRS 2.0.
  • Configurez une exclusion pour la règle 942230, qui existe dans le groupe de règles SQLI. Cette exclusion s’applique à tous les en-têtes de demandes qui commencent par le mot user. Sachant que la condition de correspondance ne respecte pas la casse, les en-têtes qui commencent par User sont également visés par l’exclusion. Si la règle WAF 942230 détecte un risque dans ces valeurs d’en-tête, elle ignore l’en-tête et continue.
param wafPolicyName string = 'WafPolicy'

@description('The mode that the WAF should be deployed using. In "Prevention" mode, the WAF will block requests it detects as malicious. In "Detection" mode, the WAF will not block requests and will simply log the request.')
@allowed([
  'Detection'
  'Prevention'
])
param wafMode string = 'Prevention'

resource wafPolicy 'Microsoft.Network/frontDoorWebApplicationFirewallPolicies@2022-05-01' = {
  name: wafPolicyName
  location: 'Global'
  sku: {
    name: 'Premium_AzureFrontDoor'
  }
  properties: {
    policySettings: {
      enabledState: 'Enabled'
      mode: wafMode
    }
    managedRules: {
      managedRuleSets: [
        {
          ruleSetType: 'Microsoft_DefaultRuleSet'
          ruleSetVersion: '2.0'
          ruleSetAction: 'Block'
          ruleGroupOverrides: [
            {
              ruleGroupName: 'SQLI'
              rules: [
                {
                  ruleId: '942230'
                  enabledState: 'Enabled'
                  action: 'AnomalyScoring'
                  exclusions: [
                    {
                      matchVariable: 'RequestHeaderNames'
                      selectorMatchOperator: 'StartsWith'
                      selector: 'user'
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    }
  }
}

Étapes suivantes

En savoir plus sur Azure Front Door.