Skip to content

Attack protection

What the platform detects in every sign-in and answers on its own, when it acts and for how long, how to read an incident, when to lift a measure or dismiss it, and what the AI analyst adds.

Authio watches every password sign-in, every password recovery request and every sign-in request sent to a phone for the shapes attacks leave, and answers them by itself. Each answer is aimed at the attacker, never at the person attacked, and is recorded on an incident you read in Attack protection.

There is nothing to switch on or tune. The engine runs in every realm with the same thresholds, and what is left for a person is to confirm what happened, lift a measure that caught legitimate traffic, and decide whether the realm should be stricter.

How it works

Each failed password, each request refused on a phone and each recovery request is counted per source address and per account, never per realm: a realm’s traffic swings with the hour and the season, but one address trying eight accounts in ten minutes does not happen by accident. When a count crosses a threshold, the platform takes a measure at once and records it on the realm’s incident for that kind of attack.

  • Aimed at the attack, never at the owner. A source is blocked, an account refuses addresses it was never approved at, a phone stops receiving requests. The person under attack keeps signing in from where they always do, so an attacker cannot lock somebody out of their own account.
  • Every measure lapses by itself. Blocks and pauses run for a set time and end on their own, and you can lift one earlier. Only a password treated as exposed does not lapse: it has to be changed.
  • Datacenters and Tor exits are held to half the threshold. People rarely sign in from either; scripts nearly always do. The halving is recorded among the reasons of the measure.
  • It never stops sign-in because of its own failure. The engine counts in a shared cache, and when that cache cannot be read the attempt goes on as if the protection were not there.

What it detects

Every incident is one of five kinds of attack, and the kind is its title on the list. A blocked source is classified by what it was doing; the phone and recovery detections have kinds of their own.

KindWhat it looks likeWhat the platform does
Credential stuffingA list leaked from another site is being replayed: at least 30% of the source’s failures named accounts the realm never had.Blocks the source.
Password sprayingA few common passwords tried against many accounts: the source failed against three or more different accounts, mostly real ones.Blocks the source.
Brute force on one accountOne account guessed at from addresses it was never approved at. A source blocked while it kept to one or two accounts is filed here too.Closes the account to unknown addresses, or blocks the source.
Push bombingSomebody who holds the password keeps sending sign-in requests to the owner’s phone, hoping one gets approved by mistake.Pauses the account’s sign-in requests.
Password recovery abusePassword recovery asked for many accounts from one address: a mailbox flood, or a way to learn which accounts exist.Blocks the source.

A correct password arriving from an attack is not a sixth kind. It is recorded as Password exposed on the incident of the attack that carried it, credential stuffing or password spraying, and turns that incident critical.

When it acts, and for how long

These rules are the platform’s, the same in every realm, and cannot be changed per realm or per account. Each measure names the factors that set it off, so a blocked office can be explained rather than guessed at.

RuleSet off byMeasure
Blocked source8 different accounts, or 30 failures, from one address within 10 minutesEvery password attempt and recovery request from the address to the realm is refused for 15 minutes. A second block within 24 hours lasts 1 hour, a third 24 hours.
Datacenter networks and Tor exitsHalf: 4 accounts or 15 failuresThe same block.
Smart lockout10 failures against one account within 15 minutes, from addresses it was never approved atThe account refuses every such address for 30 minutes. The addresses it was approved at keep working.
Exposed passwordA correct password from an address the account was never approved at, whose source failed against at least 3 accounts within 10 minutes and looks like a list being worked through: 30% unknown accounts, a datacenter or Tor network, or 5 accounts or moreThe sign-in is refused as if the password were wrong, the account must change its password at the next sign-in, and its owner is told by e-mail. It does not lapse.
Push bombing2 sign-in requests refused on the phone within 30 minutesNo sign-in request reaches the account’s phones for 30 minutes.
Recovery, per accountMore than 3 recovery requests for one account within 30 minutesFor 30 minutes, further requests get the usual answer and quietly send nothing.
Recovery, per address8 different accounts asked to recover from one address within 30 minutesThe address is blocked like any other source.

