
Werkzeuge zur Erkennung und Ausnutzung von COM-Hijacks
Ihr Komplize für COM-Hijacking
Author: David Tulis (@kafkaesqu3)
Dieses Repository enthält Codebeispiele und Proofs-of-Concept zur Erkundung von COM-Hijacking. COM-Hijacking ist eine Windows-Post-Exploitation-Technik, die für Persistenz oder zur Umgehung von Verteidigungsmaßnahmen (Defense Evasion) eingesetzt werden kann.
Weitere Informationen zur COM-Schnittstelle, zum Auffinden von Hijacks und zu Techniken für den Missbrauch eines Hijacks finden Sie im Vortrag auf der Derbycon 9, COM Hijacking Techniques.
Extract-HijackableKeysFromProcmonCSV: parst einen Procmon-CSV-Export
nach hijackbaren ObjektenHijack-CLSID: Hijackt eine CLSID mit einer angegebenen DLLHijack-MultipleKeys: Hijackt mehrere CLSDs gleichzeitig mit einer
angegebenen DLL. Dies ist nützlich, um CLSIDs zu
finden, die häufig aktiviert werdenCreateProcessCreateRemoteThreadCreateThreadPowershell-Skript mit Hilfsskripten für den Umgang mit COM-Hijacks. Highlights:
Zeigt alle CLSIDs von COM-Objekten und den Speicherort der Implementierung auf der Festplatte an
$keys = Get-CLSIDRegistryKeys -RegHive HKCR
$results = $keys | % {$guid = Extract-GUIDFromText $_; Map-GUIDToDLL -guid $guid 2> $null }
Führt eine Bestandsaufnahme der CLSIDs auf einem System durch
$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}
Findet CLSIDs, die auf eine DLL verweisen, die auf dem System nicht vorhanden ist:
Find-MissingLibraries
3 Proof-of-Concept-Vorlagen für den Missbrauch von COM-Hijacks, wie in der Derbycon-9-Präsentation demonstriert:
HijackDLL-Process: Erstellt einen neuen Prozess, wenn die DLL geladen wirdHijackDLL-CreateRemoteThread: Führt die Thread-Injektionstechnik mithilfe des CreateRemoteThread-API-Aufrufs aus, wenn die DLL geladen wirdHijackDLL-Threads: Nützlich zum Messen der Lebensdauer von Threads, die nach einem Hijack in der DLL gestartet werdenProof of Concept, der zeigt, wie COM-Hijacking für Prozessinjektionen genutzt werden kann:
Der erste Schritt besteht darin, den Hijack durchzuführen:
COMInjectDotNet.exe chrome.exe C:\COM\COMInjectTarget.dll
Der Hijack wird nicht sofort ausgelöst und erfordert möglicherweise, dass die Anwendung gestartet wird (falls sie nicht bereits läuft), oder einige grundlegende Aktionen in der Anwendung. Es gibt vermutlich einige bessere CLSIDs, die häufiger ausgelöst werden, aber diese sind gut genug.
Die COMInjectTarget.dll protokolliert ihren Fortschritt in einer Protokolldatei unter C:\COM. Dies scheint stabiler zu sein, als etwa AllocConsole aus einem anderen Prozess heraus zu verwenden und lediglich auf der Konsole auszugeben.
Das Folgende zeigt die injizierte DLL, die innerhalb des Hauptprozesses chrome.exe läuft:
[*] 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)
Die derzeit unterstützten Prozesse sind:
Um mehr über COM und COM-Hijacks zu erfahren: