T1098.002

Additional Email Delegate Permissions

Adversaries may grant additional permission levels to maintain persistent access to an adversary-controlled email account. Using cmdlets like Add-MailboxPermission in Exchange/Office 365, or assigning folder-level permissions, attackers can ensure continued access to target mailboxes. This technique is commonly used in BEC incidents and persistent threat campaigns (APT28, APT29, Magic Hound) to maintain covert email access, enable internal spearphishing, and evade detection by reading communications without triggering login alerts.

Microsoft Sentinel / Defender
kusto
// T1098.002 — Additional Email Delegate Permissions
// Detects mailbox permission grants, folder permission changes, and ApplicationImpersonation role assignments
// Sources: OfficeActivity (Unified Audit Log) and AuditLogs (AAD)
let SuspiciousMailboxOps = dynamic([
  "Add-MailboxPermission",
  "Add-MailboxFolderPermission",
  "Set-MailboxFolderPermission",
  "Add-RecipientPermission",
  "Set-Mailbox",
  "New-ManagementRoleAssignment"
]);
let SuspiciousAccessRights = dynamic([
  "FullAccess",
  "SendAs",
  "SendOnBehalf",
  "ApplicationImpersonation",
  "ChangePermission",
  "ChangeOwner"
]);
let SuspiciousFolderPerms = dynamic([
  "Owner",
  "PublishingEditor",
  "Editor",
  "Reviewer"
]);
// Branch 1: OfficeActivity — Exchange Admin Audit Log and Mailbox Audit
let OfficeActivityAlerts = OfficeActivity
| where TimeGenerated > ago(24h)
| where RecordType in ("ExchangeAdmin", "ExchangeItemGroup", "ExchangeItem")
| where Operation has_any (SuspiciousMailboxOps)
| extend Parameters_s = tostring(Parameters)
| extend TargetUser = coalesce(
    tostring(parse_json(Parameters_s)[0].Value),
    UserId
  )
| extend AccessRights = extract(@'AccessRights[^\]]*\[([^\]]+)\]|AccessRights":\s*"([^"]+)"', 1, Parameters_s)
| extend GrantedTo = extract(@'User":\s*"([^"]+)"', 1, Parameters_s)
| extend IsSuspiciousRight = AccessRights has_any (SuspiciousAccessRights) or Parameters_s has_any (SuspiciousAccessRights)
| extend IsFolderPermChange = Operation in ("Add-MailboxFolderPermission", "Set-MailboxFolderPermission")
| extend IsDefaultAnonymous = Parameters_s has "Default" or Parameters_s has "Anonymous"
| project
    TimeGenerated,
    Operation,
    UserId,
    TargetUser,
    GrantedTo,
    AccessRights,
    IsSuspiciousRight,
    IsFolderPermChange,
    IsDefaultAnonymous,
    ClientIP,
    Parameters_s,
    RecordType,
    OfficeObjectId
| extend AlertSource = "OfficeActivity";
// Branch 2: AuditLogs — Azure AD role assignments (ApplicationImpersonation)
let AADAuditAlerts = AuditLogs
| where TimeGenerated > ago(24h)
| where OperationName in ("Add app role assignment to service principal", "Add delegated permission grant", "Add member to role", "Update application")
| extend InitiatedByUser = tostring(InitiatedBy.user.userPrincipalName)
| extend InitiatedByApp = tostring(InitiatedBy.app.displayName)
| extend TargetResource = tostring(TargetResources[0].displayName)
| extend ModifiedProps = tostring(TargetResources[0].modifiedProperties)
| extend IsImpersonation = ModifiedProps has "ApplicationImpersonation" or ModifiedProps has "Exchange.ManageAsApp"
| where IsImpersonation
| project
    TimeGenerated,
    OperationName,
    InitiatedByUser,
    InitiatedByApp,
    TargetResource,
    ModifiedProps,
    IsImpersonation,
    CorrelationId,
    Result
| extend AlertSource = "AuditLogs";
// Combine results
OfficeActivityAlerts
| union (AADAuditAlerts
  | project TimeGenerated,
    Operation = OperationName,
    UserId = InitiatedByUser,
    TargetUser = TargetResource,
    GrantedTo = "",
    AccessRights = "ApplicationImpersonation",
    IsSuspiciousRight = true,
    IsFolderPermChange = false,
    IsDefaultAnonymous = false,
    ClientIP = "",
    Parameters_s = ModifiedProps,
    RecordType = "AADAudit",
    OfficeObjectId = "",
    AlertSource
  )
| sort by TimeGenerated desc
high severity high confidence

Data Sources

Office 365 Unified Audit Log Azure Active Directory Audit Logs Exchange Admin Audit Log

Required Tables

OfficeActivity AuditLogs

False Positives

  • Legitimate IT helpdesk or mail administrators adding shared mailbox permissions for business continuity (e.g., shared support mailboxes, executive assistants)
  • Automated provisioning systems (ServiceNow, Azure AD connectors) that programmatically grant SendAs or FullAccess to distribution groups
  • Office 365 migration tools (Exchange Hybrid, third-party tools) that assign ApplicationImpersonation during mailbox migrations
  • Legitimate delegation by end users granting calendar or inbox access to assistants via Outlook settings
  • Security monitoring tools or compliance archiving solutions that require FullAccess or ApplicationImpersonation to index mailbox content

Unlock Pro Content

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

Response PlaybookInvestigation GuideHunting QueriesAtomic Red Team TestsTuning Guidance

Related Detections