Skip to content

Data Access Paths & Blast Radius Calculation

1. The 5 Core Data Access Paths in Microsoft 365

Section titled “1. The 5 Core Data Access Paths in Microsoft 365”

Adversaries interact with corporate data through five distinct architectural modalities, each characterized by specific authentication mechanisms, protocol fingerprints, and logging granularity.

graph TD
Attacker[Threat Actor / Compromised Identity] --> P1[Path 1: Interactive Web / Mobile Session]
Attacker --> P2[Path 2: Native Sync Client Engines]
Attacker --> P3[Path 3: Delegated OAuth Application Tokens]
Attacker --> P4[Path 4: Application-Only Service Principals]
Attacker --> P5[Path 5: Purview eDiscovery Super-Privilege]
P1 -->|OWA, SPO Portal, Teams Web| Log1["Purview UAL: FileAccessed, MailItemsAccessed (Bind)"]
P2 -->|OneDrive.exe, Outlook OST Sync| Log2["Purview UAL: FileSyncDownloadedFull, MailItemsAccessed (Sync)"]
P3 -->|Graph API with User Context| Log3["Purview UAL + Sign-in Logs (User Impersonation)"]
P4 -->|Graph API / App Secret / Cert| Log4["ServicePrincipalSignInLogs + UAL Workload Activity"]
P5 -->|ComplianceSearchAction| Log5["Purview Audit: SearchExported, SearchCreated"]
Access PathTypical Threat Actor TechniqueProtocol & Application IDKey Telemetry SourceForensic Visibility & Precision
1. Interactive WebStolen session cookie / AiTM proxyHTTPS / Browser (UserAgent)UAL (FileAccessed, Search)Granular: identifies individual document views and searches
2. Native Sync ClientMachine registration / unmanaged syncCobalt / MAPI-HTTP (onedrive.exe)UAL (FileSyncDownloadedFull)Definitive: confirms complete binary file replication
3. Delegated App TokenIllicit OAuth app grant / Device CodeREST Graph API (Delegated scopes)Sign-in Logs + UAL API logsTracks specific API calls executed under user identity
4. App-Only PrincipalInjected certificate / client secretREST Graph API (Files.Read.All)ServicePrincipalSignInLogs + UALHighly opaque: tenant-wide access without user attribution
5. eDiscovery ExportCompromised eDiscovery AdministratorPurview Compliance PortalUAL (SearchExported, SearchCreated)Catastrophic: bulk PST / zip export of millions of items

2. Constructing the Evidence Matrix: Accessible vs Exfiltrated

Section titled “2. Constructing the Evidence Matrix: Accessible vs Exfiltrated”

Regulatory disclosures (e.g., GDPR Article 33/34 notifications, SEC 8-K filings) require a rigorous evidentiary threshold separating theoretical exposure from proven exfiltration:

flowchart TD
AllData["Tenant Data Repository (Total Corpus)"] --> Accessible["1. Accessible Scope<br/>(All data the compromised identity had permissions to view)"]
Accessible --> Queried["2. Discovered Scope<br/>(Specific search queries executed: SearchQueryPerformed)"]
Queried --> Accessed["3. Observed Scope<br/>(Specific items viewed or bound: MailItemsAccessed, FileAccessed)"]
Accessed --> Exfiltrated["4. Proven Exfiltration Scope<br/>(Items physically transferred: FileDownloaded, FileSyncDownloadedFull)"]
style AllData fill:#f5f5f5,stroke:#999
style Accessible fill:#fff3cd,stroke:#ffeeba
style Queried fill:#d1ecf1,stroke:#bee5eb
style Accessed fill:#d4edda,stroke:#c3e6cb
style Exfiltrated fill:#f8d7da,stroke:#f5c6cb
  1. The Accessible Horizon (Permissive Blast Radius):
    • Every email in the victim’s mailbox, all files in their OneDrive, and all documents in SharePoint sites where the user had Read or Member permissions.
    • Legal Context: Represents worst-case theoretical exposure. Do not report as “exfiltrated” without supporting telemetry.
  2. The Discovered Horizon (Search Intent):
    • Documents and emails returned in response to attacker-initiated searches (SearchQueryPerformed).
    • Proves attacker interest and tactical intent.
  3. The Observed Horizon (Active Exposure):
    • Files rendered via Office Online (FileAccessed with WOPI properties) and individual emails opened in OWA (MailItemsAccessed with OperationType: Bind).
    • Proves the attacker reviewed the content, but does not confirm local disk saving.
  4. The Proven Exfiltration Horizon (Definitive Compromise):
    • Explicit binary transfers: FileDownloaded, FileSyncDownloadedFull, outbound Message Trace delivery, and external anonymous sharing links accessed by third-party IPs.
    • Requires immediate regulatory notification if personal, health, or financial data is involved.

