Pourquoi AWS WAF peut-il soumettre à un défi un bot sans jeton valide ?

L'équipe Citead, mis à jour le

En bref. AWS WAF peut soumettre les requêtes répétées sans jeton à un défi au moyen de la règle de cumul de Bot Control de niveau ciblé.

Définition : AWS WAF peut soumettre une requête sans jeton valide à un défi (challenge), car le groupe de règles Bot Control de niveau ciblé comprend une action Challenge pour une condition portant sur un cumul de requêtes sans jeton. La règle qui examine chaque requête sans jeton utilise Count, tandis que la règle de cumul soumet le client à un défi après des requêtes répétées sans jeton accepté.

Points clés

Quelle règle ciblée déclenche le défi ?

Les règles Bot Control de niveau ciblé portent un nom commençant par TGT_. AWS décrit ce niveau de protection comme ajoutant la détection des bots sophistiqués qui ne s’identifient pas et combinant la limitation de débit avec des CAPTCHA et des défis exécutés en arrière-plan dans le navigateur.

La règle qui examine directement l’absence de jeton est TGT_TokenAbsent. Elle inspecte les requêtes provenant de bots qu’AWS n’a pas vérifiés lorsqu’elles ne comportent pas de jeton de défi valide. Son action documentée est Count et elle ajoute l’étiquette awswaf:managed:aws:bot-control:TGT_TokenAbsent.

Le défi provient de TGT_VolumetricIpTokenAbsent. Cette règle examine le trafic de bots non vérifiés lorsqu’au moins 5 requêtes d’un même client au cours des 5 dernières minutes ne comportent pas de jeton de défi valide. Son action est Challenge. AWS précise aussi que la règle compte les requêtes sans jeton pour chaque adresse IP cliente : une requête ultérieure peut donc correspondre à la règle même si elle contient un jeton, lorsque le même client a récemment dépassé le seuil de requêtes sans jeton.

TGT_TokenAbsent: Count
TGT_VolumetricIpTokenAbsent: Challenge

Que fait l’action Challenge en l’absence de jeton ?

AWS explique qu’une règle Challenge ou CAPTCHA vérifie d’abord l’état du jeton et la durée d’immunité configurée. Un jeton valide est traité de façon similaire à l’action Count, puis l’évaluation se poursuit. Un jeton absent, invalide ou expiré arrête l’évaluation de la web ACL et empêche la requête d’atteindre sa destination.

Pour la réponse Challenge, AWS documente l’en-tête x-amzn-waf-action avec la valeur challenge et le statut HTTP 202 Request Accepted. Lorsque la requête accepte le HTML, la réponse comprend une page interstitielle JavaScript contenant un script de défi. Une fois le défi réussi, la page interstitielle initialise un jeton si le client n’en possède pas, puis le met à jour avec l’horodatage de résolution du défi.

x-amzn-waf-action: challenge
HTTP status: 202 Request Accepted

La requête qui déclenche la règle de cumul reçoit donc une réponse de défi. La règle peut déclencher l’action Challenge sans jeton valide préalable ; cette action demande au client d’en obtenir un ou de l’actualiser.

Quelles autres règles ciblées inspectent les jetons ?

La référence des règles gérées répertorie aussi des signaux fondés sur les jetons et des contrôles de réutilisation. TGT_VolumetricSession et TGT_VolumetricSessionMaximum inspectent le volume de requêtes de la session lorsqu’une requête possède un jeton ; leurs actions documentées sont CAPTCHA et Block. TGT_SignalAutomatedBrowser, TGT_SignalBrowserAutomationExtension et TGT_SignalBrowserInconsistency inspectent les données du jeton ou du navigateur et utilisent CAPTCHA.

Les règles de réutilisation des jetons examinent l’utilisation d’un même jeton depuis plusieurs emplacements au cours des 5 dernières minutes. Les familles IP, pays et ASN suivent chacune le même schéma d’actions : Low utilise Count, Medium utilise CAPTCHA et High utilise Block. La référence donne des seuils distincts pour chaque famille : plus de 2, 5 et 8 adresses IP pour la famille IP, plus de 1, 2 et 3 pays pour la famille pays, et plus de 1, 2 et 3 ASN pour la famille ASN.

Comment un site peut-il bloquer une requête sans jeton ?

AWS indique que le niveau ciblé de Bot Control déclenche un défi lorsque la condition de requêtes répétées est remplie et laisse une requête sans jeton valide sortir de l’évaluation du groupe de règles gérées. Une règle distincte peut s’exécuter immédiatement après le groupe géré et rechercher l’étiquette de jeton awswaf:managed:token:absent ; l’exemple d’AWS utilise une instruction LabelMatchStatement et une action Block. La politique relative aux jetons absents repose ainsi sur une règle distincte de la web ACL, plutôt que sur une interprétation de l’action Count de TGT_TokenAbsent.

Termes associés

Questions fréquentes

Chaque requête sans jeton reçoit-elle un défi ?

Non. AWS documente TGT_TokenAbsent avec l’action Count. Le niveau de protection ciblé applique Challenge au moyen de TGT_VolumetricIpTokenAbsent lorsque la condition documentée de requêtes répétées est remplie.

Que se passe-t-il après la résolution du défi ?

Après votre réponse réussie, la page interstitielle du défi initialise un jeton si vous n’en possédez pas déjà et le met à jour avec l’horodatage de résolution du défi. Une requête ultérieure peut alors présenter ce jeton pour qu’AWS WAF le vérifie.

Pouvez-vous bloquer immédiatement les requêtes sans jeton ?

Oui. AWS documente une règle distincte, placée après le groupe de règles gérées, qui recherche awswaf:managed:token:absent et utilise Block. L’exemple limite la règle au point de terminaison et à la méthode protégés.

Sources

  1. AWS, « AWS WAF Bot Control rule group », sans date
  2. AWS, « Blocking requests that don't have a valid AWS WAF token », sans date
  3. AWS, « CAPTCHA and Challenge action behavior », sans date
  4. AWS, « Token use in AWS WAF intelligent threat mitigation », sans date

Vérifiez comment une page se lit pour les moteurs de réponse. Ouvrir l’analyseur de score GEO

Testez une page et voyez quoi corriger en premier

L'analyse prend en général moins de 10 secondes et ne demande pas de compte.

400 000+ pages notées dans le benchmark public