Movimento Laterale via DCOM: Distributed Component Object Model (T1021.003)
Il Distributed Component Object Model (DCOM) rappresenta l'estensione remota del framework COM di Windows, un middleware trasparente che sfrutta le chiamate a procedure remote (RPC) per consentire a un client di invocare metodi esposti da oggetti server residenti su macchine diverse. Nelle mani di un attaccante che disponga di credenziali valide con privilegi amministrativi, DCOM si trasforma in un vettore di movimento laterale particolarmente insidioso, mappato nella tattica TA0008 (Lateral Movement) del framework MITRE ATT&CK.
La tecnica si colloca nella fase post-compromissione della kill chain, tipicamente dopo l'ottenimento di credenziali privilegiate tramite dumping o phishing. L'abuso avviene invocando metodi insicuri esposti da oggetti COM legittimi — spesso applicazioni Office come Excel.Application o MMC20.Application — per ottenere esecuzione arbitraria di codice, macro o shellcode direttamente sull'endpoint remoto. Le ACL nel registro determinano chi può attivare gli oggetti: per default solo gli amministratori possono lanciarli in remoto, ma questo confine si dissolve non appena un account privilegiato viene compromesso.
L'impatto operativo è amplificato dal fatto che DCOM utilizza binari firmati e processi di sistema legittimi (wmiprvse.exe, rundll32.exe), rendendo la telemetria molto rumorosa. Con 3 famiglie di malware documentate che implementano nativamente questa tecnica — Cobalt Strike, Empire e SILENTTRINITY — DCOM rimane uno strumento privilegiato per operatori che desiderano evitare la creazione di servizi remoti o l'uso più rumoroso di PsExec e WMI diretto.
L'abuso di DCOM in un ingaggio red team richiede credenziali di un account con appartenenza al gruppo Local Administrators sull'host target, oltre alla porta 135/TCP (RPC endpoint mapper) raggiungibile insieme ai range dinamici RPC (49152-65535 per default su sistemi moderni).
Il primo passo consiste nell'enumerare gli oggetti COM esposti sulla macchina remota. In PowerShell si usa il cmdlet nativo per istanziare un oggetto remoto:
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","target.lab.local"))
Una volta ottenuto il riferimento, si invoca il metodo ExecuteShellCommand dell'oggetto Document.ActiveView:
$com.Document.ActiveView.ExecuteShellCommand("cmd.exe",$null,"/c calc.exe","7")
Oltre a MMC20, gli oggetti più abusati storicamente sono ShellWindows (CLSID 9BA05972-F6A8-11CF-A442-00A0C90A8F39), ShellBrowserWindow e le istanze di Excel.Application che permettono l'esecuzione di macro tramite il metodo DDEInitiate o RegisterXLL.
Per automatizzare il lavoro, il modulo Invoke-DCOM incluso in Empire (open source) e in vari fork di PowerSploit implementa già le catene per MMC20, ShellWindows e ShellBrowserWindow. La sintassi tipica è:
Invoke-DCOM -ComputerName target.lab.local -Method MMC20 -Command "powershell -enc
SharpDCOM (open source), porting in C# per esecuzione via .NET Framework, è preferibile quando si vuole evitare l'esecuzione di PowerShell per bypassare AMSI e Constrained Language Mode. Per operatori che lavorano con Cobalt Strike (a pagamento), il comando jump dcom-remote del modulo di lateral movement gestisce nativamente l'iniezione di Beacon tramite oggetti COM. SILENTTRINITY (open source) espone moduli analoghi nel namespace lateral_movement/dcom.
Dal punto di vista OPSEC, considera che ogni invocazione genera event log lato server: un'istanziazione di Excel.Application da parte di svchost.exe con parent services.exe su un host che non ha mai eseguito Office è un'anomalia macroscopica. Per ridurre la superficie, preferisci oggetti già presenti sul target e usa il metodo ShellExecute di ShellWindows che genera come parent explorer.exe, molto meno sospetto in ambienti user-facing.
In lab, valida sempre i test contro sistemi con Windows Defender e Sysmon configurato secondo la baseline swiftonsecurity/sysmon-config (open source) per verificare cosa il blue team osserverà realmente.
Vuoi diventare un Ethical Hacker ma non sai da dove iniziare?
Accedi alle lezioni gratuite e segui il percorso corretto fin dal primo passo