Shared networks

An address that 5 or more accounts of the realm have approved is read as an office or a campus. It is never blocked whole, and a correct password from it is never treated as exposed. Its accounts still lock against strangers one by one.

What a blocked source sees

A blocked source is refused before any account is looked up, with the same answer as a rate limit (TooManyRequests): wait a few minutes and try again. The answer is the same whatever name was typed and says nothing about the password, so a person caught behind a blocked address is not told their password is wrong.

The realm’s own lockout

The realm’s Max Failed Attempts and Lockout Duration (Security policies) keep applying beside the engine, with one difference: a failure from an address the account was never approved at counts against that address alone, never against the account. After the realm’s number of such failures within an hour, that address is locked out of the account for the realm’s duration, while the addresses the account was approved at follow the ordinary lockout. This lock opens no incident.

Incidents

Detections of the same kind against one realm join a single incident as long as each arrives within 30 minutes of the last, so an attack spread over three hundred addresses reads as one incident with three hundred blocked sources. Each incident names its realm and the client its first detection came through.

Severity

SeverityWhen
CriticalA correct password arrived from the attack.
HighBrute force on one account, push bombing, or a source blocked for the third time within 24 hours.
MediumAny other blocked source.
LowPassword recovery abuse.

An incident keeps the highest severity it reached.

Statuses

StatusMeaning
ActiveThe attack is still being detected.
ResolvedClosed by itself after 30 minutes without a new detection or a refused attempt. Open incidents are checked every 5 minutes.
DismissedClosed by somebody as not an attack, which lifted every measure still in force.

Measures

MeasureWhat it does
Source blockedRefuses one address in the realm.
Closed to unknown addressesAn account refuses every address it was never approved at.
Sign-in pushes pausedAn account’s phones receive no sign-in request.
Password exposedAn account must change its password at the next sign-in.

Each measure also says what it is aimed at and why: the factors counted, such as failures, different accounts, the share of unknown accounts, a datacenter network or Tor exit, requests refused on the phone or a correct password. It reads In force, lapses … while it holds, Lapsed once its time ran out, Lifted … when somebody lifted it, and Change required for an exposed password.

The attacks screen

Attack protection reads the realm chosen in the realm selector, or every realm you administer under All realms, and a client filter narrows all of it to what came through one client. It has nothing to configure.

PartWhat it shows
SummaryThe incidents of the last 30 days: how many were high or critical, over a bar of Critical, High, Medium and Low, and how many there were, over a bar of the five kinds. It only reads; it never narrows the list.
Attack sources and Latest measuresThe countries and networks the blocked sources sat in, and the latest measures with their reasons.
Exposed accountsPeople whose password an attack proved, latest first, each with how many exposures and the incident behind the latest. Still exposed keeps only those who have not changed it since; a password changed after its exposure resolves it.
IncidentsNewest first, 24 to a page and up to 96. Status narrows to Active, Resolved, Dismissed or All. The layouts are Compact (the default), Timeline and List, and Group stacks the page by date, realm, status, severity, exposure, kind of attack or client.

Reading an incident

Clicking an incident opens it beside the list:

  • What that kind of attack is.
  • Refused attempts, Blocked sources, Protected accounts and Exposed passwords: the attempts its measures refused, the sources it blocked, the accounts it put a measure on and the accounts whose correct password arrived from it.
  • Started, Last activity, Closed and Detections: when it was first detected, when it last had a detection or a refused attempt, when it closed and how many detections joined it.
  • The AI analyst’s reading, when your account has one.
  • Measures taken, each with its reasons and its standing, and Lift on those still in force.

The Dashboard shows the same protection over the last 30 days in its Attack protection block, with Open attack protection. On a person’s page in Users, Password exposed in an attack stays visible while their current password is still the one an attack proved.

Lift a measure or dismiss an incident

Both actions need permission to update realms (realm:update); without it the screen is read-only. There is no manual block: every measure is one the platform took.

