
Strumenti per l'individuazione e l'abuso dei COM hijack
Il tuo complice per il COM hijacking
Autore: David Tulis (@kafkaesqu3)
Questo repository contiene esempi di codice e proof-of-concept per esplorare il COM hijacking. Il COM hijacking è una tecnica di post-exploitation di Windows che può essere utilizzata per la persistenza o l'evasione della difesa.
Per maggiori informazioni sull'interfaccia COM, su come trovare gli hijack e sulle tecniche per abusarne, fare riferimento alla presentazione tenuta al Derbycon 9, COM Hijacking Techniques.
Extract-HijackableKeysFromProcmonCSV: analizza un export CSV di Procmon
per gli oggetti dirottabiliHijack-CLSID: dirotta un CLSID con una DLL specificataHijack-MultipleKeys: dirotta più CLSID contemporaneamente con una DLL
specificata. Utile per trovare CLSID che vengono
attivati spessoCreateProcessCreateRemoteThreadCreateThreadScript Powershell contenente script di supporto per gestire gli hijack COM. Punti salienti:
Mostra tutti i CLSID degli oggetti COM e la posizione dell'implementazione su disco
$keys = Get-CLSIDRegistryKeys -RegHive HKCR
$results = $keys | % {$guid = Extract-GUIDFromText $_; Map-GUIDToDLL -guid $guid 2> $null }
Esegui un censimento dei CLSID su un sistema
$HKCR_keys = Get-CLSIDRegistryKeys -RegHive HKCR
$HKCR_keys | where-object {$_ -like "*inprocserver"} | Measure-Object
$HKCR_keys | where-object {$_ -like "*inprocserver32"} | Measure-Object
$HKCR_keys | where-object {$_ -like "*localserver"} | Measure-Object
$HKCR_keys | where-object {$_ -like "*localserver32"} | Measure-Object
$HKLM_keys = Get-CLSIDRegistryKeys -RegHive HKLM
$HKLM_keys | Measure-Object
$HKCU_keys = Get-CLSIDRegistryKeys -RegHive HKCU
$HKCU_keys | Measure-Object
explorer:{69486DD6-C19F-42e8-B508-A53F9F8E67B8}
explorer:{9E175B6D-F52A-11D8-B9A5-505054503030}
explorer:{30CC9D06-7E62-4966-9777-BC3442E788BD}
explorer:{3eef301f-b596-4c0b-bd92-013beafce793}
explorer:{682159d9-c321-47ca-b3f1-30e36b2ec8b9}
explorer:{6B3B8D23-FA8D-40B9-8DBD-B950333E2C52}
explorer:{9aa46009-3ce0-458a-a354-715610a075e6}
explorer:{9BA05972-F6A8-11CF-A442-00A0C90A8F39}
explorer:{AC36A05C-FB95-4C7A-868C-A43CC8D2D926}
explorer:{B52D54BB-4818-4EB9-AA80-F9EACD371DF8}
explorer:{c2f03a33-21f5-47fa-b4bb-156362a2f239}
Trova i CLSID che fanno riferimento a una DLL inesistente sul sistema:
Find-MissingLibraries
3 template proof-of-concept per l'abuso degli hijack COM, come dimostrato nella presentazione al Derbycon 9:
HijackDLL-Process: Crea un nuovo processo quando la DLL viene caricataHijackDLL-CreateRemoteThread: Esegue la tecnica di iniezione dei thread
usando la chiamata API CreateRemoteThread
quando la DLL viene caricataHijackDLL-Threads: Utile per misurare la durata dei thread avviati nella DLL
dopo un hijackProof of concept per mostrare come il COM hijacking possa essere usato per le iniezioni di processi:
Il primo passo è eseguire l'hijack:
COMInjectDotNet.exe chrome.exe C:\COM\COMInjectTarget.dll
L'hijack non si attiva immediatamente e potrebbe richiedere l'avvio dell'applicazione (se non è in esecuzione) o alcune azioni di base sull'applicazione. Probabilmente esistono CLSID migliori che si attivano più spesso, ma questi sono sufficienti.
La COMInjectTarget.dll registrerà il proprio avanzamento in un file di log in
C:\COM. Questo approccio sembra più stabile rispetto all'uso di qualcosa come
AllocConsole da un altro processo e alla semplice stampa sulla console.
Quello che segue mostra la DLL iniettata in esecuzione all'interno del processo
principale chrome.exe:
[*] chrome pid=9104 ppid=4900 (count 0)
[*] chrome pid=9104 ppid=4900 (count 1)
[*] chrome pid=9104 ppid=4900 (count 2)
[*] chrome pid=9104 ppid=4900 (count 3)
[*] chrome pid=9104 ppid=4900 (count 4)
[*] chrome pid=9104 ppid=4900 (count 5)
I processi attualmente supportati sono:
Per saperne di più su COM e sugli hijack COM: