What this tool does
The Okta System Log records every sign-in, MFA challenge, session, admin change and application access of an Okta org as LogEvent records (eventType, actor, client, target, outcome, authenticationContext, securityContext, debugContext).
This tool reads a System Log export in your browser, correlates the events across users, sessions and IP addresses, and tells you whether they show an identity attack — with a verdict, the findings and their evidence, an incident timeline and a remediation checklist.
What it detects
- MFA fatigue / push bombing: bursts of Okta Verify pushes or rejections, escalated when a push is finally accepted.
- Helpdesk social engineering: a password or factor reset by an admin, followed by a new factor enrolled — critical when it comes from a new network, a hosting provider or an anonymizer.
- Session hijacking: the same externalSessionId used from several networks (ASNs) or browsers, Okta roaming detections, ThreatInsight hits, proxy / Tor sign-ins.
- Admin abuse and persistence: Super administrator and admin role grants, API token creation, new or modified identity providers (inbound federation), deactivated authenticators and policies, weakened security settings.
- Password spraying and guessing: many accounts tried from one IP with few attempts each, or many failures on one account — escalated when a sign-in succeeds.
- Sensitive app access after suspicious activity (AWS, Microsoft 365, Google Workspace, GitHub, Salesforce, the Okta Admin Console…), with a link to the matching log-analysis tool.
Detection rules
Detections are data, not code: each rule is a Sigma-like filter, threshold, sequence or follow-up condition on System Log fields, with a severity and MITRE ATT&CK techniques. The rule set is versioned with the tool.
| Rule | Base severity | ATT&CK |
|---|---|---|
MFA fatigue / push bombingmfa.push_fatigue | High | T1621 |
Helpdesk reset, then a new factor enrolledmfa.helpdesk_reset_then_enroll | High | T1656, T1098.005, T1556.006 |
Password or factors reset by another usermfa.factor_reset_by_admin | Low | T1098 |
MFA bypass attemptmfa.bypass_attempt | Medium | T1556.006 |
Session used from several networkssession.multi_asn | High | T1539, T1550.004 |
Session used by several browserssession.multi_user_agent | Medium | T1539, T1550.004 |
Session roaming detected by Oktasession.roaming | Medium | T1550.004 |
Password sprayingaccess.password_spray | High | T1110.003 |
Password guessing on one accountaccess.brute_force | Medium | T1110.001 |
Sign-in through an anonymizeraccess.anonymizer | Medium | T1090.003, T1078.004 |
Sign-in from a hosting provideraccess.hosting_provider | Medium | T1078.004 |
Okta ThreatInsight hitthreat.threatinsight | Medium | T1110 |
User reported suspicious activitythreat.user_reported | High | |
Breached credential usedthreat.breached_credential | Medium | T1078 |
Super administrator grantedadmin.super_admin_granted | High | T1098.003 |
Admin role grantedadmin.role_granted | Medium | T1098.003 |
API token createdadmin.api_token_created | Medium | T1098.001 |
Okta support access / impersonationadmin.support_access | Medium | T1078.004 |
New identity provider (inbound federation)persistence.idp_created | High | T1484.002 |
Identity provider modifiedpersistence.idp_modified | Medium | T1484.002 |
Authenticator deactivateddefense.authenticator_disabled | High | T1556.006 |
Policy or rule disableddefense.policy_disabled | Medium | T1556.006 |
Policy changeddefense.policy_modified | Low | T1556 |
Security settings changeddefense.security_settings_changed | Medium | T1562 |
Sensitive app opened after suspicious activityapp.sso_after_suspicious | High | T1021.007, T1550.001 |
Limitations
- The System Log keeps 90 days: older activity is gone unless it was streamed or exported.
- A clean verdict only covers what is in the export: a filtered or partial export can miss the attack.
- Detections are heuristics: VPN users, travelling staff and helpdesk work can trigger findings. Confirm each one with the people involved.
- Baselines (new country, new device) are computed from the export itself, so a short export gives little history.
- debugContext.debugData fields (risk, behaviors, threatSuspected) are not a stable contract and vary between orgs and Okta releases.
FAQ
Are my logs uploaded anywhere?
No. The analyzer is Rust compiled to WebAssembly and runs in a Web Worker in your browser; files are read locally in chunks. There is no upload endpoint.
How large an export can it handle?
Exports are streamed in 4 MB chunks (gzip is decompressed on the fly), so multi-GB files work; what limits you is the memory needed for the events themselves. Very large exports list the evidence and the most recent events.
Which Okta events matter most in a compromise?
user.session.start and user.authentication.auth_via_mfa (sign-ins), system.push.send_factor_verify_push and user.mfa.okta_verify.deny_push (push fatigue), user.mfa.factor.reset_all / activate (factor changes), user.account.privilege.grant (admin roles), system.api_token.create, system.idp.lifecycle.create (inbound federation) and user.authentication.sso (app access).
How do I spot session hijacking in Okta?
Group events by authenticationContext.externalSessionId: a session used from two networks (securityContext.asNumber) or two browsers is suspicious, especially right after sign-in. Okta also logs security.session.detect_client_roaming.
Is this an official Okta tool?
No. It is an independent tool, not affiliated with or endorsed by Okta, Inc. It reads the log format documented in Okta's public developer documentation.
The verdict says compromised — what now?
Preserve the logs, contain the accounts involved (clear sessions, reset factors and passwords, revoke admin roles, tokens and unknown IdPs), then investigate the applications that were accessed. The remediation tab lists the steps for your findings, and Okta's security guidance (sec.okta.com) documents detections and hardening for these attacks.