Skip to main content
Blog
Blog

Attraper les bots qui ne veulent pas l'être : au cœur d'une pile de détection neuronale à deux étages

Comment une pile neuronale à deux étages attrape navigateurs furtifs, scrapers résidentiels et agents LLM qui déjouent l'empreinte, et ses limites.

Jun 22, 2026 17 min read
Attraper les bots qui ne veulent pas l'être : au cœur d'une pile de détection neuronale à deux étages

TL;DR

La plupart du trafic automatisé est facile à arrêter. Une expression régulière sur le user-agent et un CAPTCHA attrapent le bas du marché. Le trafic qui compte ne vit pas là. Les navigateurs corrigés pour la furtivité, les scrapers en proxy résidentiel et les agents pilotés par LLM font tourner de vrais moteurs de navigateur, portent des empreintes propres et déplacent un pointeur comme le ferait une personne. Une empreinte propre ne prouve pas un humain, et une adresse de centre de données ne prouve pas un bot.

Ceci est un rapport de terrain sur une pile de détection bâtie pour cet adversaire : une couche de règles déterministe plus deux modèles neuronaux compacts, l'un lisant les signaux d'empreinte et de réseau, l'autre lisant le comportement, combinés par un OU logique. L'embedding figé du modèle comportemental sépare les bots des humains presque parfaitement. Une recherche sur 16 architectures montre que le plafond de performance vient du signal, pas du modèle. Et le résultat honnête : sur la population de production complète, à un budget strict de faux positifs, le recall se situe sous la barre que la pile franchit sur sa distribution d'entraînement, pour des raisons de composition de population plutôt que de qualité de modèle.

Les signaux de détection spécifiques, les noms de caractéristiques et les seuils sont retenus à dessein, afin que l'ingénierie reste reproductible dans l'esprit sans se transformer en guide d'évasion.

L'adversaire qui vaut la peine qu'on s'y oppose

Une regex sur le user-agent et un CAPTCHA arrêtent le bas du marché de l'automatisation et laissent passer le reste. Les adversaires contre lesquels il vaut la peine de construire ne sont pas dans ce bas de gamme. Ils font tourner un vrai Chromium. Ils corrigent la surface d'empreinte que lisent les contrôles naïfs. Ils passent par un espace d'adresses résidentiel. Les plus capables sont des agents à modèle de langage qui poursuivent un objectif à travers un flux multi-étapes plutôt que de rejouer un script figé.

La propriété qui définit cet adversaire est qu'aucun observable unique ne tranche la question. C'est la même raison pour laquelle les CAPTCHA ne font plus de vrai travail contre l'automatisation motivée, et pourquoi les navigateurs furtifs et anti-détection existent en tant que catégorie de produit. Vous ne pouvez pas lire la réponse sur une seule valeur. Vous devez combiner des signaux indépendants et accepter que chacun, pris isolément, se trompe une partie du temps.

La pile de détection : une couche déterministe et deux modèles compacts

La pile décide si un visiteur est automatisé au moyen d'une cascade à deux étages précédée d'une couche de règles déterministe.

  • Couche de règles déterministe. Encode la poignée de conditions qui constituent à elles seules une preuve d'automatisation.
  • Modèle 1, empreinte (MorphNet). Note une évaluation de page unique à partir de signaux d'appareil, de navigateur et de réseau.
  • Modèle 2, comportement (GammaNet). Note une session entière à partir de la télémétrie comportementale, et prend le score du premier modèle comme entrée.

Le label final est le OU logique des trois. Un visiteur est signalé si la couche de règles se déclenche, ou si l'un ou l'autre modèle se déclenche. Cette structure a une conséquence qui façonne tout le reste : parce que la couche de règles attrape déjà les cas qu'elle peut prouver, les modèles n'ont pas besoin de le faire. Les modèles n'entraînent que sur le résidu, le trafic que les règles ne peuvent pas trancher, qui est à la fois la partie difficile du problème et celle où un modèle gagne sa place.

