
Outils de découverte et d'exploitation des détournements COM
Votre complice de détournement COM
Auteur : David Tulis (@kafkaesqu3)
Ce dépôt contient des échantillons de code et des preuves de concept pour explorer le détournement COM. Le détournement COM est une technique de post-exploitation Windows qui peut être utilisée pour la persistance ou l'évasion de la défense.
Pour plus d'informations sur l'interface COM, comment trouver des détournements et les techniques pour abuser d'un détournement, veuillez vous référer à la présentation donnée à Derbycon 9, COM Hijacking Techniques.
Extract-HijackableKeysFromProcmonCSV : analyse un export CSV de Procmon pour
rechercher les objets détournablesHijack-CLSID : Détourne un CLSID avec une DLL donnéeHijack-MultipleKeys : Détourne plusieurs CLSDs simultanément avec une
DLL donnée. Utile pour trouver les CLSID qui sont
souvent activésCreateProcessCreateRemoteThreadCreateThreadScript Powershell contenant des scripts d'aide pour gérer les détournements COM. Points forts :
Afficher tous les CLSID d'objets COM et l'emplacement de l'implémentation sur le disque
$keys = Get-CLSIDRegistryKeys -RegHive HKCR
$results = $keys | % {$guid = Extract-GUIDFromText $_; Map-GUIDToDLL -guid $guid 2> $null }
Effectuer un inventaire des CLSID sur un système
$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}
Trouver les CLSID référençant une DLL qui n'existe pas sur le système :
Find-MissingLibraries
3 modèles de preuve de concept pour l'abus de détournement COM, comme démontré lors de la présentation Derbycon 9 :
HijackDLL-Process : Créer un nouveau processus lorsque la DLL est chargéeHijackDLL-CreateRemoteThread : Effectuer une technique d'injection de thread en utilisant
l'appel API CreateRemoteThread lorsque la DLL est
chargéeHijackDLL-Threads : Utile pour mesurer la durée de vie des threads démarrés dans la
DLL après un détournementPreuve de concept montrant comment le détournement COM peut être utilisé pour les injections de processus :
La première étape consiste à effectuer le détournement :
COMInjectDotNet.exe chrome.exe C:\COM\COMInjectTarget.dll
Le détournement ne se déclenchera pas immédiatement et peut nécessiter que l'application soit démarrée (si elle n'est pas déjà en cours d'exécution), ou quelques actions de base dans l'application. Il existe probablement de meilleurs CLSID qui se déclenchent plus souvent, mais ceux-ci sont suffisants.
La COMInjectTarget.dll journalisera sa progression dans un fichier journal dans C:\COM. Cela
semble plus stable que d'utiliser quelque chose comme AllocConsole depuis un autre processus et
de se contenter d'imprimer dans la console.
Ce qui suit montre la DLL injectée s'exécutant depuis le processus principal 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)
Les processus actuellement pris en charge sont :
Pour en savoir plus sur COM et les détournements COM :