01Alertingfoyl SIEMTriage the alert queue · determine the attack chain chronology
foyl SIEM
Alert Queue · INC-2024-0847
Live
Impossible Travel — Auth from two countries within 4 minutes
User: sarah.chen@acme-corp.com · 185.220.101.47 (RU) → 10.0.1.52 (US)
CRITICAL
09:44:18
Outbound C2 Callback — Known Tor exit on port 4444
Host: WKSTN-0112 · dst: 45.142.212.100:4444 · process: powershell.exe
CRITICAL
09:44:01
MFA Fatigue Attack Suspected — 9 push requests in 90 seconds
User: sarah.chen@acme-corp.com · App: Microsoft Authenticator
HIGH
08:51:02
Suspicious DNS — Lookalike domain acme-corp-secure.com resolved
Host: WKSTN-0112 · resolved: 185.220.101.47 · TTL: 60s (fast-flux indicator)
HIGH
08:47:31
Lateral Movement — SMB ADMIN$ WKSTN-0112 → SRVR-DC01
User: sarah.chen (stolen session) · ntds.dit enumeration attempt
HIGH
09:14:55
Large Outbound Transfer — 847 MB to dropbox-cdn.io over HTTPS
Host: WKSTN-0112 · protocol: HTTPS/443 · duration: 4m 22s
MEDIUM
09:44:01
Alert Detail
← Select an alert
Key Concept
Alerts display in reverse chronological order but the attack ran forward in time. Reorder by timestamp to reconstruct the kill chain — the suspicious DNS at 08:47 is patient zero.
Reading the Alert Queue
Alerts fire in reverse chronological order but the investigation runs forward. Sort chronologically: suspicious DNS at 08:47 is patient zero — that's when Sarah clicked. Impossible travel and C2 callback firing simultaneously at 09:44 means the attacker already has a foothold and is actively operating. Triage starts with highest severity + earliest in the attack chain. Ask the class: "Which alert would you open first?" and why the answer isn't always the highest severity one.
Class Exercise
Put the 6 alerts in chronological order of when each event occurred (not when it fired). What does the gap between the DNS alert (08:47) and the impossible travel alert (09:44) tell you about how long the attacker had undetected access? Answer: 57 minutes of dwell time before detection.
02Email InvestigationProofpoint TAPExtract IOCs · understand why MFA didn't stop this
Proofpoint TAP
Message Trace · sarah.chen@acme-corp.com
FromIT-Security-Team@acme-corp-secure.com (domain registered 3 days prior)
Tosarah.chen@acme-corp.com
Subject⚠ URGENT: Verify your account — unusual sign-in detected
Received2024-11-14 08:12:04 UTC · via 185.220.101.47
DKIMFAIL
SPFFAIL — acme-corp-secure.com not authorized
DMARCFAIL → QUARANTINE (user self-released 08:45)

Dear Sarah,

Our security systems have detected an unusual sign-in attempt on your account. To protect your account, please verify your identity immediately.

Action Required: Click the link below. This link expires in 15 minutes.

https://acme-corp-secure.com/login/verify (click to add as IOC)

IT Security Team — Acme Corporation