To calculate the definitive compromise footprint, investigators apply a structured triage formula across the compromise window (T_start to T_end):

Blast Radius = M_exfil ∪ F_exfil ∪ S_anon ∪ C_throttled

Where:

  • M_exfil: Emails with outbound Message Trace delivery or individual MailItemsAccessed (Bind) by attacker IPs.
  • F_exfil: Files with FileDownloaded or FileSyncDownloadedFull attributed to attacker sessions.
  • S_anon: All files residing in folders where the attacker created AnonymousLinkCreated tokens that were subsequently utilized.
  • C_throttled: The entire item population of any mailbox folder where MailItemsAccessed recorded IsThrottled: True.

4. Detection Engineering: Comprehensive Blast Radius Query

Section titled “4. Detection Engineering: Comprehensive Blast Radius Query”
// Synthesize all file and email exfiltration events across workloads for a compromised session
let CompromiseStart = datetime(2026-09-01T00:00:00Z);
let CompromiseEnd = datetime(2026-09-17T23:59:59Z);
let SuspectUser = "victim@contoso.com";
let KnownAttackerIPs = dynamic(["198.51.100.45", "203.0.113.88"]);
CloudAppEvents
| where TimeGenerated between (CompromiseStart .. CompromiseEnd)
| where AccountDisplayName =~ SuspectUser or RawEventData.UserId =~ SuspectUser
| where IPAddress in (KnownAttackerIPs) or RawEventData.ClientIP in (KnownAttackerIPs)
| extend Workload = tostring(RawEventData.Workload)
| extend Operation = tostring(RawEventData.Operation)
| extend ObjectName = coalesce(tostring(RawEventData.SourceFileName), tostring(RawEventData.Item), tostring(RawEventData.ObjectId))
| extend TargetPath = tostring(RawEventData.SourceRelativeUrl)
| summarize
EventCount = count(),
FirstSeen = min(TimeGenerated),
LastSeen = max(TimeGenerated)
by Workload, Operation, ObjectName, TargetPath, IPAddress
| sort by Workload asc, Operation asc

5. Defensible Regulatory Reporting Framework

Section titled “5. Defensible Regulatory Reporting Framework”

When presenting incident findings to legal counsel, board members, and data protection authorities (e.g., CNIL, ICO, SEC, HHS):

  1. Never Report Accessible as Compromised: Explicitly articulate the difference between the Accessible Corpus (10,000 files in accessible SharePoint libraries) and the Observed/Exfiltrated Corpus (14 files with FileDownloaded records).

  2. Acknowledge Audit Gaps Honestly: If an Exchange mailbox folder recorded IsThrottled: True, clearly declare:

    “Due to platform audit throttling under Purview logging architecture, Exchange Online does not log individual item IDs during bulk sync operations exceeding 1,000 items. Consequently, while 14 items were definitively observed, the entire 850 items residing in the ‘Inbox’ must be legally treated as potentially exposed.”

  3. Provide Cryptographic & Telemetry References: Anchor every exfiltrated document record with its tenant URL, exact byte size, file hash (if available from eDiscovery snapshot), client IP address, and RFC 3339 UTC timestamp.