Skip to main content
Blog
Blog Attacks

Attraper les bots à leur façon de bouger : détection comportementale du curseur

Comment le modèle cursor_v2 de cside note le mouvement de la souris pour attraper les bots furtifs qui passent déjà les contrôles de fingerprint et d'IP.

Jun 23, 2026 11 min read
Une trajectoire de curseur bleue lumineuse et fluide à côté d'une trajectoire de bot rouge et anguleuse sur un plan sombre.

La plupart du trafic automatisé est facile à rejeter. Une vérification de user-agent et un test de fingerprint en arrêtent la grande majorité avant que le moindre comportement ne compte. Le trafic contre lequel il vaut la peine de concevoir, c'est cette petite fraction qui falsifie tout cela, et ce trafic doit encore faire une chose qu'il ne peut pas feindre facilement : bouger un curseur comme une personne.

Voici un regard sur cursor_v2, un détecteur neuronal compact qui note la façon dont une souris a réellement bougé. Il est assez petit, environ dix mille paramètres, pour s'exécuter sur chaque geste, et lors de nos tests il tient face à toutes les méthodes que nous connaissons pour synthétiser un curseur à l'allure humaine. Comme il s'agit d'un modèle de sécurité en production, cet article traite de résultats : ce qu'il attrape, le peu qu'il coûte, et où sont ses limites, en toute honnêteté. Il ne décrit pas les rouages internes de la décision.

