THREAT-InitialAccess-PhishingMacro

Phishing Document Macro Execution and Initial Access

Initial Access Execution Last updated:

Despite Microsoft's macro-blocking default settings (Block macros from the internet in Office 2016+, enabled by default since 2022), phishing document macro execution continues to be a primary initial access vector for SMBs. Attackers have adapted: moving to ISO/IMG file containers that strip the Mark-of-the-Web (MOTW) flag, using template injection attacks (DOTM/XLTM), abusing OneNote .one files (dropped in 2023 but resurfaced with .onepkg), and targeting users who have manually disabled macro blocking via Group Policy misconfiguration or social engineering ('Enable content to view this document'). QakBot successors (Pikabot, DarkGate), TA577, and Lazarus Group are documented using this technique against UK SMBs. NCSC 2025 advisory noted macro-based attacks persist in 40% of SMB ransomware intrusions due to inadequate macro restrictions.

What is THREAT-InitialAccess-PhishingMacro Phishing Document Macro Execution and Initial Access?

Phishing Document Macro Execution and Initial Access (THREAT-InitialAccess-PhishingMacro) maps to the Initial Access and Execution tactics — the adversary is trying to get into your network in MITRE ATT&CK.

This page provides production-ready detection logic for Phishing Document Macro Execution and Initial Access, covering the data sources and telemetry it touches: Microsoft Defender for Endpoint (DeviceProcessEvents, DeviceFileEvents), Sysmon Event ID 1, 11, Microsoft 365 Defender. The queries below are rated high severity at high confidence, and ship for 7 SIEM platforms — KQL, SPL, Elastic, QRadar, Sumo, YARA-L, LogScale.

MITRE ATT&CK

Tactic
Initial Access Execution
Microsoft Sentinel / Defender
kusto
// THREAT: Phishing Macro Initial Access Detection
// Detects malicious macro execution via suspicious child processes
// from Office applications and document-related processes

let OfficeApps = dynamic(["winword.exe", "excel.exe", "powerpnt.exe",
    "outlook.exe", "onenote.exe", "msaccess.exe", "mspub.exe"]);
let SuspiciousChildren = dynamic([
    "cmd.exe", "powershell.exe", "pwsh.exe", "mshta.exe",
    "wscript.exe", "cscript.exe", "regsvr32.exe", "rundll32.exe",
    "certutil.exe", "bitsadmin.exe", "wmic.exe", "msiexec.exe",
    "curl.exe", "wget.exe", "schtasks.exe", "taskschd.msc"
]);
let HighRiskApps = dynamic(["wscript.exe", "cscript.exe", "mshta.exe",
    "regsvr32.exe", "certutil.exe", "bitsadmin.exe"]);
// Alert 1: Office app spawning suspicious child process
DeviceProcessEvents
| where Timestamp > ago(24h)
| where InitiatingProcessFileName in~ (OfficeApps)
| where FileName in~ (SuspiciousChildren)
| extend HighRisk = FileName in~ (HighRiskApps)
| extend RiskScore = iff(HighRisk, 90, 75)
| project Timestamp, DeviceName, AccountName,
    FileName, ProcessCommandLine,
    InitiatingProcessFileName, InitiatingProcessCommandLine,
    RiskScore
| extend ThreatType = "Macro_SuspiciousChildProcess";
// Alert 2: ISO/IMG container mounting followed by Office doc execution
let MountEvents = DeviceFileEvents
| where Timestamp > ago(24h)
| where FileName endswith ".iso" or FileName endswith ".img" or FileName endswith ".vhd"
| where ActionType =~ "FileCreated"
| project MountTime=Timestamp, DeviceName, MountedFile=FileName, AccountName;
DeviceProcessEvents
| where Timestamp > ago(24h)
| where InitiatingProcessFileName in~ (OfficeApps)
| where FileName in~ (SuspiciousChildren)
| join kind=inner MountEvents on DeviceName, AccountName
| where datetime_diff('minute', Timestamp, MountTime) between (0 .. 30)
| project Timestamp, DeviceName, AccountName, FileName, ProcessCommandLine,
    InitiatingProcessFileName, MountedFile
