Comment les métriques et les journaux sont-ils formatés pour l'action de règle de comptage dans AWS WAF ?

Dernière mise à jour : 27/07/2022

J'ai configuré AWS WAF et certaines des règles de ma liste ACL web se trouvent dans l'action de comptage. Comment puis-je analyser les métriques et les journaux Amazon CloudWatch pour les règles de l'action de règle de comptage ?

Brève description

Vous pouvez utiliser l'action de comptage des règles pour tester les règles avant de les mettre en œuvre avec leurs paramètres d'action normaux. AWS WAF évalue les demandes en fonction des règles dans l'action des règles de comptage et signale les correspondances dans les métriques, les exemples de demandes et les journaux.

Vous pouvez également utiliser l'action de règle de comptage pour résoudre les règles qui génèrent des faux positifs. Les faux positifs se produisent lorsqu'une règle ou un groupe de règles bloque le trafic que vous ne vous attendiez pas à ce qu'il bloque. Si vous identifiez une règle qui bloque des demandes que vous voulez autoriser, vous pouvez mettre à jour l'action de cette règle pour compter. Cela empêche la règle de traiter vos demandes. Pour plus d'informations sur la détection et l'atténuation des faux positifs, voir Comment puis-je détecter les faux positifs causés par les règles gérées par AWS et les ajouter à une liste blanche ?

Résolution

Pour comprendre comment les métriques et les journaux sont formatés pour l'action de la règle de comptage, considérez les trois scénarios suivants :

  1. Configurer l'action de règle pour une règle personnalisée en mode de comptage.
  2. Configurer l'action de règle pour les règles individuelles en mode de comptage dans un groupe de règle de règles gérées par AWS.
  3. Remplacez l'action d'un groupe de règles entier à compter.

Configurer l'action de règle pour une règle personnalisée en mode de comptage

Exemple

Vous avez une liste ACL web (Test1-ACL) qui a une seule règle personnalisée ( Geo-Count) avec une action de règle de comptage. La règle Geo-Count compte la demande si elle provient des États-Unis. Si l'adresse IP du client appartient à un autre pays, l'action par défaut de l'ACL web avec une action Autoriser est mise en correspondance.

Voici la représentation JSON de cette règle :

{
  "Name": "Geo-Count",
  "Priority": 0,
  "Statement": {
    "GeoMatchStatement": {
      "CountryCodes": [
        "US"
      ]
    }
  },
  "Action": {
    "Count": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "Geo-Count"
  }
}

Si la demande provient d'une adresse IP client située aux États-Unis, voici ce qui se produit :

  • La demande est prise en compte.
  • La métrique CloudWatch de la règle personnalisée Geo-Count affiche un point de données dans la métrique CountedRequests.
    Remarque : CloudWatch rapporte la métrique CountedRequests uniquement lorsqu'il y a une valeur non nulle. Pour afficher les données, changez la statistique en Somme dans l'onglet Métriques graphiques de la console CloudWatch.
  • Comme Geo-Count est une règle personnalisée avec l'action Count, AWS WAF prend en compte la demande.
  • Ensuite, AWS WAF évalue la demande par rapport à l'action par défaut de la liste ACL web. Puisque l'action par défaut de la liste ACL web est configurée pour autoriser, la demande est autorisée.
  • Un point de données pour cette action figure dans la métrique AllowedRequests pour la liste ACL web.

Pour plus d'informations sur les métriques et les dimensions contenues dans l'espace de noms AWS WAF, voir les métriques et les dimensions AWS WAF.

Lorsque vous mettez à jour l'action d'une règle personnalisée sur Compter, la règle est considérée comme une règle sans fin du point de vue de la journalisation. Donc, si la demande correspond à une règle personnalisée en mode comptage, les champs suivants sont journalisés :

  • nonTerminatingMatchingRules : La liste des règles sans fin qui correspondent à la demande.
  • ruleID : ID de la règle qui correspondait à la demande et ne se terminait pas.
  • action : C'est toujours COMPTER.
  • ruleMatchDetails : informations détaillées sur la règle correspondant à la demande. Ce champ n'est rempli que pour les règles de correspondance relatives aux injections SQL (SQLi) et aux scripts inter-sites (XSS).

