Skip to main content
Blog
Blog Attacks

Bots betrappen op hoe ze bewegen: gedragsmatige cursordetectie

Hoe het cursor_v2-model van cside muisbeweging scoort om de stealth-bots te vangen die fingerprint- en IP-controles al omzeilen.

Jun 23, 2026 10 min read
Een vloeiend gloeiend blauw cursorpad naast een hoekig rood botpad op een donker vlak.

Het meeste geautomatiseerde verkeer is makkelijk weg te sturen. Een user-agentcontrole en een fingerprinttest stoppen het overgrote deel ervan voordat gedrag er ook maar toe doet. Het verkeer waartegen het de moeite waard is om te bouwen is die kleine fractie die dat allemaal vervalst, en dat verkeer moet nog steeds één ding doen dat het niet makkelijk kan veinzen: een cursor bewegen zoals een mens.

Dit is een blik op cursor_v2, een compacte neurale detector die scoort hoe een muis daadwerkelijk bewoog. Het is klein genoeg, ongeveer tienduizend parameters, om op elk gebaar te draaien, en in onze tests houdt het stand tegen elke methode die we kennen om een mensachtige cursor te synthetiseren. Omdat dit een securitymodel in productie is, gaat dit artikel over resultaten: wat het vangt, hoe weinig het kost en waar de grenzen eerlijk liggen. Het beschrijft niet de interne werking van de beslissing.

De korte versie:

  • cursor_v2 zet één muisbeweging om in een mens/bot-score in minder dan een milliseconde, vanuit een model van ~10.600 parameters dat ~0,12 MB groot is.
  • Tegen zeven onafhankelijke cursorgeneratoren (geometrisch, fysiek, neurale menselijke imitatie en paden die specifiek zijn geoptimaliseerd om het te verslaan) markeert het 86 tot 100% van de botbewegingen terwijl het ongeveer 0% van de echte mensen markeert.
  • Op een generator waarop het nooit is getraind, scoort het AUC 0,999 tegenover 0,920 voor de vorige generatie.
  • We richtten een LLM-agent op een stealth-browser (Camoufox), een die detectie op fingerprintniveau verslaat, op een teststorefront. cursor_v2 markeerde 100% van de bewegingen, zelfs met bewegingshumanisatie aan.

De tegenstander waartegen het de moeite waard is om te bouwen

Botdetectie is een stapel filters, en het grootste deel van het volume valt weg bij de goedkope: een duidelijk geautomatiseerde user-agent, een headless-browserfingerprint, een datacenter-IP. De bots die deze lagen overleven zijn gebouwd door mensen die hetzelfde onderzoek lezen als wij. Ze draaien echte browsers, wissen de fingerprintaanwijzingen weg en routeren via residentiële netwerken. Tegen de tijd dat zo'n sessie een pagina bereikt, zien de statische signalen er schoon uit.

Wat overblijft is gedrag. Een echte persoon die een site doorloopt produceert een continue stroom invoer, en menselijke cursorbeweging is het product van een ruizige biologische regelkring die echt moeilijk te reproduceren is. Een fingerprint kun je exact kopiëren. De manier kopiëren waarop een hand een muis beweegt, overtuigend en over duizenden gebaren, is een ander probleem, en een apart probleem. Een bot kan perfect zijn op de fingerprintlaag en zichzelf verraden op het moment dat hij beweegt.

Een detector klein genoeg om op iedereen te draaien

cursor_v2 neemt één cursorpad, de samples die een beweging achterlaat terwijl ze van het ene punt naar het andere reist, en geeft één kans terug dat de beweging door automatisering is geproduceerd. Het is volledig neuraal, geëxporteerd naar ONNX, en draait op een CPU. Geen GPU, geen serviceaanroep, geen modelserver per verzoek.

De reden dat dit ertoe doet is economisch. Een detector die je je alleen kunt veroorloven op verdachte sessies is een detector waar aanvallers leren onder te blijven. Een detector die een fractie van een milliseconde en een tiende van een megabyte kost, kan op elke beweging van elke sessie draaien, precies daar waar het gedragssignaal leeft.

De uitgerolde voetafdruk:

  • Ongeveer 10.600 parameters in totaal.
  • 0,74 ms per beweging op één CPU-thread.
  • ~0,12 MB modelgewicht.
  • ~64 MB piekgeheugen bij inferentie.

Met die voetafdruk scoort één core in de orde van duizend bewegingen per seconde, goedkoop genoeg om altijd aan te staan.

Elke nepcursor heeft een buurt

Intern stelt het model elke beweging voor als een compacte vector. We onthullen niet wat in die voorstelling gaat, maar we kunnen wel laten zien wat eruit komt. Projecteer een grote steekproef van bewegingen naar drie dimensies en er ontstaat vanzelf een structuur: echte menselijke beweging beslaat één gebied, en elke afzonderlijke manier om een cursor te synthetiseren landt in een eigen gebied, weg van de mensen. Een geometrische humanizer, een fysiek muismodel en een neuraal netwerk getraind om mensen na te bootsen zien er anders uit dan elkaar, en allemaal anders dan een persoon.

