Distributed COM lets a remote client instantiate a COM object on another machine and call its methods. A handful of objects expose methods that run commands, notably MMC20.Application (ExecuteShellCommand), ShellWindows and ShellBrowserWindow. No new service and no new listener is required, so detection relies on process lineage and RPC traffic.
Signals at a Glance
| Signal | Where | ATT&CK |
|---|---|---|
| mmc.exe started with -Embedding that spawns cmd.exe or powershell.exe | Sysmon 1, Event 4688 | T1021.003 |
| explorer.exe spawning an interpreter on a server with no interactive session for that user | Sysmon 1 + Event 4624 | T1021.003 |
| Inbound RPC endpoint mapper (135) then a high ephemeral port from one source | Zeek conn.log, Sysmon 3 | T1021.003 |
| Remote activation call (RemoteCreateInstance) in DCE/RPC | Zeek dce_rpc.log | T1021.003 |
| Type 3 logon with an admin account just before the child process | Event 4624 | T1078 |
Process Lineage Signals
MMC20.Application launches mmc.exe with the -Embedding argument, and its ExecuteShellCommand method starts the command as its child. That chain, mmc.exe -Embedding then cmd.exe, essentially never occurs from a user. ShellWindows and ShellBrowserWindow instead reuse an existing explorer.exe, so the tell is an Explorer child with no matching console logon:
title: MMC20 DCOM Spawning Interpreter
logsource:
product: windows
category: process_creation
detection:
parent:
ParentImage|endswith: '\mmc.exe'
ParentCommandLine|contains: '-Embedding'
child:
Image|endswith:
- '\cmd.exe'
- '\powershell.exe'
- '\pwsh.exe'
- '\rundll32.exe'
- '\wscript.exe'
condition: parent and child
level: high
# tune/validate: expect near-zero hits; any MMC snap-in that launches helpers needs an exception.
// Microsoft Defender (KQL) - explorer.exe child on a server with no recent interactive logon
let interactive = DeviceLogonEvents
| where LogonType in ("Interactive", "RemoteInteractive", "CachedInteractive")
| project DeviceName, AccountName, LogonTime=Timestamp;
DeviceProcessEvents
| where InitiatingProcessFileName =~ "explorer.exe"
| where FileName in~ ("cmd.exe", "powershell.exe", "pwsh.exe")
| where DeviceName in~ (server_hosts) // watchlist of servers; placeholder name
| join kind=leftanti (interactive) on DeviceName, AccountName
| project Timestamp, DeviceName, AccountName, FileName, ProcessCommandLine
// tune/validate: confirm AccountName alignment between the two tables in your tenant.
RPC Traffic and Hardening
DCOM activation always begins with a connection to the endpoint mapper on port 135, followed by a connection to a high port assigned for the object. Zeek’s dce_rpc.log records the interface and operation, so remote activation (RemoteCreateInstance on the system activator interface) from a workstation to a server is visible without any host agent.
- Alert on workstation-to-workstation RPC to 135 and the following ephemeral port; peers rarely need to talk this way.
- Review DCOM hardening events: System log Event 10036 and 10037 relate to the DCOM authentication-level hardening, and failures there can show scanning behaviour.
- Disable remote DCOM launch and activation permissions where there is no business need, and block port 135 between user VLANs with host or network firewalls.
- Remember Office objects:
Excel.Applicationand similar COM servers also expose command execution, so apply the same lineage logic toexcel.exelaunched with-Embedding.
Use the SigmaHQ MMC and DCOM rules, Elastic and Splunk ESCU DCOM lateral movement content and MITRE CAR analytics for DCOM. Atomic Red Team includes MMC20 and ShellWindows tests, and Zeek DCE/RPC logging gives a network view. Baseline your own environment: Windows administrative consoles and Office automation legitimately launch from COM.
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