La barre tenue tout du long est un recall d'au moins 0.90 à un taux de faux positifs d'au plus 0.01, mesuré sur du trafic de production réel au niveau de la session.

Comment l'évaluation reste honnête

Les chiffres ci-dessous ne veulent dire quelque chose que par la façon dont l'évaluation est construite, il vaut donc la peine d'énoncer d'abord les garde-fous.

Les données d'entraînement et d'évaluation sont de vraies évaluations de page regroupées en sessions. Les labels sont déterministes, appliqués uniquement quand un signal constitue une preuve ; tout ce qui est ambigu est laissé non labellisé plutôt que deviné, ce qui maintient le bruit de label hors de la vérité terrain. Pour les classes furtives qui déjouent l'empreinte par construction, la vérité terrain provient d'un banc de génération de trafic contrôlé qui lance de l'automatisation connue contre des cibles instrumentées, de sorte que le label est connu par provenance plutôt qu'inféré.

Trois garde-fous contre les fuites maintiennent les chiffres rapportés honnêtes :

  1. Les signaux que lit la couche de règles déterministe sont exclus de l'entraînement du modèle, de sorte que le modèle apprend le résidu au lieu de remémoriser ce que les règles possèdent déjà.
  2. Les événements qui annoncent directement un agent d'automatisation sont retirés du flux comportemental avant le calcul des caractéristiques, de sorte que le modèle comportemental apprend la structure du mouvement et du rythme plutôt que la présence d'un type d'événement révélateur.
  3. La cascade est câblée avec des scores hors-pli : la contribution du premier modèle au second est son score validé par croisement, jamais une prédiction d'un modèle qui a déjà vu la session.

Chaque partition se fait par session, jamais par ligne, puisque plusieurs évaluations partagent une session et qu'une partition au niveau ligne laisserait la même session apparaître des deux côtés. Tous les résultats utilisent une graine fixe.

Modèle 1 : MorphNet, le modèle d'empreinte

Le premier modèle lit environ 90 caractéristiques par évaluation décrivant la cohérence d'empreinte, les caractéristiques de la couche de transport et le contexte réseau. La première version de production était un ensemble d'arbres par boosting de gradient. Il était précis sur le trafic facile, lourd à déployer dans un chemin de requête sensible à la latence, et difficile à introspecter. Il a été remplacé par un réseau bâti de zéro.

MorphNet donne à un minuscule réseau la forme expressive d'un ensemble d'arbres : une réduction linéaire apprise vers un espace interne compact, puis des activations par canal où chaque canal ajuste sa propre courbe de réponse, puis une couche d'interaction de faible rang qui laisse des paires de signaux se moduler l'une l'autre, une lecture pondérée, et un court entonnoir vers une sortie unique. Le modèle entier compte environ 6,500 paramètres et s'entraîne en environ 25 secondes sur un GPU d'ordinateur portable.

Deux défauts latents du premier jet ont été attrapés en revue de conception, avant qu'aucun code d'entraînement ne soit écrit. L'un était un softmax terminal sur une sortie unique, mathématiquement constant et sans gradient, de sorte que le modèle ne pouvait pas apprendre. L'autre était une lecture d'interaction qui s'effondrait en un vecteur constant, une couche morte qui ne contribue à rien. Une troisième leçon est venue de l'entraînement : le choix de normalisation est porteur. Les statistiques courantes de la normalisation par batch ont fait chuter l'AUC de validation de 0.99 à 0.50, et la normalisation par couche est l'ajustement correct pour le modèle à exemple unique qui tourne en production.

Sur une partition honnête au niveau de la session, résultats de MorphNet :

MétriqueValeur
AUC0.9994
Recall au point de fonctionnement0.9959
Recall sur 5 graines0.9962 ± 0.0007
Accord numérique inférence-vs-entraînementwithin 5e-7