ActionWhereWhat it does
LiftOn a measure still in force, in the incident’s side panelEnds that measure now. For a blocked source it also forgets what the source did, so its next mistyped password starts a new count instead of adding to the one that blocked it.
Dismiss as not an attackOn an active incident, in its menu and in the side panel, after a confirmationCloses the incident as Dismissed, lifts every measure still in force and forgets what each source it blocked did, lapsed blocks included. Passwords already treated as exposed still have to be changed.

Every lift and dismissal is recorded in the change trail as an update, under the name of whoever did it.

Dismiss when legitimate traffic was caught

A load test, an integration retrying an old password, a classroom signing in at once: dismissing records that it was not an attack and lets those sources straight back in.

The AI analyst

When your plan includes the AI advisor and the realm gave it consent, an AI analyst reads each incident and writes what it makes of it in the incident’s side panel. It reads the incident’s figures only, without addresses or names, and never sits in the path of a sign-in: the engine decides as the attempt arrives, the analyst reads afterwards, and an analyst that is slow or down changes nothing about who gets in.

To turn it on, open the realm in Realms, choose AI advisor and switch on Let the AI advisor analyse this realm; see Authio AI. Without the plan or the consent, the side panel simply shows no analysis. Consent is checked again when each reading runs.

When it reads

ReadingWhen
When it openedOnce the incident has run for 5 minutes.
When it turned criticalWhen the incident turns critical after its first reading.
When it closedWithin 24 hours of the incident closing by itself. A dismissed incident gets no closing reading.

Readings are scheduled every 5 minutes, each of the three at most once per incident, and an account gets at most 12 readings per UTC day, so an attacker cannot run up a bill by opening incidents. Earlier readings fold under the latest. A reading that failed can be asked for again with Try again.

What a reading says

  • Classification: one of the five kinds of attack, Legitimate surge, Misconfiguration or Inconclusive, with its confidence.
  • What happened, What was done and Exposed passwords.
  • Recommended changes for the realm.
  • In the closing reading, the Post-incident report.

A reading carries up to three changes, and each can only make the realm stricter. Each shows the change, the realm’s current value and what your users will notice. They change the realm’s own account rules:

RecommendationRealm settingLimit
Refuse breached passwordsBlock breached passwordsTurns it on
Lock out soonerMax Failed AttemptsNever below 3
Lock out for longerLockout DurationUp to 1,440 minutes
Lock out new accounts tooLockout StatusTurns it on
Require longer passwordsMinimum LengthUp to 64 characters
  • Apply asks for confirmation and changes the realm for every application that signs in through it. Whether the change still tightens the realm is checked again at that moment; one the realm already meets reads Already in place.
  • Undo puts the previous value back from the same incident, as long as the realm still holds the value that was applied. A change somebody made since is left alone.
  • Applying and undoing are recorded in the change trail, like any change to the realm.

Post-incident report

The closing reading adds a report shaped after what Brazil’s data protection authority (ANPD) asks of a security incident communication (Resolução CD/ANPD nº 15/2024): Nature of the incident, Data and people affected, Risks, Measures and Communication. Copy report puts it on the clipboard with the incident’s dates and counts.

Communicating the incident is your decision

As the controller, you decide whether to notify the ANPD and the people affected, within 3 working days of learning of the incident. The report says whether the incident looks like one that must be communicated, and why, but never settles it for you. Check what the AI wrote before acting on it.

Notifications and webhooks

The platform tells the account’s operators, the realm’s webhooks and the person whose password was exposed, without anyone opening the screen.

WhoWhatWhen
The account’s operatorsThe Attacks detected notification in Notifications: critical for an exposed password, informational for recovery abuse, a warning otherwiseAn incident opens or turns critical, and for each exposed password
Realm webhooksattack_detectedOnce per incident, when it opens
Realm webhookscredential_compromisedFor each account whose correct password arrived from an attack
The account holderAn e-mail branded for the client they signed in toTheir password was exposed; they must change it at the next sign-in
  • In Preferences, the account owner decides whether Attacks detected also goes out by e-mail and by webhook, or is not raised at all. See Notifications.
  • The same account is reported at most once an hour. A list replayed against the realm is still refused every time, but the incident, the notification, the webhook and the e-mail are not repeated.
  • Only realm endpoints receive the attack events. What each one carries is in Webhooks.

