Distributed Component Object Model
Adversaries may use Valid Accounts to interact with remote machines by taking advantage of Distributed Component Object Model (DCOM). DCOM extends Windows COM (Component Object Model) beyond local machines using RPC, allowing remote method calls on COM objects. Adversaries with Administrator privileges can remotely obtain code execution through Office applications (Excel, Outlook), MMC20.Application, ShellWindows, and other insecure COM objects. Tools like Empire's Invoke-DCOM, Cobalt Strike, and SILENTTRINITY have built-in DCOM lateral movement capabilities. DCOM communicates over TCP port 135 (RPC endpoint mapper) and dynamically assigned high ports.
// Detect DCOM lateral movement via process spawning from COM host processes
let DcomLaunchParents = dynamic(["mmc.exe", "excel.exe", "winword.exe", "outlook.exe", "powerpnt.exe", "visio.exe"]);
let SuspiciousChildren = dynamic(["cmd.exe", "powershell.exe", "wscript.exe", "cscript.exe", "mshta.exe", "rundll32.exe", "regsvr32.exe", "certutil.exe"]);
DeviceProcessEvents
| where Timestamp > ago(24h)
// Pattern 1: Suspicious child processes from DCOM/COM hosts
| where InitiatingProcessFileName has_any (DcomLaunchParents)
| where FileName has_any (SuspiciousChildren)
| extend Pattern = "COM_SuspiciousChild"
| project Timestamp, DeviceName, AccountName, FileName, ProcessCommandLine,
InitiatingProcessFileName, InitiatingProcessCommandLine, Pattern
| union (
// Pattern 2: MMC20 DCOM lateral movement (shellexecute via MMC)
DeviceProcessEvents
| where Timestamp > ago(24h)
| where InitiatingProcessFileName =~ "mmc.exe"
| where FileName =~ "cmd.exe" or FileName =~ "powershell.exe"
| extend Pattern = "MMC20_DCOM"
| project Timestamp, DeviceName, AccountName, FileName, ProcessCommandLine,
InitiatingProcessFileName, InitiatingProcessCommandLine, Pattern
)
| union (
// Pattern 3: dcomcnfg.exe execution (DCOM config tool)
DeviceProcessEvents
| where Timestamp > ago(24h)
| where FileName =~ "dcomcnfg.exe"
| extend Pattern = "DCOM_ConfigTool"
| project Timestamp, DeviceName, AccountName, FileName, ProcessCommandLine,
InitiatingProcessFileName, InitiatingProcessCommandLine, Pattern
)
| sort by Timestamp desc Data Sources
Required Tables
False Positives
- Legitimate administrative scripts using DCOM to manage remote systems via WMI (IT automation tools like Ansible, SCCM)
- Office applications launching helper processes during document processing or macro execution for legitimate business use
- MMC snap-ins spawning cmd.exe for legitimate administrative tasks by IT staff
- Software developers testing DCOM-based applications or COM server registration
- Monitoring tools that use COM automation to collect system information
References (7)
- https://attack.mitre.org/techniques/T1021/003/
- https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/
- https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/
- https://www.fireeye.com/blog/threat-research/2019/06/hunting-com-objects.html
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1021.003/T1021.003.md
- https://github.com/EmpireProject/Empire/blob/master/data/module_source/lateral_movement/Invoke-DCOM.ps1
- https://learn.microsoft.com/en-us/windows/win32/com/the-component-object-model
Unlock Pro Content
Get the full detection package for T1021.003 including response playbook, investigation guide, and atomic red team tests.