T1671

Cloud Application Integration

This detection identifies adversaries achieving persistence in SaaS environments by abusing OAuth application integrations. Attackers register malicious applications, hijack existing integrations, or consent to adversary-controlled apps from high-privileged accounts to maintain access even after account compromise or password resets. Detection focuses on anomalous OAuth consent grants, new application registrations, service principal creation, and permission escalation events in Microsoft 365, Azure AD/Entra ID, and Google Workspace environments. Particular attention is paid to admin consent grants for high-privilege scopes, application registrations from non-admin users, and OAuth grants that occur outside normal business workflows.

Microsoft Sentinel / Defender
kusto
let SuspiciousPermissions = dynamic(["Mail.Read", "Mail.ReadWrite", "Files.Read.All", "Files.ReadWrite.All", "User.Read.All", "Directory.Read.All", "Directory.ReadWrite.All", "RoleManagement.ReadWrite.Directory", "Application.ReadWrite.All", "full_access_as_app"]);
let LookbackPeriod = 30d;
AuditLogs
| where TimeGenerated > ago(LookbackPeriod)
| where OperationName in (
    "Consent to application",
    "Add application",
    "Add service principal",
    "Add OAuth2PermissionGrant",
    "Add delegated permission grant",
    "Update application",
    "Add app role assignment to service principal",
    "Add app role assignment grant to user"
  )
| extend InitiatedByUser = tostring(InitiatedBy.user.userPrincipalName)
| extend InitiatedByApp = tostring(InitiatedBy.app.displayName)
| extend InitiatedByIPAddress = tostring(InitiatedBy.user.ipAddress)
| extend TargetAppName = tostring(TargetResources[0].displayName)
| extend TargetAppId = tostring(TargetResources[0].id)
| extend TargetAppType = tostring(TargetResources[0].type)
| extend ModifiedProperties = TargetResources[0].modifiedProperties
| mv-expand ModifiedProperties
| extend PropName = tostring(ModifiedProperties.displayName)
| extend PropNewValue = tostring(ModifiedProperties.newValue)
| where PropName in ("ConsentType", "Permissions", "DelegatedPermissionGrant.Scope", "AppRoles") or OperationName in ("Add application", "Add service principal")
| extend IsAdminConsent = iff(PropName == "ConsentType" and PropNewValue has "AllPrincipals", true, false)
| extend HasSuspiciousPermission = iff(PropNewValue has_any (SuspiciousPermissions), true, false)
| where IsAdminConsent == true or HasSuspiciousPermission == true or OperationName in ("Add application", "Add service principal")
| summarize
    EventCount = count(),
    Operations = make_set(OperationName),
    GrantedPermissions = make_set(PropNewValue),
    FirstSeen = min(TimeGenerated),
    LastSeen = max(TimeGenerated)
  by InitiatedByUser, InitiatedByApp, InitiatedByIPAddress, TargetAppName, TargetAppId, IsAdminConsent, HasSuspiciousPermission
| extend RiskScore = case(
    IsAdminConsent == true and HasSuspiciousPermission == true, "Critical",
    IsAdminConsent == true, "High",
    HasSuspiciousPermission == true, "High",
    "Medium"
  )
| project FirstSeen, LastSeen, InitiatedByUser, InitiatedByIPAddress, TargetAppName, TargetAppId, Operations, GrantedPermissions, IsAdminConsent, HasSuspiciousPermission, RiskScore, EventCount
| order by FirstSeen desc
high severity high confidence

Data Sources

Microsoft Entra ID Microsoft Sentinel Azure AD Audit Logs

Required Tables

AuditLogs

False Positives

  • Legitimate IT administrators deploying enterprise applications that require admin consent for business-critical permissions
  • Productivity application onboarding during organizational rollouts (e.g., deploying a new CRM, ITSM, or HR integration)
  • Third-party security vendors requiring Mail.Read or Directory.Read.All for legitimate CASB, DLP, or threat protection services
  • Developers registering applications in development tenants or sandbox environments for testing purposes
  • Microsoft-published first-party applications being re-consented after permission scope changes in product updates

Unlock Pro Content

Get the full detection package for T1671 including response playbook, investigation guide, and atomic red team tests.

Response PlaybookInvestigation GuideHunting QueriesAtomic Red Team TestsTuning Guidance

Related Detections