Read and act from the Admin API

Incidents are in the Admin API, called with an API secret in the x-api-key header. Paths are relative to /api/v1/admin, and lists are paginated with pageNumber and pageSize.

EndpointPermissionWhat it does
GET /threat-incidentsaudit:readIncidents, newest first, without their measures. realmId, clientId and incidentStatus (Active, Resolved, Dismissed) narrow them.
GET /threat-incidents/summaryaudit:readA period’s figures: incidents open now and measures in force, refused attempts, blocked sources, protected accounts and exposed passwords, day by day, by kind and by severity, the countries and networks of the blocked sources and the latest measures. days is 7, 30 or 90 (30 otherwise); realmId and clientId narrow it.
GET /threat-incidents/{incidentId}audit:readOne incident with every measure it took.
POST /threat-incidents/{incidentId}/dismissrealm:updateDismisses an active incident, lifting every measure still in force.
POST /threat-incidents/mitigations/{mitigationId}/revokerealm:updateLifts one measure before it lapses.
GET /threat-incidents/exposuresaudit:readThe accounts whose password an attack proved, one row per account by its latest exposure. realmId, clientId and unresolvedOnly (only those who have not changed it since) narrow them.
GET /realms/{realm}/users/{userId}/threat-standinguser:readWhat stands against one account: its latest exposures, whether its current password is still exposed and since when, and the measures in force on it.
GET /threat-incidents/{incidentId}/analysesaudit:readThe analyst’s readings, newest first, in the caller’s language.
POST /threat-incidents/analyses/{analysisId}/retryrealm:updateAsks again for a reading that failed.
POST /threat-incidents/analyses/{analysisId}/recommendations/{recommendation}/applyrealm:updateApplies a recommendation, counted from zero. Refused with 409 when it is already applied or the realm is already at least as strict.
POST /threat-incidents/analysis-actions/{actionId}/revertrealm:updateUndoes an applied recommendation.
List the active incidentsBash
curl 'https://authio.api.hyperio.tech/api/v1/admin/threat-incidents?incidentStatus=Active&pageNumber=1&pageSize=20' \
  -H "x-api-key: $AUTHIO_API_KEY"

Respond to an incident

By the time you look, the platform has already acted. Your part is to confirm what it was, deal with exposed passwords, and decide whether the realm should be stricter.

  1. Read what it was

    Open the incident in Attack protection and read its kind and description: is it an attack, or traffic of your own?

  2. Read the measures

    Under Measures taken, see which sources are blocked and why, and whether any Password exposed appears.

  3. Deal with exposed passwords

    Each owner has already been asked to change the password, but sessions they had open stay open until they are ended. If the account could have been used meanwhile, end its sessions in Sessions.

  4. Trace the source

    Open Audit › Access and search for the blocked address to read every attempt it made, successful ones included.

  5. Decide

    If it was legitimate traffic, choose Dismiss as not an attack. If it was real, read the AI analyst’s recommendations and apply the ones that fit.

  6. Keep the record

    Once the incident closes, copy the post-incident report if you need to communicate it.

Permissions

PermissionWhat it allows
audit:readOpening Attack protection and reading the summary, the incidents, the exposed accounts and the analyst’s readings. Without it, the screen says your role cannot open it.
realm:updateLifting a measure, dismissing an incident, applying or undoing a recommendation and asking again for a reading that failed.
user:readSeeing on a person’s page whether an attack proved their password.

With the account roles, an Auditor reads everything here but cannot act; a Developer, Admin or Owner can also act.

Next steps

Analytics cookies

We would like to measure how the console is used, with Google Analytics, so we can see which screens people get stuck on. It writes a cookie that recognises this browser on your next visit.

Refusing changes nothing else. The cookies that keep you signed in and remember your language and theme are needed to run the console, and stay either way. Read the Privacy Policy