Rupt team
2025/02/10
How to detect account takeover: signals, software, and setup
Account takeover detection comes down to one question, asked at the moment a session starts: is the person holding this account the person who owns it? A correct password cannot answer that question, because in a takeover the password is exactly what the attacker stole. Detection means comparing everything else about the session (the device, the network path, the credentials, the behavior) against the account's own history, and returning an answer fast enough to act on.
The signals that reveal a takeover
No single signal proves anything. Each layer catches a different attacker mistake, and each one generates false positives when read alone. Good ATO detection is the discipline of corroborating across layers before acting.
Device signals
The strongest early indicator is a known account authenticating from a device it has never used. Device fingerprinting builds a stable identifier from hardware and browser characteristics, so it survives cleared cookies and incognito mode, the first two things an attacker reaches for. An account that has used the same laptop and phone for a year, then suddenly logs in from a third device, deserves a closer look.
The false positives are ordinary life. People buy new phones, borrow a partner's laptop, and log in from hotel machines. A family sharing one household computer is the classic case: one browser, four accounts, zero fraud. Corroboration resolves it. A new device on the account's usual home network, followed by normal browsing, is almost certainly a new phone. A new device on a datacenter IP that goes straight to the stored payment page is almost certainly not.
Attackers know device checks exist, so they rotate emulators, anti-detect browsers, and automation tools to present a fresh device on every attempt. The evasion is itself detectable: a browser that claims to be Safari while its rendering stack reports Windows, or a canvas hash that changes on every request, is a spoofing signal, and the territory overlaps with bot detection. Browser fingerprinting that checks internal consistency catches most of it.
Network signals
Network signals describe the path a login took rather than the machine behind it:
- Impossible travel: consecutive logins whose locations imply faster-than-flight movement. A session from Chicago followed forty minutes later by one from Lagos has no innocent physical explanation.
- Datacenter and proxy egress: real users arrive from residential and mobile networks. A login from a hosting provider's address range means the traffic is coming out of a rented server.
- IP reputation: addresses that recently ran credential attacks against other sites tend to reappear, and shared blocklists catch repeat offenders.
Every network signal has a well-known benign twin. Corporate VPNs put honest employees behind datacenter IPs all day, and a VPN that switches exit regions mid-session fakes impossible travel perfectly. Mobile carriers pool thousands of subscribers behind one CGNAT address, which wrecks naive per-IP velocity rules. Travelers trip first-time-country checks on every trip. The rule is the same as at the device layer: a network anomaly alone justifies logging, never blocking. A datacenter IP from a fingerprint the account has used for two years is an observation. The same IP from a fingerprint nobody has seen before is a challenge.
Credential signals
Credential-layer signals often fire before any specific account is breached:
- Stuffing velocity: a surge of failed logins spread across many usernames from a rotating set of addresses is a credential stuffing run in progress. OWASP's credential stuffing prevention cheat sheet covers the mechanics.
- Breach-list hits: a login using a password found in public breach corpuses raises the odds of stuffing sharply. Have I Been Pwned's Pwned Passwords lets you check without handling plaintext lists yourself.
- Password spraying: one common password tried against many accounts, which stays under per-account lockout thresholds.
These signals are precise in aggregate but weak at attribution. A distributed stuffing run throttled to a few attempts per IP looks like normal traffic in a per-IP view. It only becomes visible when you group failures by device fingerprint and network block, so credential monitoring works best on top of device identity.
Behavioral signals
Once a login succeeds, behavior is what separates the owner from the intruder. Owners move through a product on worn paths at a familiar pace. Intruders go straight for value: saved payment methods, gift card balances, the email-change form, the export button. Useful behavioral signals include navigation order, whether credentials were typed or pasted, time-of-day fit, and whether the session's first actions touch security settings.
Behavior is the noisiest layer on its own. Real owners do change their email at 3 a.m. once in a while. Treat behavioral change as a multiplier on the other layers, not a verdict by itself.
Detection approaches, compared
Teams generally reach for one of four setups.
In-house rules over raw logs. Query your auth logs, alert on thresholds, block the worst offenders. Free to start and fully under your control, but the ceiling arrives fast. Logs key on IP, not device, so the entire device layer is missing. Queries run in batch, so detection lands after the money moved. And every rule is yours to tune forever. It is a fine forensics tool and a poor prevention tool.
WAF and edge bot tools. Bot management at the CDN can rate-limit stuffing runs and flag obvious automation before it reaches your origin. The limitation is scope: an edge tool sees one request at a time and knows nothing about the account behind it, so it cannot know this device is new for this user. Volumetric attacks get stopped; a single manual login with valid stolen credentials from a residential proxy sails through.
Auth-provider add-ons. Identity platforms bolt risk scoring onto their login flow. Convenient if you already use one, but coverage stops at the gate. Anything after authentication is out of view, a session stolen through cookie theft never touches the login page, and sensitive in-app actions are not evaluated at all.
Dedicated account takeover detection software. Purpose-built tools pair device intelligence with per-account history and evaluate any event you send them, which fixes both blind spots above: they recognize devices across sessions, and they keep watching after login.
If you are evaluating account takeover detection software, four capabilities separate tools that prevent from tools that merely report:
- Real-time verdicts. You need a synchronous answer in well under a second, since the point is to hold the login until you have one. Async flagging is forensics with better branding.
- Evaluation beyond login. The damage in a takeover happens at password change, email change, payout, and purchase. Stolen session cookies skip your login page entirely, so a login-only tool never sees the worst attacks.
- Challenge integration. A medium-risk verdict is only useful if it can trigger a step-up (an email code, a stronger factor) without you building that flow from scratch.
- Feedback loops. You will find false positives and missed attacks. Ask any vendor how confirmed outcomes feed back into detection, because a tool that cannot absorb ground truth has its accuracy frozen on day one.
An account takeover detection API with those four properties slots into any stack, because it works on events you choose to send rather than requiring a specific identity provider or CDN.
Wiring it up
The integration pattern is the same regardless of vendor:
- Collect device signals in your web and mobile clients with a small SDK.
- At login, send an evaluation event and hold the session. Do not issue tokens until the verdict returns; if you issue first and evaluate after, the attacker is racing you and winning.
- Evaluate sensitive actions too: password and email changes, adding a payment method, payouts, large purchases, data exports.
- Branch on the verdict. Low risk proceeds untouched, so the vast majority of real users feel nothing. Medium risk gets a step-up challenge, which a real owner passes in seconds and a stuffing bot does not. High risk gets blocked, and the account owner gets notified through a channel the attacker does not control.
- Review flagged accounts weekly at first. Early tuning is where most of the false-positive reduction happens, and it tells you which risk thresholds fit your user base.
The step-by-step version, including policy configuration, is in the account takeover prevention guide. The bot detection guide covers the volumetric side, where stuffing runs look like any other automation problem.
How Rupt handles it
Rupt's account takeover protection follows the model above: an SDK collects device and behavioral signals, one API call evaluates a login or any sensitive action in real time, and the response tells you to let the session through, step it up, or stop it, with the specific risks named. Step-up challenges are built in, thresholds are yours to tune in the rules engine, and pricing is public.
Start with login evaluation alone if you want a small first step. It catches the bulk of opportunistic ATO in an afternoon of integration, and expanding to sensitive actions later is the same API call with a different event name.