Email exfiltration comes in two forms. Persistent collection uses forwarding or redirect rules, a staple of business email compromise. One-off theft sends files as attachments to a personal address. Both leave clear audit trails in Exchange and Microsoft 365, provided you retain and read them.
Signals at a Glance
| Signal | Where | ATT&CK |
|---|---|---|
| New or changed inbox rule with ForwardTo, RedirectTo or ForwardAsAttachmentTo to an external address | Unified Audit Log | T1114.003 |
| Mailbox-level ForwardingSmtpAddress or ForwardingAddress set | Exchange admin audit | T1114.003 |
| Rule that moves matching mail to RSS Feeds or Deleted Items | Unified Audit Log | T1564.008 |
| Large attachments sent to free-mail domains | Message trace, DLP | T1048 |
| Mailbox accessed by a new delegate or from a new IP then bulk-read | MailItemsAccessed | T1114.002 |
Forwarding Rules and Mailbox Settings
Watch the creation events, then audit the current state. Rule creation is logged as New-InboxRule or Set-InboxRule, and mailbox forwarding as Set-Mailbox. Attackers frequently pair forwarding with a hiding rule, so look at the other actions on the same rule too:
// Sentinel (KQL) - inbox rules that forward or redirect externally
// tune/validate: Parameters is a JSON array of name/value pairs in OfficeActivity
OfficeActivity
| where TimeGenerated > ago(7d)
| where OfficeWorkload == "Exchange"
| where Operation in ("New-InboxRule","Set-InboxRule","UpdateInboxRules")
| extend p = tostring(Parameters)
| where p has_any ("ForwardTo","RedirectTo","ForwardAsAttachmentTo","DeleteMessage","MoveToFolder")
| project TimeGenerated, UserId, ClientIP, Operation, p
| order by TimeGenerated desc
State matters as much as events. Rules created before your retention window never appear in a log hunt, so enumerate what exists today:
# Exchange Online PowerShell - enumerate external forwarding in place
# tune/validate: run read-only under a least-privilege audit account
Get-Mailbox -ResultSize Unlimited |
Where-Object { $_.ForwardingSmtpAddress -or $_.ForwardingAddress } |
Select-Object UserPrincipalName, ForwardingSmtpAddress, ForwardingAddress, DeliverToMailboxAndForward
foreach ($mbx in Get-Mailbox -ResultSize Unlimited) {
Get-InboxRule -Mailbox $mbx.UserPrincipalName |
Where-Object { $_.ForwardTo -or $_.RedirectTo -or $_.ForwardAsAttachmentTo } |
Select-Object @{n='Mailbox';e={$mbx.UserPrincipalName}}, Name, ForwardTo, RedirectTo, ForwardAsAttachmentTo
}
Attachments and Prevention
- Alert on messages with attachments above a size threshold sent to consumer mail domains by users who rarely send external attachments.
- Block automatic external forwarding with an outbound spam policy so the control is preventive, then detect attempts to bypass it.
- Enable
MailItemsAccessedauditing where licensing allows; it records which items an attacker actually read. - Treat a forwarding rule appearing within minutes of an anomalous sign-in as an account compromise, not a user preference.
Microsoft 365 Unified Audit Log and Exchange admin audit guidance, Splunk ESCU analytic stories for O365 mailbox forwarding, Elastic rules for new inbox rules, and SigmaHQ cloud rules. Baseline your own environment — some executives and shared mailboxes forward legitimately, so record them as approved exceptions.
Build Detections That Fire
Mjolnir Security helps blue teams turn threat intelligence into high-fidelity detections across endpoint, network, identity and cloud telemetry.
- Detection Engineering We build and tune detections mapped to ATT&CK from your own telemetry.
- Threat Hunting as a Service Hypothesis-driven hunts for the behaviours on this page.
- 24/7 Incident Response Containment when a detection fires. Call +1 833 403 5875.
Stay ahead of emerging threats. Get notified when we publish new intelligence reports and advisories.
Subscribe to Alerts