🔒 Guided

Pre-launch preview. Authorised access only.

Incorrect code

Guided by A Guide to Cloud
Explore AB-900 AI-901
Guided SC-200 Domain 3
Domain 3 — Module 1 of 6 17%
23 of 28 overall

SC-200 Study Guide

Domain 1: Manage a Security Operations Environment

  • Sentinel Workspace: Roles & Retention
  • Get Windows Events Into Sentinel
  • Syslog, CEF & Azure Data Ingestion
  • Defender for Endpoint: Core Setup
  • Attack Surface Reduction & Security Policies
  • Defender XDR: Tune Your Alerts
  • Automated Investigation & Attack Disruption
  • Sentinel Automation: Rules & Playbooks
  • Custom Detections in Defender XDR
  • Sentinel Analytics & Threat Intelligence
  • MITRE ATT&CK & Anomaly Detection
  • Detection Engineering: Putting It All Together

Domain 2: Respond to Security Incidents

  • Incident Triage: From Alert to Verdict Free
  • Purview & Defender for Cloud Threats
  • Identity Threats: Entra & Defender for Identity
  • Cloud App Security: Investigate Shadow IT
  • Sentinel Incident Response
  • Copilot for Security: Your AI Analyst
  • Complex Attacks & Lateral Movement
  • Endpoint: Timeline & Live Response
  • Endpoint: Evidence & Entity Investigation
  • M365 Investigations: Audit, Search & Graph

Domain 3: Perform Threat Hunting

  • KQL Foundations for Threat Hunters Free
  • Advanced Hunting in Defender XDR Free
  • Sentinel Hunting: Build & Monitor Queries
  • Threat Analytics & Hunting Graphs
  • Data Lake: KQL Jobs & Summary Rules
  • Notebooks & the Sentinel MCP Server

SC-200 Study Guide

Domain 1: Manage a Security Operations Environment

  • Sentinel Workspace: Roles & Retention
  • Get Windows Events Into Sentinel
  • Syslog, CEF & Azure Data Ingestion
  • Defender for Endpoint: Core Setup
  • Attack Surface Reduction & Security Policies
  • Defender XDR: Tune Your Alerts
  • Automated Investigation & Attack Disruption
  • Sentinel Automation: Rules & Playbooks
  • Custom Detections in Defender XDR
  • Sentinel Analytics & Threat Intelligence
  • MITRE ATT&CK & Anomaly Detection
  • Detection Engineering: Putting It All Together

Domain 2: Respond to Security Incidents

  • Incident Triage: From Alert to Verdict Free
  • Purview & Defender for Cloud Threats
  • Identity Threats: Entra & Defender for Identity
  • Cloud App Security: Investigate Shadow IT
  • Sentinel Incident Response
  • Copilot for Security: Your AI Analyst
  • Complex Attacks & Lateral Movement
  • Endpoint: Timeline & Live Response
  • Endpoint: Evidence & Entity Investigation
  • M365 Investigations: Audit, Search & Graph

Domain 3: Perform Threat Hunting

  • KQL Foundations for Threat Hunters Free
  • Advanced Hunting in Defender XDR Free
  • Sentinel Hunting: Build & Monitor Queries
  • Threat Analytics & Hunting Graphs
  • Data Lake: KQL Jobs & Summary Rules
  • Notebooks & the Sentinel MCP Server
Domain 3: Perform Threat Hunting Free ⏱ ~14 min read

KQL Foundations for Threat Hunters

KQL is the language of threat hunting. Learn how to identify the right tables, use essential operators, and write queries that find what your detections missed.

Why KQL matters for SC-200

☕ Simple explanation

KQL is like a search engine for your security data. Instead of browsing millions of log entries manually, you write a query that finds exactly what you need: “Show me all failed logins from Russia in the last 24 hours” or “Find every device that ran PowerShell with a download command.”

Kusto Query Language (KQL) is the query language used in both Defender XDR (Advanced Hunting) and Microsoft Sentinel. Every threat hunter, detection engineer, and senior SOC analyst uses it daily.

This module teaches the foundations — the tables, the operators, and the patterns you need to start hunting. The next module takes it further with real-world Advanced Hunting queries.

Kusto Query Language (KQL) is a read-only query language used across Microsoft’s security platform — Defender XDR Advanced Hunting, Microsoft Sentinel Log Analytics, Azure Data Explorer, and Azure Monitor. It uses a pipe-based syntax where data flows from left to right through a series of transformations.

For SC-200, KQL is tested across 20-25% of the exam (Domain 3) and appears in detection engineering (Domain 1) and investigation (Domain 2). You need to know which tables to query, how to filter and aggregate data, and how to write queries that identify threats.

The most important tables

Knowing which table to query is half the battle. Here are the key tables in Defender XDR Advanced Hunting:

Endpoint tables (Defender for Endpoint)

TableWhat It ContainsWhen to Use
DeviceEventsMiscellaneous device events (ASR triggers, tamper protection, etc.)Catch-all for non-standard events
DeviceProcessEventsProcess creation with command linesHunting for malicious processes, LOLBins
DeviceNetworkEventsNetwork connections from devicesC2 communication, data exfiltration
DeviceFileEventsFile creation, modification, deletionMalware drops, data staging
DeviceRegistryEventsRegistry modificationsPersistence mechanisms
DeviceLogonEventsLogon events on devicesLateral movement, credential use
DeviceImageLoadEventsDLL loading eventsDLL sideloading, injection

Email tables (Defender for Office 365)