| extend ThreatType = "Macro_ISOContainer_Execution"

Two-vector phishing macro detection: (1) Office applications spawning suspicious child processes (cmd.exe, PowerShell, wscript.exe, mshta.exe, etc.) — the direct macro execution indicator; (2) ISO/IMG file mounting followed by Office document execution within 30 minutes — the MOTW-bypass pattern where attackers package documents in ISO containers to circumvent macro blocking. High-risk child processes (mshta, regsvr32, cscript) score 90; lower-risk (cmd, PowerShell) score 75.

high severity high confidence

Data Sources

Microsoft Defender for Endpoint (DeviceProcessEvents, DeviceFileEvents) Sysmon Event ID 1, 11 Microsoft 365 Defender

Required Tables

DeviceProcessEvents DeviceFileEvents

False Positives

  • Legitimate Office macros that invoke cmd.exe for file management operations (e.g., print macros, export scripts)
  • Developers testing Office automation or VBA scripts who invoke PowerShell from Excel or Word
  • IT management scripts embedded in Office templates that run system commands (should be replaced with modern automation)
  • Legitimate ISO file usage for software installation followed by document viewing on the same day

Sigma rule & cross-platform mapping

The detection logic for Phishing Document Macro Execution and Initial Access (THREAT-InitialAccess-PhishingMacro) above is provided in a vendor-neutral form so you can deploy it on any SIEM. The same logic is shipped here as native KQL (Microsoft Sentinel / Defender), SPL (Splunk), Elastic (Elastic Security (EQL)), QRadar (IBM QRadar (AQL)), Sumo (Sumo Logic CSE), YARA-L (Google Chronicle / SecOps), LogScale (CrowdStrike LogScale (CQL)) queries. In Sigma terms, this detection targets the following logsource:

logsource:
  category: process_creation
  product: windows

Browse the community-maintained Sigma rules for this technique:


Testing Methodology

Validate this detection against 1 adversary technique from Atomic Red Team. Each test below lists the behaviour to exercise and the telemetry you should expect to see. Executable commands and cleanup steps are available with Pro.

  1. Test 1Office Macro Child Process Simulation (Excel)

    Expected signal: Sysmon Event ID 1: Excel.exe spawning cmd.exe. Parent process chain: explorer.exe > excel.exe > cmd.exe.


Response Playbook

Triage

  1. Identify the Office document that spawned the suspicious child process. Check the parent process command line for the document file path.
  2. Locate the document on disk and hash it — look up the hash in VirusTotal and your threat intelligence platform.
  3. Determine how the document arrived on the endpoint: email attachment (check Outlook message store, O365 email logs), downloaded from web (check browser history), or copied from a network share or USB.
  4. If the document executed a network callout (certutil download, curl, PowerShell IEX), check network logs for the destination IP/domain and any files downloaded.
  5. Assess if post-exploitation activity followed: was a payload dropped? Was there persistence (scheduled tasks, registry run keys, startup folders)?

Containment

  1. Isolate the affected endpoint via EDR host isolation.
  2. If the macro downloaded a payload: block the C2 domain/IP at the firewall and email gateway.
  3. Check for lateral movement from the affected host: did it connect to other internal systems after the macro execution?
  4. Verify macro settings via Group Policy: ensure 'Block macros from the internet' is enforced. Check if the user received a 'click here to enable macros' prompt.
  5. Quarantine the phishing document and submit to email vendor for blocklisting.

Evidence Collection

  1. The phishing document itself: hash for VirusTotal, decompile macros with oletools (olevba) for analysis
  2. Sysmon Event ID 1: child process command line showing what the macro executed
  3. Browser/email history to determine document delivery vector
  4. Network flow logs: outbound connections from the Office process to C2
  5. File system: any dropped payloads, persistence artifacts