Chaque graine franchit la porte, et l'accord entre le graphe d'inférence exporté et le cadre d'entraînement signifie que le modèle servi est le modèle entraîné.

Le contraste avec l'ancienne référence est le plus marqué sur l'ensemble difficile résiduel, le trafic que la couche de règles ne peut pas trancher. Sur une partition de stress mise de côté de 6,004 sessions :

ModèleRecall sur l'ensemble difficile résiduel
Version A antérieure par boosting de gradient0.139
Version B antérieure par boosting de gradient0.039
MorphNet0.996

La reconstruction n'est pas un gain marginal sur cette tranche. C'est la différence entre un modèle qui fonctionne sur les cas difficiles et deux qui n'y arrivent pas.

Modèle 2 : GammaNet, le modèle comportemental

Le comportement est plus difficile que l'empreinte, le second modèle a donc plus de structure. Il lit 179 entrées comportementales agrégées décrivant la forme d'une session, et il est bâti en deux pièces.

Le frontal est un encodeur d'autoencodeur qui projette les entrées nettoyées et standardisées à travers une couche cachée vers un latent à 32 dimensions sur l'hypersphère unité. Cet encodeur est entraîné une fois, sans labels, puis figé. Le dorsal est une petite tête supervisée : chaque canal latent passe par une non-linéarité apprise compacte, initialisée pour que l'entraînement commence à partir de la représentation figée, suivie d'un court entonnoir linéaire vers une sortie unique. Le modèle compte environ 14,000 paramètres, l'essentiel d'entre eux dans l'encodeur figé et seulement quelques centaines d'entraînables dans la tête.

Figer l'encodeur est la décision qui fait que ce modèle se tient bien. Un encodeur entraîné à reconstruire généralise au trafic réel ; un encodeur entraîné à séparer les classes aussi nettement que possible n'y arrive pas. Sur une partition au niveau de la session mise de côté, GammaNet atteint une AUC de 0.9989 et un recall de 0.9964 au point de fonctionnement, à un cheveu d'une référence par arbres fraîchement réentraînée sur la partition identique. Sur une rejoue en direct contre des bots connus, son recall modèle-seul était de 99.4%, contre 96.4% pour le modèle comportemental précédemment déployé.

L'embedding comportemental sépare presque parfaitement

L'artefact le plus frappant du projet est la géométrie du latent figé de GammaNet. Environ 17,000 sessions ont été projetées à travers l'encodeur pour voir où atterrissent bots et humains. Ils se situent dans des régions opposées de la sphère.

MétriqueValeurCe que cela signifie
Pureté du plus proche voisin (k=1)99.6%Le plus proche voisin de presque chaque point partage sa classe
Séparation cosinus des centroïdes-0.99Les centroïdes bot et humain sont presque antipodaux sur la sphère
Entropie locale moyenne (k=20)0.010Presque aucun mélange de classes dans les voisinages locaux

En pratique, il n'y a pas de zone de confusion. Les classes se situent près de pôles opposés, la région entre elles ne porte presque aucune masse de probabilité, et le modèle est confiant presque partout.

La projection ci-dessous rend cette géométrie tangible : chaque point est une session projetée à travers l'encodeur figé, et les variations synthétiques de stress s'écartent du groupe du champ réel au lieu de s'y fondre. Faites-la pivoter en la faisant glisser.

Projection UMAP 3D interactive de l'embedding comportemental de GammaNet : 1000 variations synthétiques de bots réalistes, colorées selon le score GammaNet, face au trafic de champ réel. Une vue de stress de niveau 0 de la géométrie latente, pas une vérité terrain étiquetée. Ouvrir en plein écran

