Multi-Factor Authentication (MFA) Explained: Types, Bypass Attacks and Best Practices (2026)

Multi-Factor Authentication (MFA Explained
Multi-Factor Authentication (MFA Explained
By HOC Team  |  Last updated: August 2026  |  Read time: ~22 min

In September 2022, Uber suffered a complete network compromise. The attacker purchased a contractor's VPN credentials on the dark web, but those credentials were protected by MFA — specifically, Duo push notifications. The attacker's solution was not to break the cryptography.

They spammed the contractor's phone with push notification approval requests for over an hour, until the contractor — exhausted and confused — finally tapped "Approve" just to make it stop. Within minutes the attacker was inside Uber's internal network, found privileged credentials in a PowerShell script, and had access to AWS, Google Workspace, Slack, and Uber's HackerOne vulnerability report programme.

The Uber breach illustrates the central reality of MFA security in 2026: not all MFA is equal, MFA can be bypassed, and the specific type of MFA you deploy determines what attacks you are protected against. SMS OTP stops automated credential stuffing but falls to SIM swap.

TOTP authenticator apps stop automated attacks but fall to real-time phishing proxies. Push notifications fall to MFA fatigue attacks. Only phishing-resistant MFA — FIDO2 hardware keys and passkeys — stops all of these attack categories by design.

This guide covers every MFA type in depth, exactly how each bypass attack works technically, which MFA types are and are not vulnerable to each attack, enterprise deployment strategy, and the path to phishing-resistant authentication.

📊 MFA in 2026 — the security picture MFA blocks 99.9% of automated account compromise attacks (Microsoft) · Only 38% of enterprises have deployed phishing-resistant MFA for all users · MFA fatigue attacks increased 312% in 2023–2025 · FIDO2/passkeys now supported by every major platform (Apple, Google, Microsoft) · 67% of phishing-resistant MFA deployments use passkeys on device biometrics · NIST SP 800-63B recommends against SMS OTP as a restricted authenticator · Average credential stuffing attack succeeds against MFA-protected accounts at 2.4% rate (TOTP) vs 0% (FIDO2)
1. What is MFA and why it matters

Multi-Factor Authentication (MFA) requires a user to present two or more pieces of evidence (factors) from different categories to prove their identity. The principle is straightforward: a password alone is a single point of failure — if it is stolen, guessed, or leaked, the account is compromised. Adding a second factor from a different category means an attacker must steal two fundamentally different things simultaneously, dramatically increasing the difficulty of account takeover.

🔑
Why passwords alone fail — the credential theft scale problem

Over 24 billion username/password combinations were available on criminal marketplaces in 2023. Password reuse across sites means a breach of a low-value forum can yield credentials that work against corporate VPNs, email systems, and banking applications. Credential stuffing tools automate the testing of millions of credential pairs against target services. Against password-only authentication, this is a numbers game that attackers routinely win.

MFA changes the economics. Automated credential stuffing cannot supply the second factor — it does not have the user's phone, hardware key, or biometric. The attacker must move from automated attack to targeted, real-time interception — a far more expensive operation that does not scale. Microsoft's telemetry shows MFA stops 99.9% of automated account compromise attacks. The remaining 0.1% are advanced targeted attacks against specific individuals using techniques covered in this guide.

MFA is not a complete solution — it is a massive improvement with specific residual risks. Understanding those residual risks is what this guide is about. An organisation that deploys SMS OTP and considers the identity problem solved has not solved it — they have raised the cost of attack significantly but left specific bypass paths open. An organisation that deploys FIDO2 hardware keys for privileged accounts and enforces phishing-resistant MFA via conditional access has closed almost all of the remaining paths.
MFA authentication flow — user presents Factor 1 (something you know) and Factor 2 (something you have or are), both verified before access is granted
MFA Authentication Flow — Two Verification Steps 👤 User Factor 1 Password / PIN Attacker needs: stolen / guessed Identity Provider Verifies both factors Issues session token Factor 2 TOTP / FIDO2 / Push Attacker needs: device / key / biometric ✓ Access Granted Session token valid for configured duration Conditional access re-evaluates on risk signals
2. Authentication factors — the three categories

MFA is defined by combining factors from different categories — not just adding more of the same type. Two passwords do not constitute MFA. Two fingerprints do not constitute MFA. The value comes from the fundamentally different theft or compromise method required for each category.

Factor typeCategoryExamplesHow it can be stolenHow it can be faked
Something you knowKnowledgePassword, PIN, passphrase, security question answerPhishing, credential stuffing from data breaches, shoulder surfing, keylogger, brute forceGuessing, social engineering, database breach
Something you havePossessionHardware key (YubiKey), TOTP authenticator app, push notification, SMS OTP, smart card, software certificatePhysical theft (hardware key), SIM swap (SMS), malware (app-based TOTP app compromise), session hijacking (push)Real-time relay (for OTP codes); cloning (SIM); token theft (cookies)
Something you areInherenceFingerprint, Face ID, iris scan, voice recognition, typing pattern (behavioural)Biometric database breach, spoofing with printed fingerprints or 3D-printed face masks (rare, nation-state level)Biometric spoofing (sophisticated, impractical at scale); deepfake voice (emerging threat)
Something you doBehaviour (continuous)Typing rhythm, mouse movement, location patternsBehavioural profiling by sophisticated attacker over timeMachine learning-based behavioural mimicry (theoretical at scale)
Somewhere you areLocationGPS location, IP geolocation, network (corporate WiFi), device presence in a geofenced areaVPN to spoof location, IP address manipulationVPN tunnelling; GPS spoofing apps (physical location)
💡 Two-Factor Authentication (2FA) vs Multi-Factor Authentication (MFA) 2FA specifically uses exactly two factors. MFA uses two or more. In practice, the terms are used interchangeably — most consumer and enterprise "MFA" implementations use exactly two factors (typically password + second factor). True step-up MFA for high-risk actions might require three: password + push notification + biometric confirmation. The important concept is that factors must come from different categories — "password + PIN" is not MFA because both are knowledge factors.
3. Every MFA type explained

MFA types within the "something you have" and "something you are" categories vary enormously in security properties, usability, and deployment complexity. Understanding each one's mechanics determines what attacks it is and is not vulnerable to.

📱
SMS OTP
A 6-digit code sent via SMS text message, typically valid for 5–10 minutes. The most widely deployed MFA type globally due to requiring no app or hardware — any phone number suffices.
Phishing?Vulnerable — code interceptable in real-time
SIM swap?Vulnerable — attacker takes over phone number
Auto-stuffing?Protected — automated bots cannot get the SMS
UsabilityHigh — familiar, no extra app needed
VerdictBetter than nothing — replace as soon as possible
🔢
TOTP Authenticator App
Time-Based One-Time Password (RFC 6238). App (Microsoft Authenticator, Google Authenticator, Authy) generates a 6-digit code that rotates every 30 seconds using a shared secret and current time.
Phishing?Vulnerable — 30-second window for real-time relay
SIM swap?Protected — no phone number involved
Auto-stuffing?Protected — code rotates every 30 seconds
UsabilityHigh — one extra step, widely understood
VerdictGood general-workforce MFA — migrate privileged accounts to FIDO2
🔔
Push Notification + Number Match
App (Microsoft Authenticator, Duo, Okta Verify) receives a push. With number matching: a number shown on the login screen must be entered in the app — blocking automation.
Phishing?Partially — number match defeats automation; aware user still vulnerable
SIM swap?Protected — internet push, not SMS
MFA fatigue?Reduced with number match — still possible for determined attacker
UsabilityVery high — one tap (with a context check)
VerdictGood — enable number matching always; best general-workforce option
🔑
FIDO2 Hardware Key
Physical hardware key (YubiKey, Google Titan, Feitian). Uses public-key cryptography bound to the site's origin (domain). Touch to authenticate — private key never leaves the device.
Phishing?Protected — key verifies origin domain before signing
SIM swap?Protected — no phone involved
MFA fatigue?Protected — requires physical touch
UsabilityHigh — one touch; slightly lower convenience vs push
VerdictGold standard — required for privileged accounts
🔐
Passkeys (FIDO2 synced)
FIDO2 credentials stored on a device and protected by biometric (Face ID, fingerprint) or PIN. Synced via iCloud Keychain, Google Password Manager, or 1Password. Passwordless and phishing-resistant.
Phishing?Protected — origin-bound like hardware FIDO2
SIM swap?Protected — device-based, no phone number
Lost device?Synced — restores from cloud backup
UsabilityVery high — biometric tap; no code entry
VerdictThe future standard — phishing-resistant + passwordless
💳
Smart Card / PIV / CAC
Physical card with an embedded cryptographic chip. Used widely in US Federal Government (PIV cards), military (CAC cards), and some enterprise environments. Requires a card reader.
Phishing?Protected — certificate-based, origin-validated
UsabilityMedium — requires card reader hardware
CostHigher — card + reader + PKI infrastructure
VerdictBest for highly regulated / government environments
4. Phishing-resistant MFA — FIDO2 and passkeys in depth

FIDO2 (Fast Identity Online 2) is the standard that makes MFA genuinely phishing-resistant. It combines WebAuthn (the browser API) and CTAP2 (the protocol between the browser and authenticator). Understanding why FIDO2 is phishing-resistant — at a cryptographic level — explains why it is categorically more secure than OTP-based MFA.

🔏
How FIDO2 works — the cryptographic mechanism
Origin binding is the key — phishing is cryptographically impossible
Registration (one-time setup per site)
1
Site sends a challenge to the authenticator via WebAuthn API
The Relying Party (website) calls navigator.credentials.create() with challenge parameters including the site's origin (domain) and a random challenge nonce.
2
Authenticator generates a unique key pair per site
The hardware key or device generates a new asymmetric key pair (private key + public key) specifically for this site's origin. The private key never leaves the authenticator. User identity is confirmed by biometric or PIN on the device before keys are generated.
3
Public key is sent to and stored by the site
The Relying Party stores the public key associated with the user account. No password, no shared secret — the site stores only what it needs to verify future authentications.
Authentication (every subsequent login)
4
Site sends a challenge including the current origin
navigator.credentials.get() is called. Critically: the origin (the actual domain in the browser's address bar) is included in the challenge data passed to the authenticator.
5
Authenticator checks origin and signs the challenge
The authenticator checks that the origin in the request matches the origin stored during registration. If they match — and only if they match — it signs the challenge with the stored private key. If an attacker has proxied the user to evil-microsoft.com, the origin does not match microsoft.com and the authenticator refuses to sign.
6
Site verifies signature with stored public key
The Relying Party verifies the signature against the registered public key. If valid, authentication succeeds. No code was entered, no shared secret was transmitted, and the private key never left the device.
Why this is phishing-resistant

The origin check is performed cryptographically by the authenticator's hardware. A phishing site at micros0ft.com or even microsoft.com.attacker.com has a different origin than microsoft.com. The authenticator will not sign the challenge for the wrong origin — and a signature from the wrong origin would not be accepted by Microsoft's server anyway. There is no way for a man-in-the-middle to relay a valid FIDO2 authentication because the signature is tied to the specific session challenge and origin. Each authentication produces a unique signature that cannot be replayed.

Passkeys — FIDO2 without the hardware key

Passkeys implement the same FIDO2/WebAuthn protocol but store the private key in the device's Secure Enclave (iPhone, Android, MacBook, Windows Hello) protected by biometrics, and sync it encrypted via the cloud (iCloud Keychain for Apple, Google Password Manager for Android, 1Password/Dashlane for cross-platform). The security properties — phishing resistance, origin binding, no shared secrets — are identical to hardware keys. The user experience is simply: device prompts for Face ID or fingerprint, user authenticates, done. No code to type, no key to carry.

# WebAuthn registration — JavaScript (simplified) # This is what happens when a user enrolls a FIDO2 key or passkey const publicKeyCredentialCreationOptions = { challenge: crypto.getRandomValues(new Uint8Array(32)), // Random from server rp: { name: "Acme Corp", id: "acme.com" // Relying Party ID — the origin that will be bound }, user: { id: Uint8Array.from(userId, c => c.charCodeAt(0)), name: "jsmith@acme.com", displayName: "Jane Smith" }, pubKeyCredParams: [{alg: -7, type: "public-key"}], // ES256 — ECDSA P-256 authenticatorSelection: { authenticatorAttachment: "platform", // platform = passkey; cross-platform = hardware key residentKey: "required", userVerification: "required" // Must verify user (biometric or PIN) }, timeout: 60000 }; const credential = await navigator.credentials.create({publicKey: publicKeyCredentialCreationOptions}); // credential.response.clientDataJSON contains the origin that was bound // Send credential.response.attestationObject to server — it contains the PUBLIC key // Server stores public key — never sees the private key
5. MFA bypass attacks — how attackers defeat each type

Every MFA type has specific attack categories it is and is not vulnerable to. The table below maps each MFA type to each attack vector — this is the most important practical summary in this guide.

MFA typeReal-time phishing proxySIM swapMFA fatigueSS7 interceptMalware on deviceSession hijack (post-auth)
SMS OTP✗ Vulnerable✗ Vulnerable✓ Protected✗ Vulnerable✗ Vulnerable✗ Vulnerable
TOTP app✗ Vulnerable✓ Protected✓ Protected✓ Protected✗ Vulnerable✗ Vulnerable
Push (no number match)~ Partial✓ Protected✗ Vulnerable✓ Protected~ Partial✗ Vulnerable
Push + number matching~ Reduced✓ Protected~ Reduced✓ Protected~ Partial✗ Vulnerable
FIDO2 hardware key✓ Protected✓ Protected✓ Protected✓ Protected✓ Protected✗ Vulnerable
Passkeys (synced FIDO2)✓ Protected✓ Protected✓ Protected✓ Protected~ Device-dependent✗ Vulnerable
⚠ No MFA type protects against post-authentication session hijacking All MFA types protect the authentication event itself. None protect the session token issued after successful authentication. An attacker who steals the session cookie (via XSS, malware, or an AiTM proxy intercepting the post-authentication redirect) inherits the authenticated session without needing MFA at all. Defending against session hijacking requires token binding, short session lifetimes, continuous authentication signals, and device compliance checks — not just stronger MFA.
6. MFA fatigue attacks — Uber, Microsoft, and how to stop them
😴
MFA Fatigue (MFA Bombing / Push Spam)
Flood the target's authenticator with push requests until they approve one out of frustration, confusion, or exhaustion

MFA fatigue attacks exploit the psychology of push notification MFA. The attacker has valid username and password (typically bought or obtained via phishing). They repeatedly attempt login, triggering a push notification approval request to the target's phone each time. The target's phone rings repeatedly — sometimes dozens of times over hours — with "Approve sign-in?" notifications. Eventually, some users approve to stop the noise, click by mistake in a moment of distraction, or approve while confused at 3 AM.

High-profile MFA fatigue victims include: Uber (September 2022 — contractor approved after sustained campaign plus a social engineering message claiming to be IT Support), Microsoft (2022 — DEV-0537 / Lapsus$ group used this technique against multiple Microsoft employees), Cisco (2022 — employee approved after attacker contacted them via WhatsApp and voice calls claiming to be from the IT department).

The attack is particularly effective combined with social engineering: the attacker calls or messages the target claiming to be IT support, tells them they need to approve a sign-in request due to a system issue, and then triggers the push while on the call. The social engineering provides the explanation for the unexpected notification that the target then approves.

MFA fatigue attack flow
# MFA fatigue attack — requires valid credentials, any automated login script # Attacker loop — runs repeatedly until user approves while True: attempt_login(username="jsmith@company.com", password="Password123!") # This triggers a push notification to jsmith's Authenticator app # Attacker waits 30 seconds to see if jsmith approves if session_granted(): break # jsmith approved — attacker has a valid session time.sleep(30) # Wait and try again # After 30-50 attempts over 1-2 hours: success rate ~15-30% in real campaigns # Social engineering amplification — attacker calls/texts target simultaneously: # "Hi, this is IT Support. We're working on an issue with your account. # You'll receive a Microsoft Authenticator request — please approve it now."
🛡 Mitigations — all required together
  • Enable number matching — user must type a number shown on screen into the app. Defeats automation entirely; requires user to look at both screen and phone simultaneously
  • Enable additional context in push — show the requesting IP geolocation and device info in the push. "Sign-in from Nigeria at 3 AM" is obvious to approve or deny
  • Limit push notification rate — block accounts after X failed push approvals in Y minutes (Okta, Entra ID, Duo all support this)
  • Migrate privileged accounts to FIDO2 — hardware keys require physical touch and cannot be fatigued remotely
  • Train users — "Never approve a push you did not initiate. Call IT if you receive unexpected pushes."
  • Alert on push flooding — SIEM alert: X failed push attempts in Y minutes from same account = active fatigue attack in progress
🔍 Detection signals
  • Multiple failed MFA challenges from same user account in short window (5+ in 10 minutes)
  • Authentication attempts at unusual hours for the account
  • Authentication attempt geolocation different from user's normal location
  • Successful authentication immediately after a burst of failed attempts
  • IdP logs: "MFA challenge sent" without corresponding user-initiated login
# Microsoft Entra ID — detect and block MFA fatigue # Conditional Access policy: block sign-in after X failed MFA attempts # Entra ID Protection: configure MFA flood protection in Authentication Methods settings # Settings: Authentication Methods → Microsoft Authenticator → Configure # Enable: "Report suspicious activity" — user can report unexpected push in the app itself # Enable: "Number matching" (now default in Entra ID) # Enable: "Additional context" — shows app name and location in push notification # Okta — MFA rate limiting configuration # Security → Authentication → Authenticator → Factor Enrollment # Enable "ThreatInsight" — blocks sign-in attempts from suspicious IPs before MFA is challenged # Splunk alert — MFA fatigue detection index=azure_signin ResultType="50074" # 50074 = MFA required but not completed | stats count AS failed_mfa by UserPrincipalName earliest(_time) AS first_attempt | where failed_mfa >= 5 | join UserPrincipalName [search index=azure_signin ResultType=0 earliest=-1h] [eval success_after_flood=1] | where isnotnull(success_after_flood) # Alert: account had 5+ failed MFA then succeeded = possible fatigue attack succeeded
7. Real-time phishing proxies — Evilginx and AiTM
🕸
Adversary-in-the-Middle (AiTM) / Real-Time Phishing Proxy
Proxy all authentication traffic in real time — capture both the credential AND the session token after MFA completion

Traditional phishing captures only the password. AiTM phishing captures both the password, the MFA code, and — critically — the authenticated session cookie. It works by placing a reverse proxy between the user and the legitimate site. The user sees a pixel-perfect copy of the login page (because it actually IS the real login page, proxied in real time). When they enter credentials and MFA code, the proxy relays them to the real site, completes authentication on the attacker's behalf, and intercepts the authenticated session cookie that the real site returns. The attacker then uses that cookie to access the account — no MFA challenge, because the session is already authenticated.

Evilginx is the most widely used open-source AiTM framework. It uses "phishlets" — configuration files for specific targets (Microsoft 365, Gmail, Okta, GitHub, etc.) that define how to proxy the authentication flow. Deployment is trivial: a VPS, a convincing domain (micosoft.com, microsfot.com), and a Let's Encrypt certificate. The infrastructure looks identical to real Microsoft from the user's perspective — the TLS certificate is valid, the content is real, and the login flow works exactly as expected.

# AiTM attack flow — Evilginx example (simplified) # Attacker sends target a phishing link: https://login.micros0ft-secure.com # 1. Target visits the phishing URL # 2. Evilginx proxies the real Microsoft login page — user sees real Microsoft UI # 3. Target enters username → Evilginx relays to real Microsoft # 4. Target enters password → Evilginx relays to real Microsoft # 5. Microsoft challenges MFA → Evilginx relays push to target's phone # 6. Target approves push (or enters TOTP code) # 7. Microsoft issues authenticated session cookie → Evilginx intercepts it # 8. Evilginx stores the cookie — attacker now has a valid Microsoft session # 9. Target is redirected to real Microsoft (they think they just logged in normally) # Attacker imports the cookie into a browser and has full account access # Result: SMS OTP, TOTP, and push notification MFA completely bypassed # Why FIDO2/passkeys block this: # Step 4: Evilginx is at micros0ft-secure.com — NOT microsoft.com # When the browser's WebAuthn API calls the FIDO2 authenticator, it passes the # actual origin (micros0ft-secure.com) in the authentication request # The authenticator compares this against the stored origin (microsoft.com) # Origin mismatch → authenticator REFUSES to sign → authentication fails # The proxy cannot complete step 7 — no session cookie is issued
🛡 Mitigations
  • Deploy FIDO2 or passkeys — the only MFA type with cryptographic origin binding that blocks AiTM. No other MFA type protects against this attack
  • Enable Conditional Access with compliant device requirement — if session cookies must come from a managed device with a valid certificate, stolen cookies used on unmanaged attacker devices are rejected
  • Token binding — binds the session token to the specific TLS connection; stolen tokens are useless on a different connection (Microsoft CAE supports this)
  • Short session lifetimes — reduce the window where a stolen session cookie is valid; 1-hour maximum for high-value accounts
  • Anti-phishing training and reporting — users who recognise the proxy URL can report it before entering credentials
🔍 Detection
  • Session sign-in from an IP different from the one that completed MFA (proxy IP vs attacker IP)
  • Entra ID Continuous Access Evaluation (CAE) — detects and revokes sessions when risk signals change
  • Sign-in from unmanaged / non-compliant device immediately after authentication
  • Impossible travel: MFA completed in one location, session used from another within seconds
  • Microsoft Defender for Cloud Apps: sign-in activity anomalies post-authentication
📵
SIM swap attacks — how SMS OTP is stolen without touching the phone
Social engineers a carrier employee to transfer the phone number

A SIM swap attack convinces a mobile carrier to transfer a target's phone number to a SIM card in the attacker's possession. The attacker calls the carrier's customer service, claims to be the account holder who has lost their phone, and provides enough personal information (name, address, last four of Social Security number — often available from data breaches) to pass identity verification. Once the transfer is complete, all SMS messages — including MFA codes — go to the attacker's phone.

SIM swap requires personal information about the target (available via OSINT or data breaches) and a carrier with lax identity verification procedures. High-profile victims include: Jack Dorsey (Twitter CEO, 2019), multiple cryptocurrency exchange users collectively losing tens of millions of dollars, and various celebrities whose social media accounts were hijacked.

# SIM swap attack flow: # 1. Attacker gathers target PII: name, address, phone, partial SSN (from dark web / OSINT) # 2. Attacker calls carrier: "I lost my phone, need my number ported to a new SIM" # 3. Carrier verifies identity using the gathered PII — accepts the transfer # 4. Target's phone loses signal ("No service") # 5. All SMS to that number now goes to attacker's phone # 6. Attacker initiates password reset with SMS OTP verification # 7. SMS OTP arrives at attacker's phone — account taken over # Prevention: # - Enable SIM lock / port protection with your carrier (most carriers offer this) # - Set a carrier account PIN that is required for any SIM changes # - Stop using SMS OTP — migrate to TOTP apps or FIDO2 # - For high-risk targets: request Number Transfer Protection from carrier
8. Enterprise MFA deployment strategy
🚀
Enterprise MFA deployment — phased approach
Prioritise by account risk — not all users need FIDO2 hardware keys
1
Phase 1 — Privileged accounts: FIDO2 hardware keys (Week 1–2)
Domain admins, cloud super-admins, executive accounts, service desk staff with broad access, and anyone with access to sensitive data must use hardware FIDO2 keys immediately. The risk of a privileged account being compromised justifies the cost ($25–$60 per key). Issue two keys per person — one primary, one backup stored securely. Configure conditional access to require a compliant hardware token for all privileged role assignments. Block SMS OTP and TOTP for these accounts entirely.
2
Phase 2 — All employees: push with number matching (Month 1)
Roll out Microsoft Authenticator or Okta Verify with number matching and additional context enabled for all employees. Number matching is now the default in Microsoft Authenticator for Entra ID deployments — ensure it has not been disabled. Configure the IdP to require MFA for all application access without exception. Block legacy authentication protocols (Basic Auth, IMAP, POP3) that bypass MFA entirely — these are the most common bypasses in Microsoft 365 environments.
3
Phase 3 — Block legacy authentication completely (Month 1–2)
Legacy authentication protocols (SMTP AUTH, IMAP, POP3, Basic Auth over HTTP) do not support MFA challenges — they bypass MFA entirely. Any account with legacy auth enabled can be authenticated without MFA using only a password. In Entra ID: Conditional Access policy "Block Legacy Authentication" should be the first CA policy created in any tenant. In Okta: disable legacy protocols in the Security settings. Report on any remaining legacy auth traffic before blocking — some applications may break.
4
Phase 4 — Migrate to passkeys (Month 3–12)
Begin passkey rollout for all users — starting with employees who use modern devices (iPhone, Android, MacBook, Windows Hello-capable laptops). Enable passkey registration in Entra ID (Authentication Methods → FIDO2 security keys → allow "Microsoft Authenticator passkeys"). Users register a passkey from their existing Authenticator app — no hardware to distribute. Target: 80% of workforce using passkeys within 12 months. This removes passwords from the authentication flow entirely, eliminating credential phishing for these accounts.
5
Phase 5 — Conditional access based on risk (Ongoing)
Configure risk-based conditional access that requires step-up authentication for high-risk sessions: accessing sensitive applications from an unmanaged device requires a hardware key; sign-in from an unusual location triggers additional verification; high-risk sign-in (flagged by the IdP's machine learning) requires re-authentication. This means normal, low-risk usage has low friction, while suspicious access requires stronger proof. Connect MFA signals to your SOAR for automated response to suspicious authentication patterns.
Blocking legacy authentication — the forgotten MFA bypass
# Microsoft Entra ID — Conditional Access to block all legacy authentication # This is the single most impactful CA policy for M365 security # Must be created before enforcing MFA — or legacy auth bypasses the MFA requirement # Entra ID Portal: Conditional Access → New Policy Name: Block Legacy Authentication Users: All users (include "All users", exclude emergency access accounts) Cloud apps: All cloud apps Conditions: Client apps: Exchange ActiveSync clients + Other clients (= legacy auth protocols) Grant: Block access # Test first: run in Report-Only mode for 1-2 weeks # Check Sign-in logs filtered by "Client App: Exchange ActiveSync" and "Other" # Identify any remaining legitimate legacy auth usage before enforcing # Common legacy auth culprits to find and replace: # - Older iOS/Android mail apps using Basic Auth (update or use Outlook app) # - Shared mailboxes accessed via IMAP (migrate to Outlook or use service accounts with OAuth) # - Legacy on-premises applications using SMTP AUTH (configure OAuth or use Graph API) # - Older printers/scanners using authenticated SMTP (reconfigure to use OAuth or relay)
9. MFA type comparison — which to use when
ScenarioRecommended MFAWhyIf unavailable
Domain admins / cloud super-adminsFIDO2 hardware key (YubiKey 5, Titan)Phishing-resistant, cannot be fatigued, physical possession required. Risk justifies cost.Passkeys on managed device with Entra ID Compliant Device requirement
Executive and board membersFIDO2 hardware keyHigh-value targets — nation-state and sophisticated criminal targeting common. Phishing-resistant mandatory.Passkeys — never push or TOTP for executives
Finance, HR, legal (sensitive data access)Passkeys or FIDO2 hardware keyHandle sensitive data; attractive targets for BEC fraud. Phishing resistance reduces BEC risk substantially.Push with number matching + compliant device CA policy
General knowledge workersPasskeys (Microsoft Authenticator / Google)Phishing-resistant, no hardware to distribute, excellent UX, syncs across devices. Deploy broadly.Push with number matching
Frontline / shared device workersTOTP app or push (shared device considerations)May share devices; push or TOTP on personal phone is fine. Passkeys on shared devices require careful configuration.TOTP with time-expiring codes
Third-party contractors and partnersRequire their IdP's MFA (federation) or issue TOTP tokensYou may not control their device or app. Federation with their IdP (with your MFA policy as minimum) is ideal.Temporary TOTP credential, revoked when engagement ends
Service accounts / non-human identitiesCertificate-based auth + Managed Identity (cloud) or short-lived tokensMFA does not apply to machine identities — use certificates, managed identities, and Workload Identity Federation insteadClient secrets with regular rotation; never passwords if avoidable
Break-glass / emergency admin accountsFIDO2 hardware key (stored physically in safe)Emergency accounts must still be secure. Store the hardware key and a printed backup code in a physical safe with dual-access controls.TOTP code printed and stored securely offline — never SMS
99.9%
of automated account compromise attacks blocked by any MFA (Microsoft)
0%
successful phishing attacks against FIDO2/passkey-protected accounts (Google internal data)
312%
increase in MFA fatigue attacks 2023–2025
38%
of enterprises have deployed phishing-resistant MFA for all users — 62% still vulnerable

⚡ MFA actions — implement in priority order

  1. Block legacy authentication in your M365/Google tenant today — legacy auth protocols (Basic Auth, IMAP, POP3) bypass MFA entirely. In Entra ID: Conditional Access → New Policy → Block Legacy Authentication (Client Apps: Exchange ActiveSync + Other clients → Block). Run in Report-Only mode for one week to identify breakage, then enforce. This single policy change closes the most common MFA bypass used in business email compromise.
  2. Enable number matching for all push notifications immediately — if you are using Microsoft Authenticator, Duo, or Okta push notifications, enable number matching in your IdP settings today. In Entra ID: Authentication Methods → Microsoft Authenticator → Configuration → Number Matching → Enabled. This dramatically reduces the success rate of MFA fatigue attacks without any user hardware or app changes required.
  3. Order FIDO2 hardware keys for all privileged accounts this week — every domain admin, cloud super-admin, and executive needs a FIDO2 hardware key (YubiKey 5 NFC or Google Titan recommended, approximately $30–$50 each). Issue two per person. Configure Conditional Access to require hardware MFA for all privileged roles. This takes MFA from "blockable by fatigue or phishing" to "cryptographically phishing-resistant" for your highest-risk accounts.
  4. Enable passkey registration for all employees — in Entra ID, enable passkeys via Authentication Methods → FIDO2 security keys → Enable for All Users. In Okta, enable WebAuthn Authenticator. Send an org-wide communication asking employees to register a passkey. Passkeys are free (device-based), phishing-resistant, and easier to use than any code-based MFA. Target 80% workforce coverage within 90 days.
  5. Connect MFA to your broader identity and Zero Trust strategy — MFA is one layer of the identity security stack. Conditional access policies (requiring compliant devices, blocking risky sign-ins), identity governance (access lifecycle management), and continuous authentication (risk-based reauthentication) complete the picture. IAM guide → | Zero Trust → | AD security →
Frequently asked questions
What is multi-factor authentication (MFA)?

Multi-factor authentication (MFA) requires a user to present two or more pieces of evidence from different categories to prove their identity: something they know (password or PIN), something they have (hardware key, authenticator app, or phone), and/or something they are (biometric). The security value comes from requiring factors from different categories — stealing a password alone is not enough if the attacker also needs physical possession of a hardware key or must pass a biometric check. Microsoft's telemetry shows MFA blocks 99.9% of automated account compromise attacks. The remaining attacks use advanced bypass techniques like real-time phishing proxies or MFA fatigue — which is why the specific type of MFA matters.

What is phishing-resistant MFA?

Phishing-resistant MFA is authentication that cannot be bypassed even when a user is tricked into entering credentials on a fake website. It is implemented by FIDO2 (hardware security keys like YubiKey and passkeys stored on devices). The key property is origin binding: the authenticator cryptographically verifies that the sign-in page's domain matches the domain it was registered with. A phishing site at evil.com cannot obtain a valid FIDO2 authentication assertion for microsoft.com because the origin check fails and the authenticator refuses to sign. OTP-based MFA (SMS, TOTP, push) is not phishing-resistant because the code or approval can be relayed from the fake site to the real site in real time. Only FIDO2 and smart card (PKI-based) authentication are classified as phishing-resistant by NIST and CISA.

What is an MFA fatigue attack?

An MFA fatigue attack (also called MFA bombing or push spam) floods a target's phone with repeated authentication approval requests. The attacker has valid credentials (stolen or phished) and repeatedly attempts login, each time triggering a push notification to the target's authenticator app. After receiving dozens of notifications — often combined with a social engineering call claiming to be IT support telling them to approve — the target approves one. The Uber breach (2022), Cisco breach (2022), and Lapsus$ attacks on Microsoft and Nvidia (2022) all used this technique. Prevention: enable number matching (user must type a number from the login screen into the app, defeating automation), limit push notification rate, alert on flooding, and migrate privileged accounts to FIDO2 hardware keys which require physical touch and cannot be fatigued remotely.

What is the difference between TOTP and FIDO2?

TOTP (Time-Based One-Time Password) generates a 6-digit code that changes every 30 seconds, shared between the app and the server. It is vulnerable to real-time phishing — an attacker's fake login page can capture the code and relay it to the real site within the 30-second window, completing authentication on the attacker's behalf. FIDO2 uses public-key cryptography with origin binding — the authenticator signs a challenge that includes the requesting site's domain. A fake site at a different domain cannot obtain a valid FIDO2 signature for the real site, because the origin check fails cryptographically. TOTP is a good improvement over passwords; FIDO2 is categorically more secure and the recommended choice for privileged accounts and security-sensitive environments.

What are passkeys and how are they different from hardware security keys?

Both passkeys and hardware security keys use the FIDO2/WebAuthn standard and have identical security properties — phishing resistance, origin binding, no shared secrets. The difference is where the private key is stored and how it is protected. A hardware security key (YubiKey, Google Titan) stores the private key on dedicated hardware — it cannot be extracted and is protected by the physical device. A passkey stores the private key in the device's Secure Enclave (iPhone, Android, MacBook, Windows Hello) protected by biometrics, and syncs it encrypted via the cloud (iCloud Keychain, Google Password Manager). Passkeys are more convenient (no extra device to carry, syncs across devices) but the security of the cloud sync chain matters. For the highest-security use cases (privileged accounts), hardware keys are preferred because the key material never leaves the hardware and cannot be synced or backed up.

Is SMS OTP (text message MFA) safe?

SMS OTP is significantly better than password-only authentication but has multiple known weaknesses. It is vulnerable to SIM swap attacks (attacker persuades the carrier to transfer the phone number), SS7 network interception (attackers with access to the telephony backbone can intercept SMS), and real-time phishing proxies (AiTM sites relay the SMS code to the real site within the valid window). NIST SP 800-63B designated SMS OTP as a "restricted" authenticator in 2017, recommending against it for new deployments. In 2026, SMS OTP should be treated as a transitional measure — better than nothing, but replaced with authenticator apps (TOTP or push with number matching) for all users, and FIDO2 for privileged accounts, as quickly as feasible. If SMS OTP is your only option for a specific population, supplement it with strong risk-based conditional access policies and anomaly detection.

About the author Written by the HOC Team at Hackers Online Club — a cybersecurity community trusted by identity architects, SOC analysts, security engineers, and cybersecurity professionals since 2010. 15+ years of practical cybersecurity guides, authentication tutorials, and enterprise security resources. Learn more about HOC →