Escalation Criteria

  • ! Macro executed a download cradle (certutil, curl, PowerShell IEX) and dropped a second-stage payload
  • ! Persistence mechanisms created: scheduled tasks, registry run keys, startup folder files
  • ! Network connections to external IPs from Office process post-macro execution
  • ! Multiple endpoints affected by the same phishing document (campaign-level response required)
  • ! Macro executed in context of a privileged user account

Investigation Guide

Forensic Artifacts

  • > The Office document: extract VBA macros with olevba, check for auto-execute macros (AutoOpen, AutoClose, Document_Open)
  • > Recent file locations: HKCU\Software\Microsoft\Office\[version]\[app]\File MRU
  • > Sysmon Event ID 11: files created by Office process after macro execution
  • > Sysmon Event ID 3: network connections from Office process
  • > Temp directory: C:\Users\[user]\AppData\Local\Temp\ — dropped payload staging location

Tuning Guidance

This detection benefits from understanding your environment's legitimate Office macro usage. In most SMBs, Office macros spawning cmd.exe or PowerShell is genuinely rare and has almost no legitimate business use case in standard user operations. IT-deployed Excel templates with VBA automation should be signed with a code signing certificate and excluded by certificate rather than by process name. Enable Office Macro security telemetry via Microsoft 365 Defender Attack Surface Reduction rules — particularly 'Block all Office applications from creating child processes' which will both prevent and alert on this technique.


Hunting Queries

Hunt for any historical Office → shell/script child process executions over the past 7 days — may reveal prior compromise that was missed or a long dwell time attacker.

Hunting — KQL
kql
DeviceProcessEvents
| where Timestamp > ago(7d)
| where InitiatingProcessFileName in~ ("winword.exe", "excel.exe", "powerpnt.exe", "outlook.exe")
| where FileName in~ ("cmd.exe", "powershell.exe", "wscript.exe", "mshta.exe", "certutil.exe", "regsvr32.exe")
| project Timestamp, DeviceName, AccountName, FileName,
    ProcessCommandLine, InitiatingProcessFileName, InitiatingProcessCommandLine
| sort by Timestamp desc
Hunting — SPL
spl
index=wineventlog sourcetype="XmlWinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode=1
  ParentImage IN ("*winword*","*excel*","*powerpnt*","*outlook*")
  Image IN ("*cmd*","*powershell*","*wscript*","*mshta*","*certutil*")
| table _time, host, User, Image, CommandLine, ParentImage, ParentCommandLine
| sort - _time

Atomic Red Team Tests

Test 1 Office Macro Child Process Simulation (Excel)
windows

Opens an Excel spreadsheet with an auto-execute macro that spawns cmd.exe — simulates the most common phishing document initial access pattern.

Command

powershell
powershell.exe -Command "$xl = New-Object -ComObject Excel.Application; $xl.Visible=$false; $wb=$xl.Workbooks.Add(); $ws=$wb.Sheets(1); $m=$wb.VBProject.VBComponents('ThisWorkbook').CodeModule; $m.AddFromString('Private Sub Workbook_Open()\r\nShell \"cmd.exe /c whoami > C:\\Temp\\macro_test.txt\"\'\r\nEnd Sub'); $xl.DisplayAlerts=$false; $wb.SaveAs('C:\\Temp\\test_macro.xlsm',52); $xl.Quit()"

Cleanup

powershell
Remove-Item C:\Temp\test_macro.txt,C:\Temp\test_macro.xlsm -Force -ErrorAction SilentlyContinue

Expected Telemetry

Sysmon Event ID 1: Excel.exe spawning cmd.exe. Parent process chain: explorer.exe > excel.exe > cmd.exe.

Expected Detection

Alert fires on Office app (excel.exe) spawning cmd.exe as child process. RiskScore=75.

Related Detections