La séparation n'est pas l'œuvre d'une direction unique. Quand chaque axe latent est noté pour lui-même, le pouvoir discriminant est réparti sur toute la représentation, une douzaine d'axes ou plus portant chacun un signal réel plutôt qu'un seul axe faisant le travail. Cette distribution importe pour un modèle de sécurité. Une représentation qui concentrerait son signal sur un axe concentrerait aussi la cible de l'adversaire. Une représentation distribuée n'offre pas ce point unique sur lequel appuyer.

La recherche d'architecture, et un mur

C'est le point où un compte rendu déclare habituellement victoire. L'inverse s'est produit : une tentative de battre le modèle. Si 32 dimensions séparent les classes aussi proprement, peut-être qu'un embedding plus riche élèverait davantage la performance en production.

Le test était un comparatif de 16 familles de modèles sur le jeu de caractéristiques comportementales, noté sur une batterie qui incluait la tâche de production en direct. L'ensemble était délibérément large : autoencodeurs variationnels de plusieurs sortes, objectifs supervisés-contrastifs et hypersphériques, encodeurs paramétrés par rotation et factorisés par groupe de caractéristiques, dorsales hypercomplexes en quaternions et octonions, variantes débruitantes et contractives, et un transformer à auto-attention sur des blocs de caractéristiques.

Deux conclusions sont revenues, et toutes deux étaient claires.

D'abord, le plafond en production est invariant à l'architecture. Chaque famille, d'un simple autoencodeur lié à un réseau d'octonions à un transformer, a atterri dans une bande étroite, et le meilleur d'entre eux n'a fait qu'égaler l'encodeur existant. La sophistication architecturale n'a pas déplacé la limite.

Ensuite, une séparation plus nette dans la distribution suivait une moins bonne généralisation en production. Les modèles à la séparation la plus tranchée sur la distribution d'entraînement, les objectifs contrastifs agressifs qui atteignaient un recall parfait sur les données d'entraînement, étaient parmi les plus faibles sur le trafic réel. Sur-séparer la distribution d'entraînement est du surapprentissage sous un autre nom, ce qui est exactement pourquoi l'encodeur est figé plutôt que remodelé par le classifieur.

Puis le contrôle qui a tranché la question : écarter entièrement l'embedding et entraîner des classifieurs directement sur les caractéristiques brutes. Un arbre par boosting de gradient sans restriction, doté de chaque caractéristique brute sans goulet d'étranglement, un modèle linéaire sur les mêmes caractéristiques, et l'embedding compact atterrissent tous essentiellement à la même AUC en production : un plafond dur que nous avons mesuré plutôt que supposé. Le plafond en production est une propriété de ce que vous mesurez plutôt que de la façon dont vous le modélisez. C'est un résultat plus utile qu'une décimale d'AUC de plus, parce qu'il dit, preuves à l'appui, que tout travail de modélisation supplémentaire sur les signaux actuels est une impasse, et que la voie à suivre est un signal nouveau et indépendant.

Une note de bas de page est devenue un modèle. Puisque les meilleurs généralisateurs étaient les têtes génératives, l'équipe en a construit une. VMFNet note une session avec un mélange von Mises-Fisher par classe sur la sphère, comparant la vraisemblance sous un mélange humain à celle d'un mélange bot. À environ un tiers de la taille de la pile d'embedding précédente, il atteint le même plafond sur caractéristiques brutes. Les têtes génératives généralisaient plus stablement que les discriminatives, la même leçon qui a conduit à figer l'encodeur.

Défense en profondeur : des couches qui échouent indépendamment

La précision dans la distribution est une faible garantie à elle seule, chaque modèle a donc été soumis à une red team interne contre la perturbation des entrées et la télémétrie partielle. Les budgets de perturbation sont retenus, puisque ces chiffres équivalent à une recette, mais le tableau qualitatif guide la conception. Le modèle d'empreinte se dégrade gracieusement sous un bruit d'entrée modéré et tolère une télémétrie incomplète, ce dont a besoin un modèle de chemin de requête quand il voit parfois des données partielles.