In een interactieve 3-D-projectie van die bewegingsembedding vormen mensen één buurt terwijl elke botgenerator een eigen gescheiden wolk vormt, inclusief het neurale model dat direct op menselijke beweging is getraind. De projectie-assen zijn willekeurig; het punt is dat de klassen scheiden, niet hoe het model beslist.

Het generatorparcours

Scheiding in een projectie is suggestief, geen bewijs. De echte vraag is wat het uitgerolde model doet wanneer het beweging krijgt die het nooit heeft gezien. Dus bouwden we een parcours: zeven onafhankelijke manieren om een cursorpad te genereren, end-to-end gescoord door het exacte model dat we uitrollen, tegen een controleset van achtergehouden echte menselijke bewegingen.

De families vallen in drie groepen. Achtergehouden families gebruiken een generator waarop het model nooit is getraind, de eerlijke test van generalisatie. Geharde families zijn die welke we het model bewust hebben getraind te weerstaan, waaronder een corpus van paden die via zoeken specifiek zijn geoptimaliseerd om deze detector te ontwijken; een hoog vangstpercentage daar bevestigt dat de harding standhield. En een triviale ondergrens als sanity check.

GeneratorfamilieRegimenAUCRecall @ FPR ≤ 1%Gevangen @ uitgerold
Niet-gehumaniseerde generatorsanity-ondergrens5000,99598,6%98,2%
Geometrische humanizerachtergehouden5000,99999,6%99,6%
Gekwantiseerde humanizerachtergehouden5000,99999,6%99,6%
Fysiek bewegingsmodelgehard4991,00099,4%97,0%
Neurale menselijke imitatiegehard5001,000100,0%100,0%
Voor ontwijking geoptimaliseerde padengehard5000,99997,6%85,6%
Adversarieel exploitcorpusgehard5001,000100,0%96,0%

Controle: 160 achtergehouden menselijke bewegingen, gescoord via dezelfde pijplijn, met een percentage valse positieven van 0,0% bij de uitgerolde drempel en een mediane score van 0,000. Elk botgetal hierboven is gemeten tegen diezelfde controle.

Vangstpercentage per botgenerator

Het eerlijke gegeven: zelfs het corpus dat is gebouwd door te zoeken naar paden die deze detector verslaan, wordt 85,6% van de tijd gemarkeerd, terwijl echte mensen op nul worden gemarkeerd. Adversariële druk verschuift het getal; het breekt het niet.

Hetzelfde resultaat gezien als een scoreverdeling: mensen en bots stapelen zich op aan de tegenovergestelde uiteinden van de schaal, met heel weinig ertussen. De menselijke uitvoer klapt samen bij nul, de gepoolde botbewegingen over alle generatoren klappen samen bij één, en de beslissingsdrempel zit in de lege kloof daartussen.

Scoreverdeling, mensen versus bots

De echte test: een stealth-browser aangestuurd door een agent

Een padgenerator is een schoon laboratoriumsubject. Een moderne stealth-browser aangestuurd door een AI-agent is de echte tegenstander, dus draaiden we er een. We bouwden een door een LLM aangestuurde crawler bovenop Camoufox, een stealth-browser die specifiek is gebouwd om detectie op fingerprintniveau te verslaan, gaven hem een doel en lieten hem winkelen in een teststorefront: een product vinden, in het mandje leggen, naar de afrekenpagina. Terwijl hij navigeerde, legden we zijn echte muisbewegingen vast en scoorden elke met de uitgerolde detector.

Camoufox-agentBewegingenGemarkeerd als botSessie gemarkeerd
Standaardmodus66 (100%)ja, na 3 bewegingen
Bewegingshumanisatie aan66 (100%)ja, na 3 bewegingen

Elke beweging werd gemarkeerd, in de standaardmodus van de agent en met de ingebouwde bewegingshumanisatie expliciet ingeschakeld. Dezelfde scorer markeert minder dan 1% van de echte menselijke bewegingen, dus dit is geen detector die simpelweg alles wantrouwt.

Camoufox is uitstekend in waarvoor het is gebouwd, en zou hoogstwaarschijnlijk vlot voorbij een controle komen die alleen op fingerprint berust. Het werd toch gevangen, omdat stealth op de fingerprintlaag geen stealth op de bewegingslaag koopt. De twee falen onafhankelijk, en die onafhankelijkheid is precies het punt van detectie in de diepte. Voor meer over hoe deze tools werken, zie stealth-browsers en anti-detectiebrowsers uitgelegd en hoe cside AI-agents op stealth-browsers detecteert.

Generaliseren voorbij de trainingsverdeling

Eén getal verdient het te worden uitgelicht, want het is het getal dat makkelijk te faken en makkelijk verkeerd te lezen is. Bijna elke cursordetector scoort rond 0,99 AUC op het soort beweging waarop hij is getraind; dat cijfer is bijna betekenisloos. Het cijfer dat ertoe doet is transfer, de prestatie op een generator die volledig uit de training is gehouden.

