In this section
TH0.10 M365 Data Sources for Hunting
The tables that matter
You do not need to memorize every column in every table. You need to know which table to query for which question, what the table records, and — critically — what it does not record. The gaps in telemetry are as important as the content, because a hunt that queries a table missing the relevant data produces a false negative: "we looked and found nothing" when the truth is "we looked in the wrong place."
Identity and authentication tables
SigninLogs — interactive user sign-ins. Every time a user opens a browser and authenticates to Entra ID, the event appears here. Contains: user principal name, IP address, location (country, city), device details (OS, browser), conditional access evaluation results, risk level, MFA requirement and method, authentication protocol, application accessed, result code.
// Quick check: are both authentication tables ingested?
// Both are required for comprehensive identity hunting
union
(SigninLogs | where TimeGenerated > ago(1d)
| summarize Count = count() | extend Table = "SigninLogs"),
(AADNonInteractiveUserSignInLogs | where TimeGenerated > ago(1d)
| summarize Count = count()
| extend Table = "AADNonInteractiveUserSignInLogs")
| project Table, Count
// If AADNonInteractive returns 0, AiTM token replay is invisible
// This is the single most impactful data source gap in M365 hunting// What is your actual data retention for hunting-critical tables?
Usage
| where TimeGenerated > ago(90d)
| where DataType in (
"SigninLogs", "AADNonInteractiveUserSignInLogs",
"AuditLogs", "CloudAppEvents", "SecurityAlert")
| summarize
EarliestData = min(TimeGenerated),
LatestData = max(TimeGenerated),
RetentionDays = datetime_diff('day', max(TimeGenerated), min(TimeGenerated))
by DataType
| sort by RetentionDays desc
// If RetentionDays < 90 for any table, long-window hunts are limited
// Consider configuring archive tiers for hunting-critical tablesTry it yourself
Exercise: Audit your hunting data estate
Run the data source check query from above. For each of the three clusters (identity, cloud apps, endpoint), answer:
Identity: Are all four tables ingested? If AADNonInteractiveUserSignInLogs is missing, TH4 (identity compromise) will have a critical blind spot.
Cloud apps: Is CloudAppEvents populated? If not, is Defender for Cloud Apps connected? Is MicrosoftGraphActivityLogs enabled?
Endpoint: Are all five Device* tables populated? If not, is Defender for Endpoint deployed to all relevant device groups?
Document the gaps. Each gap is either a prerequisite to fix before hunting that domain or a known limitation to record in hunt records that depend on the missing table.
The myth: If data is flowing into Sentinel, it is available for hunting. Log ingestion equals visibility.
The reality: Ingestion is necessary but not sufficient. Many organizations ingest SigninLogs but not AADNonInteractiveUserSignInLogs — leaving the entire token replay attack surface invisible. Many ingest CloudAppEvents but have not connected all relevant data sources in Defender for Cloud Apps — leaving specific application activities unreported. Some ingest endpoint tables but only from a subset of devices (servers but not workstations, or managed devices but not BYOD). The audit is not "is the table ingested?" but "is the table ingested completely, for all relevant entities, with sufficient retention?" Each gap is a hunting blind spot.
Extend this reference
Microsoft's data source landscape evolves. New tables appear (MicrosoftGraphActivityLogs was introduced in 2024). Existing tables gain new columns. Defender for Cloud Apps adds new application connectors. Before starting any hunt campaign, check the Microsoft Learn documentation for the specific table to confirm the columns you need are available and populated in your environment. The table schemas in this subsection are accurate as of the course publication date but may have expanded since then.
References Used in This Subsection
- Microsoft. "Advanced Hunting Schema Reference." Microsoft Learn. https://learn.microsoft.com/en-us/defender-xdr/advanced-hunting-schema-tables
- Microsoft. "Microsoft Sentinel — Data Connectors Reference." Microsoft Learn. https://learn.microsoft.com/en-us/azure/sentinel/data-connectors-reference
- Microsoft. "MicrosoftGraphActivityLogs." Microsoft Learn. https://learn.microsoft.com/en-us/graph/microsoft-graph-activity-logs-overview
You have time for one hunt this quarter. Do you hunt for the threat in the latest advisory or for the gap in your ATT&CK coverage matrix?
Hunt the coverage gap. Advisories describe threats that are CURRENT but may not target NE. Coverage gaps describe techniques that COULD target NE and would succeed undetected. The coverage gap hunt produces a detection rule (closing the gap permanently). The advisory-driven hunt produces a point-in-time assessment (confirming the specific threat is not present today). Both are valuable — but the coverage gap hunt has a longer-lasting impact because it produces a permanent detection improvement.
You understand the detection gap and the hunt cycle.
TH0 showed you what detection rules fundamentally cannot catch. TH1 gave you the hypothesis-driven methodology that closes that gap. Now you run the hunts.
- 10 complete hunt campaigns — from hypothesis through KQL execution through finding disposition, each campaign based on a real TTP
- 70 production hunt queries — every one mapped to MITRE ATT&CK and tested against realistic telemetry
- Advanced KQL for hunting — UEBA composite risk scoring, retroactive IOC sweeps, and hunt management metrics
- Hypothesis-Driven Hunt Toolkit lab pack — 30 days of realistic M365 and endpoint telemetry with multiple attack patterns seeded in
- TH16 — Scaling hunts across a team — the operating model for a production hunt program