Si la règle Geo-Count correspond à la demande, les journaux montrent les détails de nonTerminatingMatchingRules comme indiqué dans l'exemple suivant :

"nonTerminatingMatchingRules": [{
  "ruleId": "Geo-Count",
  "action": "COUNT",
  "ruleMatchDetails": [

  ]
}]

Pour plus d'informations sur tous les champs de journalisation possibles, reportez-vous à Champs de journal.

Pour activer la journalisation d'une liste ACL web, reportez-vous à Gestion de la journalisation pour une liste ACL web.

Configurer l'action de règle pour les règles individuelles en mode de comptage dans un groupe de règle de règles gérées par AWS

Vous pouvez remplacer les actions des règles d'un groupe de règle, en les configurant pour compter certaines ou toutes les règles. Dans le cas des actions de règle configurées dans le groupe de règle avec un paramètre autre que « compter », le remplacement modifie cette action afin que seules les demandes correspondantes soient comptées.

Si une demande web correspond à la règle, AWS WAF traite la correspondance comme un comptage et poursuit ensuite l'évaluation des règles suivantes dans le groupe de règle.

Pour plus d'informations sur la configuration de l'action de règle à compter dans un groupe de règle, reportez-vous à Configuration des actions de règle à compter dans un groupe de règle.

Exemple

Vous avez une liste ACL web (Test2-ACL) qui inclut un groupe de règles AWS Managed Rules (AWSManagedRulesKnownBadInputsRuleSet). Il n'y a pas d'autres règles dans cette liste ACL web et l'action par défaut de la liste ACL web est configurée avec l'action Autoriser.

Vous mettez à jour la règle Log4JRCE dans le groupe de règle AWSManagedRulesKnownBadInputsRuleSet pour l'action Compter. Si un composant (comme un URI, une chaîne de requête, etc.) de la requête du client présente une vulnérabilité Log4j, cette demande est comptée par la règle Log4JRCE. Si la demande ne correspond à aucune autre règle du groupe de règle, elle est autorisée par l'action par défaut de la liste ACL web.

Voici la représentation JSON de cette règle :

{
  "Name": "AWS-AWSManagedRulesKnownBadInputsRuleSet",
  "Priority": 0,
  "Statement": {
    "ManagedRuleGroupStatement": {
      "VendorName": "AWS",
      "Name": "AWSManagedRulesKnownBadInputsRuleSet",
      "ExcludedRules": [
        {
          "Name": "Log4JRCE"
        }
      ]
    }
  },
  "OverrideAction": {
    "None": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "AWS-AWSManagedRulesKnownBadInputsRuleSet"
  }
}

Si vous configurez l'action de règle pour compter les règles au sein du groupe de règle, ces règles sont considérées comme des règles exclues dans le groupe de règle. Si les métriques sont activées, vous recevez les métriques COMPTER pour chaque règle exclue.

Si la demande correspond à la règle Log4JRCE, voici ce qui se produit :

  • La demande est prise en compte.
  • La métrique CloudWatch pour la règle Log4JRCE affiche un point de données dans la métrique CountedRequests.

Si aucune autre règle du jeu AWSManagedRulesKnownBadInputsRuleSet ne correspond à la demande, voici ce qui se produit :

  • La demande est autorisée par l'action par défaut de la liste ACL web.
  • Un point de données s'affiche dans la métrique AllowedRequests pour la liste ACL web.

Pour les règles exclues, les champs suivants sont capturés dans les journaux AWS WAF :

  • excludedRules : la liste des règles du groupe de règle que vous avez exclues. L'action de ces règles est définie comme Compter.
  • exclusionType : type qui indique que la règle exclue a l'action Compter.
  • ruleID : ID de la règle au sein du groupe de règle qui est exclue.

Si la règle Log4JRCE correspond à la demande, les journaux affichent les détails de excludedRules comme indiqué dans l'exemple suivant :

"ruleGroupList":[
  {
    "ruleGroupId":"AWS#AWSManagedRulesKnownBadInputsRuleSet",
    "terminatingRule":null,
    "nonTerminatingMatchingRules":[
      
      ],
    "excludedRules":[
      {
        "exclusionType":"EXCLUDED_AS_COUNT",
        "ruleId":"Log4JRCE"
      }
    ]
  }
]