Op een humanizerfamilie waarop geen van beide modellen is getraind, bereikt cursor_v2 AUC 0,999, terwijl de detector van de vorige generatie zakt naar 0,920 en het grootste deel van zijn recall verliest. De winst zit in de generalisatie, niet in het bijschaven binnen de verdeling.

AUC-vergelijking tussen generatoren

Wat we kunnen bewijzen, en wat niet

Een securityverslag is alleen het lezen waard als het eerlijk is over zijn randen, dus hier zijn de onze.

Nauwkeurigheid binnen de verdeling is geen robuustheid. Elk getal over beweging die het model heeft gezien is bijna perfect en we leunen op geen ervan. De beweringen hier rusten op achtergehouden generatoren en een live stealth-browsertest.

Het resultaat tussen generatoren is een sterke puntschatting, geen universele garantie. Het is gekalibreerd op een eindige steekproef van echte mensen en één achtergehouden humanizerfamilie. Lees de 0,999 als goedgekeurd voor die familie, niet voor elke cursor die ooit zal bestaan. De eerlijke open hefboom is de breedte van echte menselijke beweging om tegen te kalibreren, meer dan het model zelf.

In productie passen we debounce toe. Eén vreemd gebaar markeert nooit een persoon; de uitgerolde scorer wacht op meerdere als bot gescoorde bewegingen op rij voordat hij ingrijpt. De getallen in dit artikel zijn de hardere weergave per beweging, vóór die afvlakking.

Wat dit betekent voor teams die detectie draaien

Haal de details weg en de les generaliseert. De bots die ertoe doen zijn degene die je statische controles al hebben verslagen, en de manier om ze te vangen is met een signaal dat onafhankelijk faalt van het signaal dat zij verslaan. Gedrag, hoe een sessie daadwerkelijk beweegt, klikt en scrolt, is dat signaal, en het is de laag waarvoor aanvallers het minst budgetteren. Dezelfde redenering loopt door bots vangen die niet gevangen willen worden en hoe OpenClaw-agents botdetectie omzeilen.

De praktische ontgrendeling is kosten. Een gedragsmodel klein en snel genoeg om op elke bezoeker te draaien, niet alleen de verdachte, verwijdert de blinde vlek die steekproeven creëren. cursor_v2 is zo'n signaal: orthogonaal aan fingerprinting, goedkoop genoeg om altijd aan te staan en, tot nu toe, standhoudend tegen de beste cursorvervalsers die we kunnen bouwen.

Hoe cside past

cside geeft je volledig zicht op elk script, verzoek en derde partij die je site raakt, plus het gedragssignaal om echte gebruikers te onderscheiden van de automatisering die zich ertussen verstopt. Het cursormodel is één laag in een detectiestapel die mensen, goede bots en kwaadaardige agents al scheidt op de browserlaag, waar de statische aanwijzingen al zijn vervalst.

Ontdek de AI-agentdetectie van 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 is een klein neuraal model dat scoort hoe een muis daadwerkelijk bewoog. Het neemt één cursorpad, de samples die een beweging achterlaat terwijl ze van het ene punt naar het andere reist, en geeft één kans terug dat de beweging door automatisering is geproduceerd. Het draait op de CPU in minder dan een milliseconde per beweging, dus het kan elk gebaar scoren in plaats van alleen verdachte sessies.

Een browserfingerprint kun je exact kopiëren. Menselijke cursorbeweging is het resultaat van een ruizige biologische regelkring, en die overtuigend reproduceren over duizenden gebaren is een ander en onafhankelijk probleem. Een bot kan perfect lijken op de fingerprintlaag en zichzelf verraden op het moment dat hij beweegt, en daarom vangt een bewegingssignaal sessies die statische controles doorlaten.

In onze test niet. We richtten een LLM-agent die Camoufox aanstuurde, een stealth-browser gebouwd om detectie op fingerprintniveau te verslaan, op een teststorefront en scoorden de echte muisbewegingen. cursor_v2 markeerde er 100% van, in de standaardmodus en met de ingebouwde bewegingshumanisatie van de agent ingeschakeld. Stealth op de fingerprintlaag koopt geen stealth op de bewegingslaag.

Tegenover een achtergehouden controle van echte menselijke bewegingen was het percentage valse positieven 0,0% bij de uitgerolde drempel, met een mediane menselijke score van 0,000. In productie past het model ook debounce toe: één vreemd gebaar markeert nooit een persoon, omdat het uitgerolde model wacht op meerdere als bot gescoorde bewegingen op rij voordat het ingrijpt.

Monitor en Beveilig Je Third-Party Scripts

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

Start gratis, of probeer Business met een proefperiode van 14 dagen.

cside dashboard interface met script monitoring en beveiligingsanalytics
Related Articles
Boek een demo