TableWhat It Contains
EmailEventsEmail metadata (sender, recipient, subject, delivery action)
EmailAttachmentInfoAttachment details (name, type, hash)
EmailUrlInfoURLs found in emails
EmailPostDeliveryEventsPost-delivery actions (ZAP removals, user reports)

Identity tables

TableWhat It Contains
IdentityLogonEventsSign-in events from Entra ID and on-prem AD
IdentityQueryEventsAD queries (LDAP, DNS) — reconnaissance detection
IdentityDirectoryEventsAD directory changes (group membership, password resets)

Cloud app tables

TableWhat It Contains
CloudAppEventsActivities in connected cloud apps (Defender for Cloud Apps)
💡 Exam tip: table selection is heavily tested

The exam often describes a hunting scenario and asks “which table should you query?” Match the data type:

  • “Find processes running on endpoints” → DeviceProcessEvents
  • “Find network connections from devices” → DeviceNetworkEvents
  • “Find phishing emails” → EmailEvents + EmailUrlInfo
  • “Find suspicious sign-ins” → IdentityLogonEvents
  • “Find file downloads on devices” → DeviceFileEvents
  • “Find LDAP reconnaissance” → IdentityQueryEvents

Essential KQL operators

KQL queries flow from left to right through pipe operators:

Table
| where TimeGenerated > ago(24h)
| where ColumnName == "value"
| project Column1, Column2, Column3
| sort by Column1 desc
| take 10

The operators you must know

OperatorWhat It DoesExample
whereFilter rows matching a conditionwhere FileName == "powershell.exe"
projectSelect specific columnsproject Timestamp, DeviceName, FileName
extendCreate calculated columnsextend DurationMin = Duration / 60
summarizeAggregate data (count, sum, avg)summarize Count = count() by DeviceName
sort by / order byOrder resultssort by Timestamp desc
take / limitReturn first N rowstake 100
joinCombine two tables on a common columnjoin kind=inner (Table2) on CommonColumn
renderVisualise results as chartrender timechart

String operators

OperatorWhat It DoesCase-Sensitive?
==Exact matchYes
=~Exact match (case-insensitive)No
hasContains a whole word tokenNo
containsContains substring anywhereNo
startswithStarts with stringNo
matches regexRegular expression matchYes
has_anyContains any of the listed valuesNo
inMatches any value in a listYes
💡 Exam tip: has vs contains

has is faster than contains because it matches whole word tokens (indexed search). contains does substring matching (full scan).

  • "powershell" has "power" → false (not a whole token)
  • "powershell" contains "power" → true (substring match)
  • "Microsoft PowerShell" has "PowerShell" → true (whole word token)

For the exam: use has when looking for whole terms, contains when looking for substrings. has is the recommended default for performance.

Your first hunting queries

Find suspicious PowerShell activity

DeviceProcessEvents
| where Timestamp > ago(24h)
| where FileName == "powershell.exe"
| where ProcessCommandLine has_any ("Invoke-WebRequest", "wget", "curl", "DownloadString", "DownloadFile")
| project Timestamp, DeviceName, AccountName, ProcessCommandLine
| sort by Timestamp desc

Find failed sign-ins from unusual locations

IdentityLogonEvents
| where Timestamp > ago(7d)
| where ActionType == "LogonFailed"
| summarize FailedCount = count() by AccountUpn, Location
| where FailedCount > 10
| sort by FailedCount desc

Find emails with suspicious attachments

EmailAttachmentInfo
| where Timestamp > ago(24h)
| where FileType in ("exe", "scr", "js", "vbs", "ps1", "bat", "cmd")
| join kind=inner (EmailEvents) on NetworkMessageId
| project Timestamp, SenderFromAddress, RecipientEmailAddress, Subject, FileName, FileType
Question

What is the difference between 'has' and 'contains' in KQL?

Click or press Enter to reveal answer

Answer

'has' matches whole word tokens (indexed, fast). 'contains' matches substrings anywhere (full scan, slower). Example: 'PowerShell' has 'Power' = false. 'PowerShell' contains 'Power' = true. Use 'has' as default for performance.

Click to flip back

Question

Which table would you query to find lateral movement via RDP?

Click or press Enter to reveal answer

Answer

DeviceLogonEvents — filter for LogonType = RemoteInteractive. This table captures all logon events on devices including interactive, network, and remote (RDP) logons.

Click to flip back

Question

What does the 'summarize' operator do in KQL?

Click or press Enter to reveal answer

Answer

Aggregates rows by grouping columns. Common functions: count() (number of rows), sum(), avg(), min(), max(), dcount() (distinct count), make_set() (unique values as array). Example: summarize FailedLogins = count() by UserName groups failed logins per user.

Click to flip back

Knowledge Check

Tyler wants to find all devices that connected to a specific C2 IP address (198.51.100.42) in the last 24 hours. Which table should he query?

Knowledge Check

Anika writes a query: `DeviceProcessEvents | where FileName has 'power'`. What results will this return?

🎬 Video coming soon

Next up: KQL foundations are set. Now let’s write real-world Advanced Hunting queries in Defender XDR — detecting threats across endpoints, email, and identity.

← Previous

M365 Investigations: Audit, Search & Graph

Next →

Advanced Hunting in Defender XDR

Guided

I learn, I simplify, I share.

A Guide to Cloud YouTube Feedback

© 2026 Sutheesh. All rights reserved.

Guided is an independent study resource and is not affiliated with, endorsed by, or officially connected to Microsoft. Microsoft, Azure, and related trademarks are property of Microsoft Corporation. Always verify information against Microsoft Learn.