La conclusion sur laquelle agit la conception est qu'aucun modèle unique ne doit porter le système. C'est pourquoi la pile est une cascade plutôt qu'un seul classifieur. Un adversaire qui dégrade la preuve la plus forte d'un modèle fait encore face à la couche déterministe et à un second modèle qui lit une famille de signaux entièrement différente, et la décision finale se déclenche si l'un quelconque des trois le fait. La résilience vient ici du fait de tenir plusieurs indices non corrélés à la fois plutôt qu'un seul fort. Vaincre la pile signifie les vaincre tous ensemble.

Empreinte en production

Parce que la pile a été conçue pour le chemin de requête dès le départ, la version neuronale est à la fois légère et précise.

MesurePile d'arbresPile neuronaleÉvolution
Taille sur disque (ONNX)6.465 MB0.079 MBenviron 82x plus petite
RAM d'inférence ajoutée+89 MB+14 MBenviron 6.4x plus légère
Débit0.56 M rows/s1.74 M rows/senviron 3x plus rapide

La métrique qui compte tient bon tandis que l'empreinte chute de près de deux ordres de grandeur. Le modèle comportemental entièrement déployé pèse 79 kilo-octets, assez petit pour être traité comme négligeable face au reste du chemin de requête.

Couverture par classe, et le chiffre honnête

Sur l'évaluation de référence, 5,997 bots labellisés et 7,964 humains tirés des journaux de production avec partitions au niveau de la session et garde-fous contre les fuites, la cascade déployée attrape chaque classe d'adversaire à plein recall.

Classe d'adversaireRecall de la pile déployée
Automatisation basique100%
Navigateurs furtifs difficiles100%
Agents LLM100%
Furtivité + correctif d'empreinte100%
Bots en direct non cartographiés100%

Cela inclut les classes difficiles : navigateurs furtifs aux empreintes corrigées, agents à modèle de langage, et bots en direct qui se comportent comme des utilisateurs ordinaires. Des sessions qu'un modèle antérieur notait près de zéro sont désormais notées près de un après un correctif ciblé sur la distribution dont elles provenaient.

Puis le résultat qui garde le travail honnête. Au point de fonctionnement strict, le recall sur la population de production complète se situe sous la barre que la pile franchit sur sa distribution d'entraînement. La raison vaut la peine d'être énoncée clairement, car ce n'est pas un problème de qualité de modèle. L'écart tient à la composition de la population et au coût d'un budget strict de faux positifs. Une vraie population humaine contient de larges groupes dont le trafic ressemble à de l'automatisation à ce budget, donc le tenir laisse nécessairement du recall sur la table. La recherche d'architecture a déjà montré que presque tout le signal séparateur que contiennent les caractéristiques actuelles a été extrait. Combler l'écart restant appelle un signal nouveau et indépendant, ou des points de fonctionnement spécifiques à la population, plutôt qu'un meilleur classifieur sur les mêmes entrées.

Ce que cela signifie pour les équipes qui font de la détection

Retirez les spécificités et quelques leçons opérationnelles se transposent à toute équipe qui tente de séparer les humains d'une automatisation conçue pour avoir l'air humaine :

  1. Les contrôles d'empreinte seule et de réseau seul ratent l'adversaire qui compte. Les classes qui vous coûtent de l'argent passent ces contrôles par conception. Les signaux comportementaux et de runtime sont là où elles se séparent.
  2. Le plafond est le signal, pas le modèle. Quand une recherche de modèles converge vers le même chiffre sur 16 familles, plus de modélisation n'aidera pas. Le gain suivant vient d'un signal nouveau et indépendant capturé là où le bot s'exécute réellement.
  3. Bâtissez des couches qui échouent indépendamment. Une cascade d'une couche déterministe plus des modèles non corrélés est plus difficile à déjouer qu'un seul classifieur fort, parce qu'un attaquant doit les vaincre tous à la fois.
  4. Choisissez les points de fonctionnement par population et par action. Un seul seuil global à un budget strict de faux positifs laisse du recall sur la table. Cadrez la décision sur l'action, et réglez le budget selon qui vous protégez.

