Result: All 5 users show successful interactive sign-ins from London IPs (their normal location) between 09:17 and 09:25. MFA was satisfied via Microsoft Authenticator push. Conditional access status: success. Device compliance: not evaluated (no compliance policy in scope).
The interactive sign-in looks completely normal
This is the defining challenge of AiTM investigation. The interactive sign-in passes through the proxy but appears to come from the user's real IP, real device, real location. MFA is satisfied. Conditional access passes. Nothing in the interactive sign-in screams "compromise." The signal is in the non-interactive logs — the token replay from a different IP.
Step 2: Check non-interactive sign-ins — the token replay check
Non-interactive from 203.0.113.45 (Lagos, Nigeria) starting 09:22
s.williams@
No
All non-interactive from London IPs
r.thompson@
No
All non-interactive from London IPs
One confirmed compromise: j.morrison. The other 4 users either closed the proxy page before entering credentials, or the proxy failed to capture a complete token.
Result: 14 non-interactive sign-in events from the attacker IP between 09:22 and 09:47 (25-minute window). Applications accessed: Exchange Online (email), Microsoft Graph API (broad access).
The attacker’s access pattern: token refresh every 2-3 minutes against Exchange Online, consistent with automated mailbox enumeration. The Graph API access suggests the attacker was also checking what other resources the token could reach (SharePoint, OneDrive, Teams).
Step 4: Check conditional access evaluation on the attacker’s sign-in
Result: The “Require MFA for all users” policy evaluated as success — the stolen token already contained the MFA claim. No policy requiring device compliance was in scope for this application.
This is the gap that allowed the attack
If a conditional access policy had required a compliant device for Exchange Online, this sign-in would have been blocked. The attacker's device is not Intune-enrolled. The token's MFA claim is irrelevant when device compliance is the enforcement point. This finding goes directly into the hardening recommendations (subsection 13.12).
Try it yourself
Write a query that checks whether any of the other 4 users (a.chen, m.patel, s.williams, r.thompson) show non-interactive sign-in activity from the attacker IP (203.0.113.45) in the week following the attack. The attacker may have captured tokens for other users but not used them immediately.
If this returns no results, the attacker did not successfully capture tokens for these users. If it returns results days later, the attacker may have stored tokens and used them after a delay — a more sophisticated pattern.
Check your understanding
1. 5 users clicked the phishing link but only 1 shows token replay. What are the most likely explanations for the other 4?
The proxy was down for 4 of them
They reached the proxy page but either closed it without entering credentials, entered incorrect credentials, or the proxy failed to complete the MFA relay for their session
Their tokens expired before the attacker could use them
Not every proxy page visit results in a captured token. Users may recognise the page looks wrong and close it. They may start entering credentials and stop. The proxy may fail to relay MFA for some sessions (network timeouts, kit bugs). The investigation confirms compromise through evidence of token replay, not through assumptions about click behaviour.
2. The attacker's sign-in passed the "Require MFA" conditional access policy. Why?
The stolen token already contained the MFA claim from the victim's legitimate authentication through the proxy. Conditional access saw valid MFA satisfaction and allowed the session.
The attacker completed their own MFA
MFA was not required for this application
The MFA claim is embedded in the token. When the attacker replays the token, conditional access evaluates the MFA claim and finds it satisfied. The policy works as designed — it checks if MFA was completed, and the token proves it was. The policy cannot determine that MFA was completed on a proxy rather than the real login page.