Proofpoint Analysis
AiTM phishing kit (EvilGinx2) — proxies real Microsoft login, captures session tokens, bypasses MFA entirely
Domain acme-corp-secure.com registered 2024-11-11 — 3 days before attack. Cloudflare privacy guard.
Sending IP 185.220.101.47 matches known AiTM infrastructure (Tor exit node)
DMARC quarantined this email — user manually released at 08:45 and clicked at 08:47
Urgency language, IT impersonation, 15-minute countdown — classic social engineering
Why DMARC Didn't Stop This
DMARC worked correctly — it quarantined the email. The failure was a process gap: users could self-release quarantined email. DMARC is only as strong as your quarantine policy. Document this as a control gap, not a DMARC failure.
Analyst Tip — Domain Age
Any sending domain registered fewer than 30 days ago is a strong phishing indicator. Threat actors register lookalike domains days before campaigns. Check WHOIS or Proofpoint domain intelligence on every suspicious sender.
IOC Collector
Click highlighted elements to add IOCs
Exercise
Identify all IOCs from this email. What type is each one (IP, domain, URL, email)? Which IOC would you block first to prevent further phishing victims?
AiTM — Why MFA Didn't Stop This
Classic phishing steals credentials. AiTM proxies the real login in real time — Sarah authenticates including MFA, but the attacker's proxy captures the session cookie. That cookie is replayed without credentials or MFA. Key lesson: user self-released this email from quarantine. DMARC worked — user override defeated it. Document this as a process gap. This is also why FIDO2/passkeys are the only MFA that defeats AiTM — they bind the challenge to the origin domain, so the proxy can't relay it.
Discussion Point
If Acme had required FIDO2 hardware keys instead of push MFA, would this attack have succeeded? Why or why not? Answer: No — FIDO2 challenges are cryptographically bound to acme-corp.com, so the proxy on acme-corp-secure.com would receive a challenge it can't fulfill.
03Identity InvestigationMicrosoft Entra IDTrace the auth chain · confirm session token theft
Microsoft Entra ID
Sign-in Logs · sarah.chen
a3f9d2c1-b8e7-4f0a-9d3c
Sign-in Logs
MFA Activity
Active Sessions
Risk Detections
Successful sign-in — Office 365
08:34:12 · 10.0.1.52 (US/Seattle) · Chrome/Win10 · MFA: SMS ✓
⚠ Sign-in from foreign IP — token replay, no password entered
08:51:02 · 185.220.101.47 (RU/Moscow) · Unknown device
⚠ MFA bypass confirmed — stolen session token replayed
08:51:19 · 185.220.101.47 · 90-day persistent token, no MFA challenge
⚠ SharePoint bulk access — Finance Q4, 23 files in 4 minutes
09:02:44 · 185.220.101.47 · Finance/Q4Reports · ~340 MB
⚠ OAuth app registered — “Outlook Sync Helper” Mail+Files permissions
09:08:31 · 185.220.101.47 · Persistence mechanism
Key Concept — MFA Fatigue
The attacker sent 9 push notifications in 90 seconds while simultaneously using the stolen token. The MFA fatigue was a distraction — by the time Sarah denied push #9, the attacker had already authenticated via stolen cookie and was in her inbox.
MFA approved — Authenticator push
08:34:14 · Approved in 8 seconds
⚠ MFA push #1 — Denied by user
08:51:02
⚠ MFA push #2–9 — All denied · fatigue bombing pattern
08:51:04–08:52:34 · 8 denials in 90 seconds
⚠ MFA bypassed via token replay — no challenge presented
08:51:19 · AiTM-captured cookie — attacker never needed MFA
⚠ 2 active sessions — one legitimate, one attacker. Revoke all to contain.
SessionIPLocationStartedLast ActiveStatus
a9f2...3d8110.0.1.52US/Seattle08:34:1209:41:22LEGITIMATE
b4e7...9c22185.220.101.47RU/Moscow08:51:1909:44:01MALICIOUS
Critical Action
Resetting Sarah's password will not terminate the attacker's session — you must revoke all Entra refresh tokens. Command: az ad user revoke-sign-in-sessions --id sarah.chen@acme-corp.com
DetectionRiskTimeDetail
Impossible TravelHIGH09:44:18US→RU in <4 min
Unfamiliar Sign-in PropertiesMED08:51:02New device + IP
Malicious IP AddressHIGH08:51:02Tor exit / AiTM infra
Token Replay AttackHIGH08:51:19Stolen AiTM session cookie
Event Detail
← Select an event
Token Theft vs Credential Theft
Resetting Sarah's password won't remove the attacker's session — you must revoke all Entra tokens. Also: the OAuth app registered at 09:08 persists even after token revocation. It's a second persistence mechanism that must be removed separately. This two-step persistence (token + OAuth app) is standard attacker practice to survive remediation. Walk through the Sessions tab — ask students: "How do you tell which session is the attacker's without geolocation?"
Analyst Note
The 90-day default token TTL in M365 is what made this attack so impactful. Continuous Access Evaluation (CAE) would have forced re-authentication when the IP changed from US to Russia, potentially cutting attacker access in seconds instead of 57 minutes.
04Endpoint AnalysisSentinelOne EDRReconstruct dropper behavior · identify all artifacts
Filter:
Artifact Detail
← Select an event
Key Concept
The dropper chain here is textbook: Browser → cmd.exe → PowerShell (encoded) → File drop → Registry persistence → C2 beacon. Each step is detectable — browsers must never spawn cmd.exe.
Analyst Tip
Check file names masquerading as system processes: svchosts.exe (extra 's') mimics svchost.exe. Look at the file path — legitimate svchost.exe only runs from System32, never from AppData.
Dropper Anatomy
Walk through the timeline chronologically. The key detection opportunity is at 08:47:45: chrome.exe renderer spawning cmd.exe. This is almost never legitimate — browser renderers operate in sandboxed processes and should never interact with the shell. PowerShell script block logging would have captured the decoded payload. The Registry Run key in HKCU (user space) is chosen to avoid needing admin rights — the dropper runs entirely as sarah.chen with no privilege escalation.
Class Exercise
WKSTN-0112 is reimaged. Which artifacts could survive a reimage? Answer: None of these — all are user-space. However, the attacker's OAuth app in Entra ID and the stolen session token would survive endpoint remediation. This is why identity and endpoint remediation must happen in parallel.
05ContainmentSentinelOne EDRIsolate → Revoke → Kill C2 · order matters
SentinelOne
Endpoint: WKSTN-0112 · sarah.chen
● ACTIVE THREAT
WKSTN-0112
● ACTIVE THREAT — NOT ISOLATED
Process Tree — WKSTN-0112
explorer.exePID 1204
chrome.exePID 3892
chrome.exe --rendererPID 4201 ⚠ spawned cmd
cmd.exePID 5512 · browser-spawned ⚠
powershell.exe -enc JAB…PID 6104 · MALICIOUS
net.exe → 45.142.212.100:4444C2 ACTIVE
Process Detail
← Select a process
Containment Checklist
Host Isolated✗ Pending
Sessions Revoked✗ Pending
C2 Killed✗ Pending
Order Matters
Isolate first — cuts all network paths simultaneously. Then revoke sessions. Then kill process. Killing C2 first may trigger secondary persistence.
Containment Order Matters
Isolate first — cuts all network paths simultaneously. Then revoke tokens. Then kill the process. If you kill C2 first, the attacker may trigger a secondary persistence mechanism. The browser→cmd→powershell chain is a classic click-to-execute dropper — chrome renderers should never spawn cmd.exe. That's your smoking gun in the process tree. Also: network isolation happens at the EDR agent level, so even if WKSTN-0112 is plugged in, it can't route traffic to the internet or the internal network during isolation.
Class Exercise
Click each containment action in order — Isolate, then Revoke, then Kill C2. Then discuss: What would happen if you revoked sessions first but forgot to isolate? The C2 channel (powershell.exe → port 4444) runs independently of the M365 session — so revoking tokens doesn't kill the C2. You need both.
06MITRE ATT&CK MappingKill Chain AnalysisMap each technique to evidence · identify detection gaps
INC-2024-0847 · ATT&CK Coverage
Initial Access
T1566.002Spearphishing Link
Execution
T1059.001PowerShell
Persistence
T1547.001Registry Run Keys
T1098.001Additional Cloud Credentials
Credential Access
T1557Adversary-in-the-Middle
T1539Steal Web Session Cookie
Defense Evasion
T1078Valid Accounts
Command & Control
T1090.003Multi-hop Proxy (Tor)
Lateral Movement
T1021.002SMB/Admin Shares
Collection
T1213Data from Info Repositories
Exfiltration
T1567.002Exfil to Cloud Storage
← Select a technique to see evidence and detection opportunities
Key Concept
MITRE ATT&CK is a knowledge base of adversary behaviors. Mapping an incident to ATT&CK techniques helps you answer: Where are your detection gaps? If you have no telemetry for a technique, that's a sensor coverage gap.
Exercise
For each technique, ask: Which security control could have prevented or detected it? Some techniques like T1078 (Valid Accounts) are nearly impossible to prevent — you can only detect through behavioral analytics.
ATT&CK Mapping — Instructor Notes
Walk through each phase left-to-right. This incident touches 9 tactics and 10 techniques — it's a comprehensive campaign, not a smash-and-grab. Focus on the detection gap conversation: the attacker used Tor (T1090.003) throughout, so IP-based blocking was difficult. The persistence via OAuth app (T1098.001) is particularly important because it survives all identity remediation except explicit app removal.
Discussion Point
If Acme had FIDO2 MFA, T1557 and T1539 would have failed at the credential access phase. Every subsequent technique would have been impossible. Ask students: which single control has the highest impact on this attack chain?