C'est aussi là que cside s'inscrit opérationnellement. cside observe le runtime du navigateur en temps réel, capture l'appareil et la véritable IP client, fait remonter les signaux de script et d'automatisation au runtime, lit la cohérence d'empreinte et la continuité de session, et signale les agents IA et les navigateurs furtifs à l'intérieur de la page, puis expose ces signaux via une API pour que vous puissiez piloter une décision d'autorisation, de surveillance, de défi ou de blocage dans votre propre flux de travail. Cette télémétrie de la couche navigateur est exactement le signal indépendant qui vient à manquer à une pile d'empreinte seule ou de réseau seul, et la couche où un humain, un bon bot et un agent malveillant cessent enfin de se ressembler. Pour les mécaniques de signal sous cette décision, voyez le guide pour détecter le trafic des agents IA et comment bloquer les agents IA sur votre site web.

Pour aller plus loin sur cside

Les figures et métriques de ce rapport proviennent d'artefacts de modèles mis en cache et d'évaluations sur du trafic de production. Les signaux de détection spécifiques, les noms de caractéristiques et les seuils de décision sont retenus à dessein.

Avneh
AI Researcher

Making machines learn. Applied math major currently developing the next generation of bot detection models at cside.

FAQ

Frequently Asked Questions

Parce que les adversaires qui valent la peine qu'on s'y oppose font tourner un vrai Chromium, corrigent la surface d'empreinte pour que les contrôles naïfs la lisent comme propre, et passent par un espace d'adresses résidentiel. Une empreinte propre ne prouve pas un humain, et une adresse de centre de données ne prouve pas un bot. Aucun observable unique ne tranche la question, la détection doit donc combiner la cohérence d'empreinte, le contexte réseau et le comportement plutôt que de se fier à un seul signal.

La détection comportementale note une session entière d'après la façon dont elle parcourt votre site : la forme et le rythme des actions plutôt que l'identité qu'elle revendique. Dans la pile décrite ici, un autoencodeur figé projette environ 179 entrées comportementales agrégées dans un espace latent à 32 dimensions où bots et humains atterrissent dans des régions opposées, et une petite tête supervisée lit cette géométrie. Le comportement est plus difficile à falsifier de façon convaincante qu'une chaîne user-agent ou une valeur d'empreinte isolée, et c'est pourquoi il sépare les classes difficiles.

Sur ce problème, oui. Deux modèles compacts, d'environ 6,500 et 14,000 paramètres, égalent ou surpassent une lourde référence par boosting de gradient tout en se déployant à environ un quatre-vingtième de la taille sur disque. Un comparatif de 16 familles de modèles a montré que le plafond en production est le même pour un simple autoencodeur et un transformer. La limite vient du signal que vous collectez, pas de la taille ni de la sophistication du classifieur, donc un petit modèle qui tient dans le chemin de requête est le choix pragmatique.

La composition de la population et le coût d'un budget strict de faux positifs. À un budget strict de faux positifs, le recall sur la population de production complète se situe sous la barre interne stricte franchie sur la distribution d'entraînement, même si chaque classe d'adversaire nommée était attrapée à plein recall sur le jeu de référence. Une vraie population humaine contient de larges groupes dont le trafic ressemble à de l'automatisation à ce budget, donc un budget strict laisse nécessairement du recall sur la table. Combler l'écart appelle un signal nouveau et indépendant, pas un meilleur classifieur sur les mêmes entrées.

Surveillez et sécurisez vos scripts tiers

Gain full visibility and control over every script delivered to your users to enhance site security and performance.

Commencez gratuitement, ou essayez Business avec un essai de 14 jours.

cside Interface du tableau de bord affichant la surveillance des scripts et les analyses de sécurité
Related Articles
Réserver une démonstration