Detecting Azure Lateral Movement
Overview
Lateral movement in Azure AD/Entra ID differs from on-premises environments. Attackers pivot through OAuth application consent grants, service principal abuse, cross-tenant access policies, and stolen refresh tokens rather than SMB/RDP connections. Detection requires correlating Microsoft Graph API audit logs, Azure AD sign-in logs, and Entra ID protection risk events using KQL queries in Microsoft Sentinel. This skill covers building detection analytics for common Azure lateral movement techniques including application impersonation, mailbox delegation abuse, and conditional access policy bypasses.
When to Use
- When investigating security incidents that require detecting azure lateral movement
- When building detection rules or threat hunting queries for this domain
- When SOC analysts need structured procedures for this analysis type
- When validating security monitoring coverage for related attack techniques
Detection Gaps & Validation
Common evasions / false-negatives that defeat these KQL analytics:
- Watching only
SigninLogs. Refresh-token and PRT replay land inAADNonInteractiveUserSignInLogs; app-only pivots land inAADServicePrincipalSignInLogs. Interactive-only queries miss both. - Cross-tenant B2B pivots show
ResultType == 0withResourceTenantId != HomeTenantId— filter on the tenant mismatch, not just location. - Mailbox delegation abuse (
Add-MailboxPermissionFullAccess/SendAs,Add delegated permission grant) is in the Office 365 / Exchange audit feed, not EntraAuditLogs. - Credential-add detail is buried in
TargetResources[0].modifiedProperties[*].newValue(KeyDescription / KeyType) — keying only onOperationNamemisses cert-based persistence.
Validate the rule actually fires:
union withsource=Tbl AADNonInteractiveUserSignInLogs, AADServicePrincipalSignInLogs, SigninLogs
| summarize rows=count() by Tbl // any 0 = diagnostic setting missing, rule is silently dead
- Tune FP by baselining each service principal's sign-in IP/location over 14+ days before alerting on "new" location, and exclude managed-identity object IDs and known automation egress IPs.
Prerequisites
- Azure subscription with Microsoft Sentinel workspace configured
- Azure AD P2 or Entra ID P2 license for risk-based sign-in detection
- Microsoft Graph API permissions: AuditLog.Read.All, Directory.Read.All, SecurityEvents.Read.All
- Log Analytics workspace ingesting AuditLogs, SigninLogs, and AADServicePrincipalSignInLogs
- Familiarity with KQL (Kusto Query Language)
Steps
Step 1: Configure Log Ingestion
Enable diagnostic settings to stream Azure AD logs to Log Analytics:
- Sign-in logs (interactive and non-interactive)
- Audit logs (directory changes, app consent)
- Service principal sign-in logs
- Provisioning logs
- Risky users and risk detections
Step 2: Build Detection Queries
Create KQL analytics rules in Sentinel for:
- Unusual service principal credential additions
- OAuth application consent grants to unknown apps
- Cross-tenant sign-ins from new tenants
- Token replay from different IP/user-agent combinations
- Mailbox delegation changes (FullAccess, SendAs)
Step 3: Correlate Events
Chain multiple low-confidence indicators into high-confidence lateral movement detections by correlating sign-in anomalies with directory changes within time windows.
Step 4: Automate Response
Create Sentinel playbooks (Logic Apps) to automatically revoke suspicious OAuth grants, disable compromised service principals, and enforce step-up authentication.
Expected Output
JSON report containing detected lateral movement indicators, correlated event chains, affected identities, and recommended containment actions with MITRE ATT&CK technique mappings.