La version courte :

  • cursor_v2 transforme un seul mouvement de souris en un score humain/bot en moins d'une milliseconde, à partir d'un modèle de ~10 600 paramètres pesant ~0,12 Mo.
  • Face à sept générateurs de curseur indépendants (géométriques, physiques, d'imitation humaine neuronale et trajectoires optimisées spécifiquement pour le déjouer), il signale 86 à 100% des mouvements de bots tout en signalant environ 0% des vrais humains.
  • Sur un générateur avec lequel il n'a jamais été entraîné, il obtient un AUC de 0,999 contre 0,920 pour la génération précédente.
  • Nous avons pointé un agent LLM sur un navigateur furtif (Camoufox), un navigateur qui déjoue la détection au niveau fingerprint, vers une boutique de test. cursor_v2 a signalé 100% de ses mouvements, même avec l'humanisation de mouvement activée.

L'adversaire contre lequel il vaut la peine de concevoir

La détection de bots est une pile de filtres, et l'essentiel du volume tombe dans les moins chers : un user-agent manifestement automatisé, un fingerprint de navigateur sans interface, une IP de centre de données. Les bots qui survivent à ces couches sont ceux que construisent des gens qui lisent les mêmes recherches que nous. Ils font tourner de vrais navigateurs, effacent les indices de fingerprint et passent par des réseaux résidentiels. Quand une telle session atteint une page, les signaux statiques paraissent propres.

Ce qui reste, c'est le comportement. Une vraie personne qui parcourt un site produit un flux continu d'entrées, et le mouvement humain du curseur est le produit d'une boucle de contrôle biologique bruitée, vraiment difficile à reproduire. Un fingerprint se copie à l'identique. Copier la façon dont une main bouge une souris, de manière convaincante et sur des milliers de gestes, est un problème distinct, et séparé. Un bot peut être parfait à la couche fingerprint et se trahir à l'instant où il bouge.

Un détecteur assez petit pour s'exécuter sur tous

cursor_v2 prend une trajectoire de curseur, les échantillons qu'un mouvement laisse en se déplaçant d'un point à un autre, et renvoie une seule probabilité que le mouvement ait été produit par une automatisation. Il est entièrement neuronal, exporté en ONNX, et s'exécute sur un CPU. Pas de GPU, pas d'appel de service, pas de serveur de modèle par requête.

La raison pour laquelle cela compte est économique. Un détecteur que vous ne pouvez vous permettre d'exécuter que sur les sessions suspectes est un détecteur sous lequel les attaquants apprennent à rester. Un détecteur qui coûte une fraction de milliseconde et un dixième de mégaoctet peut s'exécuter sur chaque mouvement de chaque session, exactement là où vit le signal comportemental.

L'empreinte déployée :

  • Environ 10 600 paramètres au total.
  • 0,74 ms par mouvement sur un seul thread CPU.
  • ~0,12 Mo de poids de modèle.
  • ~64 Mo de mémoire de pointe à l'inférence.

Avec cette empreinte, un seul cœur note de l'ordre de mille mouvements par seconde, assez bon marché pour rester toujours actif.

Chaque faux curseur a son voisinage

En interne, le modèle représente chaque mouvement comme un vecteur compact. Nous n'exposons pas ce qui entre dans cette représentation, mais nous pouvons montrer ce qui en sort. Projetez un large échantillon de mouvements en trois dimensions et une structure apparaît d'elle-même : le mouvement humain réel occupe une région, et chaque manière distincte de synthétiser un curseur tombe dans sa propre région, à l'écart des humains. Un humaniseur géométrique, un modèle physique de souris et un réseau neuronal entraîné à imiter les humains paraissent différents les uns des autres, et tous paraissent différents d'une personne.

Dans une projection interactive en 3-D de cet embedding de mouvement, les humains forment un seul voisinage tandis que chaque générateur de bots forme son propre nuage séparé, y compris le modèle neuronal entraîné directement sur du mouvement humain. Les axes de la projection sont arbitraires ; ce qui compte, c'est que les classes se séparent, pas la façon dont le modèle décide.

Le parcours des générateurs

La séparation dans une projection est suggestive, pas une preuve. La vraie question est ce que fait le modèle déployé quand on lui présente un mouvement qu'il n'a jamais vu. Nous avons donc construit un parcours : sept façons indépendantes de générer une trajectoire de curseur, notées de bout en bout par le modèle exact que nous déployons, face à un ensemble de contrôle de mouvements humains réels réservés.

Les familles se répartissent en trois groupes. Les familles réservées utilisent un générateur avec lequel le modèle n'a jamais été entraîné, le test équitable de généralisation. Les familles durcies sont celles que nous avons délibérément entraîné le modèle à résister, dont un corpus de trajectoires optimisées par recherche spécifiquement pour évader ce détecteur ; un taux de capture élevé là confirme que le durcissement a tenu. Et un plancher trivial de bon sens.

Famille de générateurRégimenAUCRecall @ FPR ≤ 1%Capturé @ déployé
Générateur non humaniséplancher de bon sens5000,99598,6%98,2%
Humaniseur géométriqueréservée5000,99999,6%99,6%
Humaniseur quantifiéréservée5000,99999,6%99,6%
Modèle de mouvement physiquedurcie4991,00099,4%97,0%
Imitation humaine neuronaledurcie5001,000100,0%100,0%
Trajectoires optimisées pour l'évasiondurcie5000,99997,6%85,6%
Corpus d'exploits adversesdurcie5001,000100,0%96,0%

Contrôle : 160 mouvements humains réservés, notés par le même pipeline, avec un taux de faux positifs de 0,0% au seuil déployé et un score médian de 0,000. Chaque chiffre de bot ci-dessus est mesuré face à ce même contrôle.

Taux de capture par générateur de bots

Le point de donnée honnête : même le corpus construit en cherchant des trajectoires qui battent ce détecteur est signalé 85,6% du temps, alors que les vrais humains sont signalés à zéro. La pression adverse déplace le chiffre ; elle ne le casse pas.

Le même résultat vu comme une distribution de scores : humains et bots s'accumulent aux extrémités opposées de l'échelle, avec très peu entre les deux. La sortie humaine s'effondre près de zéro, les mouvements de bots regroupés de tous les générateurs s'effondrent près de un, et le seuil de décision se loge dans le vide qui les sépare.

Distribution des scores, humains contre bots

Le vrai test : un navigateur furtif piloté par un agent

Un générateur de trajectoires est un sujet de laboratoire propre. Un navigateur furtif moderne piloté par un agent d'IA est l'adversaire réel, alors nous en avons fait tourner un. Nous avons construit un crawler piloté par LLM sur Camoufox, un navigateur furtif conçu spécifiquement pour déjouer la détection au niveau fingerprint, lui avons donné un objectif et l'avons laissé faire ses achats dans une boutique de test : trouver un produit, l'ajouter au panier, passer au paiement. À mesure qu'il naviguait, nous avons capturé ses vrais mouvements de souris et noté chacun avec le détecteur déployé.

Agent CamoufoxMouvementsSignalés comme botSession signalée
Mode par défaut66 (100%)oui, après 3 mouvements
Humanisation de mouvement activée66 (100%)oui, après 3 mouvements

Chaque mouvement a été signalé, dans le mode par défaut de l'agent et avec son humanisation de mouvement intégrée explicitement activée. Le même noteur signale moins de 1% des vrais mouvements humains, donc ce n'est pas un détecteur qui se méfie simplement de tout.

Camoufox excelle dans ce pour quoi il est conçu, et il passerait très probablement sans encombre un contrôle reposant uniquement sur le fingerprint. Il a tout de même été attrapé, car la furtivité à la couche fingerprint n'achète pas la furtivité à la couche du mouvement. Les deux échouent de façon indépendante, et cette indépendance est tout l'intérêt d'exécuter la détection en profondeur. Pour en savoir plus sur le fonctionnement de ces outils, voyez les navigateurs furtifs et anti-détection expliqués et comment cside détecte les agents d'IA sur les navigateurs furtifs.

Généraliser au-delà de la distribution d'entraînement

Un chiffre mérite d'être mis en avant, car c'est celui qui est facile à truquer et facile à mal lire. Presque tout détecteur de curseur obtient environ 0,99 d'AUC sur le type de mouvement avec lequel il s'est entraîné ; ce chiffre est quasi dénué de sens. Le chiffre qui compte est le transfert, la performance sur un générateur entièrement réservé hors de l'entraînement.

Sur une famille d'humaniseurs avec laquelle aucun modèle ne s'est entraîné, cursor_v2 atteint un AUC de 0,999, tandis que le détecteur de génération précédente chute à 0,920 et perd l'essentiel de son recall. Le gain est dans la généralisation, pas dans le polissage au sein de la distribution.

Comparaison d'AUC entre générateurs

Ce que nous pouvons prouver, et ce que nous ne pouvons pas

Un compte rendu de sécurité ne vaut la peine d'être lu que s'il est honnête sur ses limites, alors voici les nôtres.

La précision au sein de la distribution n'est pas la robustesse. Chaque chiffre sur un mouvement que le modèle a vu est quasi parfait et nous ne nous appuyons sur aucun. Les affirmations ici reposent sur des générateurs réservés et un test en direct avec navigateur furtif.

Le résultat entre générateurs est une estimation ponctuelle solide, pas une garantie universelle. Il est calibré sur un échantillon fini de vrais humains et une famille d'humaniseurs réservée. Lisez le 0,999 comme validé pour cette famille, pas pour chaque curseur qui existera jamais. Le levier ouvert honnête est l'ampleur du vrai mouvement humain contre lequel calibrer, plus que le modèle lui-même.

En production, nous appliquons un anti-rebond. Un seul geste étrange ne signale jamais une personne ; le noteur déployé attend plusieurs mouvements notés comme bot d'affilée avant d'agir. Les chiffres de cet article sont la vue par mouvement, plus dure, avant ce lissage.

Ce que cela signifie pour les équipes qui exécutent la détection

Retirez les détails et la leçon se généralise. Les bots qui comptent sont ceux qui ont déjà battu vos contrôles statiques, et la façon de les attraper est avec un signal qui échoue indépendamment de celui qu'ils battent. Le comportement, la façon dont une session bouge, clique et défile réellement, est ce signal, et c'est la couche pour laquelle les attaquants budgétisent le moins. Le même raisonnement parcourt attraper les bots qui ne veulent pas être attrapés et comment les agents OpenClaw contournent la détection de bots.

Le déblocage pratique est le coût. Un modèle comportemental assez petit et rapide pour s'exécuter sur chaque visiteur, pas seulement les suspects, supprime l'angle mort que crée l'échantillonnage. cursor_v2 est l'un de ces signaux : orthogonal au fingerprinting, assez bon marché pour rester toujours actif et, jusqu'ici, tenant face aux meilleurs falsificateurs de curseur que nous pouvons construire.

Comment cside s'intègre

cside vous donne une visibilité totale sur chaque script, requête et tiers qui touche votre site, ainsi que le signal comportemental pour distinguer les vrais utilisateurs de l'automatisation qui se cache parmi eux. Le modèle de curseur est une couche d'une pile de détection qui sépare déjà humains, bons bots et agents malveillants à la couche du navigateur, là où les indices statiques ont déjà été falsifiés.

Découvrez la détection d'agents d'IA de cside

Avneh
AI Researcher

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

FAQ

Frequently Asked Questions

cursor_v2 est un petit modèle neuronal qui note la façon dont une souris a réellement bougé. Il prend une trajectoire de curseur, les échantillons qu'un mouvement laisse en se déplaçant d'un point à un autre, et renvoie une seule probabilité que ce mouvement ait été produit par une automatisation. Il s'exécute sur le CPU en moins d'une milliseconde par mouvement, donc il peut noter chaque geste plutôt que seulement les sessions suspectes.

Un fingerprint de navigateur se copie à l'identique. Le mouvement humain du curseur est le produit d'une boucle de contrôle biologique bruitée, et le reproduire de façon convaincante sur des milliers de gestes est un problème distinct et indépendant. Un bot peut paraître parfait à la couche fingerprint et se trahir à l'instant où il bouge, c'est pourquoi un signal de mouvement attrape les sessions que les contrôles statiques laissent passer.

Dans notre test, non. Nous avons pointé un agent LLM pilotant Camoufox, un navigateur furtif conçu pour déjouer la détection au niveau fingerprint, vers une boutique de test et avons noté ses vrais mouvements de souris. cursor_v2 en a signalé 100%, en mode par défaut et avec l'humanisation de mouvement intégrée de l'agent activée. La furtivité à la couche fingerprint n'achète pas la furtivité à la couche du mouvement.

Face à un contrôle réservé de mouvements humains réels, le taux de faux positifs était de 0,0% au seuil déployé, avec un score humain médian de 0,000. En production, le modèle applique aussi un anti-rebond : un seul geste étrange ne signale jamais une personne, car le modèle déployé attend plusieurs mouvements notés comme bot d'affilée avant d'agir.

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