Si une règle individuelle dans un groupe de règle est mise à jour en action de règle de comptage, voici ce qui se produit :

  • Les journaux de la demande correspondant à cette règle ne contiennent pas d'action de comptage pour la règle dans le champ nonTerminatingMatchingRules.
  • Les journaux AWS WAF affichent cette règle dans le champ excludedRules.

Remplacer l'action d'un groupe de règles entier à compter

Pour plus d'informations sur la manière de remplacer l'action du groupe de règle à compter, reportez-vous à Remplacer l'action du groupe de règle résultant à compter.

Pour plus d'informations sur la manière de remplacer l'action du groupe de règle à compter, reportez-vous à Remplacer l'action du groupe de règle à compter.

Exemple

Vous avez une liste ACL web (Test3-ACL) qui inclut un groupe de règles AWS Managed Rules (AWSManagedRulesKnownBadInputsRuleSet). Il n'y a pas d'autres règles dans cette liste ACL web et l'action par défaut de la liste ACL web est configurée comme Autoriser. Toutes les règles du groupe de règles AWSManagedRulesKnownBadInputsRuleSet utilisent l'action par défaut définie dans la règle. Cela signifie que les règles de ce groupe de règle ne sont pas configurées pour Compter. Cependant, l'option Remplacer l'action du groupe de règle à compter est activée.

Voici la représentation JSON de cette règle :

{
  "Name": "AWS-AWSManagedRulesKnownBadInputsRuleSet",
  "Priority": 0,
  "Statement": {
    "ManagedRuleGroupStatement": {
      "VendorName": "AWS",
      "Name": "AWSManagedRulesKnownBadInputsRuleSet"
    }
  },
  "OverrideAction": {
    "Count": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "AWS-AWSManagedRulesKnownBadInputsRuleSet"
  }
}

Si un composant (tel qu'un URI, une chaîne de requête, etc.) de la demande du client présente une vulnérabilité Log4j, voici ce qui se produit :

  • La demande est bloquée par la règle Log4JRCE.
  • Comme Block est une action de terminaison, AWS WAF cesse d'évaluer le groupe de règle et renvoie le résultat de l'action de terminaison à la liste ACL web.
  • À ce moment, l'action de groupe de règles de remplacement à compter prend effet. L'action de terminaison du groupe de règle est remplacée par un comptage.
  • AWS WAF poursuit ensuite le traitement du reste des règles dans la liste ACL web.

Si une demande correspond à la règle Log4JRCE (ou à toute autre règle) du groupe de règle AWSManagedRulesKnownBadInputsRuleSet, voici ce qui se produit :

  • CloudWatch affiche un point de données dans la métrique CountedRequests correspondant au nom du groupe de règles AWSManagedRulesKnownBadInputsRuleSet.
  • AWS WAF poursuit le traitement du reste des règles dans la liste ACL web après que le remplacement a été effectué. Donc, la demande correspond finalement à l'action par défaut de la liste ACL web. Cela apparaît comme un point de données dans la métrique AllowedRequests pour la liste ACL web.
  • Dans les journaux AWS WAF, la demande de correspondance contient une action de comptage dans le champ nonTerminatingMatchingRules.
  • En outre, la liste ruleGroupList indique la règle du groupe de règle qui bloquait initialement la demande avant que l'action de terminaison ne soit remplacée par le comptage.
  • Si la règle Log4JRCE correspond à la demande, les journaux affichent les détails ruleGroupList et nonTerminatingMatchingRules, comme indiqué dans l'exemple suivant :
"ruleGroupList": [{
  "ruleGroupId": "AWS#AWSManagedRulesKnownBadInputsRuleSet",
  "terminatingRule": {
      "ruleId": "Log4JRCE",
      "action": "BLOCK",
      "ruleMatchDetails": null
    },
  "nonTerminatingMatchingRules": [

  ],
    "excludedRules": null
  }
],
"rateBasedRuleList": [

],
"nonTerminatingMatchingRules": [{
    "ruleId": "AWS-AWSManagedRulesKnownBadInputsRuleSet",
    "action": "COUNT",
    "ruleMatchDetails": [

  ]
}]

Cet article vous a-t-il été utile ?


Avez-vous besoin d'aide pour une question technique ou de facturation ?