Lesson 60 — Building the Complete Cloud Compromise Timeline
The investigation had evidence everywhere.
Microsoft Entra had the identity events.
An OAuth application had appeared.
Exchange had mailbox activity.
SharePoint had file access.
External sharing had occurred.
Every individual event was useful.
But the incident still did not make sense.
Agent Foskett opened a blank timeline.
“The logs already know what happened. We just need to put them in the right order.”
Follow the evidence across the cloud
Bring identity, applications, Exchange, SharePoint and data exposure into one defensible incident timeline.
Case briefing
Investigation objective
Reconstruct the complete cloud incident by ordering identity, application, mailbox and file activity chronologically, identifying evidence gaps and distinguishing confirmed facts from supported interpretations.
Investigator's rule
The timeline is not a list of alerts. It is an evidence-backed reconstruction of what happened, in what order, and what each event means to the investigation.
Stage 1 — choose the investigation anchor
Work backwards before moving forwards
Once an alert identifies suspicious activity, search earlier for authentication, consent, session, application or reconnaissance events that may explain how the activity became possible.
Do not invent “initial access”
The earliest event you can find is the earliest observed event in available telemetry. Call it initial access only when the evidence genuinely establishes that conclusion.
Stage 2 — collect the cloud activity
CloudAppEvents
| where Timestamp > ago(1d)
| where AccountId =~ "alex@contoso.com"
| project Timestamp,
AccountId,
Application,
ActionType,
IPAddress,
UserAgent,
RawEventData
| order by Timestamp ascStart broad
At the beginning of timeline construction, avoid filtering so aggressively that important transitions disappear. Understand the account's complete cloud sequence before narrowing the investigation.
Preserve raw evidence
Raw workload details can contain identifiers, objects, recipients and other context needed later. Keep them available while you determine which events matter.
Stage 3 — classify each event
| Timeline event | Evidence domain | Meaning |
|---|---|---|
| Unusual authentication context | Identity | Potential access or session concern |
| OAuth consent / grant | Application | Potential new cloud capability |
| Application activity | Application | Observed use of application access |
| Mailbox activity | Exchange | Email data or configuration interaction |
| File access | SharePoint / OneDrive | Cloud data interaction |
| External sharing | SharePoint / OneDrive | Potential external exposure |
Events need meaning
A timestamp and action name are not enough. Add the investigative significance of each event without overstating what it proves.
Capability is not impact
A permission grant may create the ability to access data. Later workload events are needed to establish whether that capability was actually used.
Stage 4 — connect the identity to the application
Consent may be the persistence point
If suspicious application access follows consent, investigate whether the permission relationship allowed cloud activity to continue independently of normal interactive user behaviour.
Do not call every app malicious
Approved business applications can exhibit background activity. Application identity, permissions, history, ownership and business context must support the verdict.
Stage 5 — connect the application to workload impact
CloudAppEvents
| where Timestamp between
(datetime(2026-09-03 08:30:00) ..
datetime(2026-09-03 10:00:00))
| where AccountId =~ "alex@contoso.com"
| summarize
Events = count(),
Actions = make_set(ActionType, 100),
IPs = make_set(IPAddress, 50),
FirstSeen = min(Timestamp),
LastSeen = max(Timestamp)
by Application
| order by FirstSeen ascWatch the workload progression
Exchange followed by SharePoint may show an actor moving from information gathering into data access. The sequence can reveal objectives even when individual actions appear ordinary.
Separate observed use from possible use
Permissions tell you what an application or identity could potentially do. Workload telemetry tells you what the available evidence shows it actually did.
Stage 6 — build the master timeline
The timeline exposes transitions
The important story is often found between events: authentication becomes application access, application access becomes mailbox activity, and mailbox activity becomes data access.
Measure the gaps
Minutes between related events can strengthen a hypothesis. Long unexplained gaps may require broader searching or may indicate that apparently related events are actually independent.
Stage 7 — label evidence confidence
| Language | Use it when |
|---|---|
| Confirmed | The telemetry directly establishes the event. |
| Supports | Multiple observations make an explanation more likely. |
| Consistent with | The evidence fits an explanation but does not prove it. |
| Not observed | You searched relevant available evidence and did not find the activity. |
| Undetermined | The available evidence cannot currently answer the question. |
Confidence belongs in the timeline
Analysts should know which events are direct facts and which statements are interpretation. This prevents assumptions from becoming “facts” as the incident is handed between teams.
Unknown is a valid state
A timeline does not become weak because some questions remain unresolved. It becomes weak when uncertainty is hidden.
Stage 8 — test the complete incident hypothesis
A coherent story is not automatically a true story
A timeline may fit a compromise hypothesis beautifully. Continue testing legitimate explanations and contradictory evidence before finalising the verdict.
Look for evidence that breaks your theory
Good investigators actively search for facts that would disprove their preferred explanation. That is one of the best defences against confirmation bias.
Stage 9 — scope beyond the original account
CloudAppEvents
| where Timestamp > ago(7d)
| where IPAddress == "203.0.113.25"
| summarize
Accounts = make_set(AccountId, 100),
Applications = make_set(Application, 50),
Actions = make_set(ActionType, 100),
Events = count()
| project Events, Accounts, Applications, ActionsPivot on shared infrastructure
Suspicious IP addresses, application identities, recipients and other entities can reveal whether the activity extends beyond the original account.
Use example indicators carefully
The IP in this training query is documentation-only example space. In a real investigation, substitute evidence from the incident and validate its organisational context.
Stage 10 — establish impact separately
Initial access and impact are different problems
You may never fully prove how an attacker first obtained access, yet still have strong evidence of what happened after access was established.
Do not let one unknown erase ten knowns
An unresolved access mechanism should be documented, but it should not prevent the SOC from reporting confirmed mailbox, application or data activity.
Stage 11 — preserve the evidence before containment
Containment changes the environment
Removing grants, revoking sessions or deleting sharing relationships can alter the evidence available to later investigators. Preserve what your procedures require before remediation.
The timeline should survive containment
Another analyst should be able to understand what happened even after the malicious or risky state has been removed.
Stage 12 — write the final incident finding
Lesson 60 key takeaways
- The alert is where the investigation started, not necessarily where the incident started.
- Build the timeline both backwards and forwards from the anchor event.
- Do not label the earliest observed event as initial access without evidence.
- Correlate identity, application, Exchange and SharePoint activity chronologically.
- Classify what each event means to the investigation.
- Separate capability from observed impact.
- Use workload transitions to understand attacker objectives.
- Label confirmed facts, supported interpretations and unresolved questions clearly.
- Search for evidence that contradicts your leading hypothesis.
- Scope beyond the original account using shared entities and infrastructure.
- Establish impact even when the exact access mechanism remains unknown.
- Preserve evidence before containment changes the environment.
- A defensible timeline should allow another analyst to reconstruct the incident.
Module 6 complete — Cloud & SaaS Incidents
You have now investigated unusual cloud downloads, location anomalies, bulk data access, OAuth consent, non-interactive application activity, external sharing, cloud-only incidents, cross-service activity, attribution problems and finally the complete cloud compromise timeline.
Continue your SOC Analyst training
🔎 SOC Analyst Academy — Module 6: Cloud & SaaS Incidents
Build a complete Microsoft cloud compromise timeline
Lesson 60 of the Agent Foskett SOC Analyst Academy teaches analysts how to correlate Microsoft Entra identity evidence, OAuth application activity, Exchange events and SharePoint or OneDrive data access into one defensible cloud incident timeline.
Investigate cross-service Microsoft 365 compromise with Microsoft Defender XDR and KQL
Learn how to identify anchor events, work backwards and forwards through cloud telemetry, distinguish capability from observed impact, label evidence confidence, scope related infrastructure and preserve evidence before containment.
