
Инструменты для обнаружения и эксплуатации COM-перехватов
Ваш сообщник по COM-перехвату
Автор: David Tulis (@kafkaesqu3)
Этот репозиторий содержит примеры кода и концепт-доказательства для изучения COM-перехвата. COM-перехват — это техника пост-эксплуатации Windows, которую можно использовать для закрепления или обхода защиты.
Для получения дополнительной информации о COM-интерфейсе, о том, как находить перехваты, и о техниках злоупотребления перехватом, обратитесь к презентации, представленной на Derbycon 9, Техники COM-перехвата.
Extract-HijackableKeysFromProcmonCSV: анализирует экспорт Procmon в формате CSV
на предмет перехватываемых объектовHijack-CLSID: перехватывает CLSID с помощью заданной DLLHijack-MultipleKeys: перехватывает несколько CLSID одновременно с помощью заданной
DLL. Это полезно для поиска CLSID, которые
часто активируютсяCreateProcessCreateRemoteThreadCreateThreadPowerShell-скрипт, содержащий вспомогательные скрипты для работы с COM-перехватами. Основные возможности:
Показать все CLSID COM-объектов и расположение реализации на диске
$keys = Get-CLSIDRegistryKeys -RegHive HKCR
$results = $keys | % {$guid = Extract-GUIDFromText $_; Map-GUIDToDLL -guid $guid 2> $null }
Провести обзор CLSID в системе
$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}
Найти CLSID, ссылающиеся на DLL, которой не существует в системе:
Find-MissingLibraries
3 шаблона концепт-доказательств для злоупотребления COM-перехватом, как было продемонстрировано на презентации Derbycon 9:
HijackDLL-Process: создание нового процесса при загрузке DLLHijackDLL-CreateRemoteThread: выполнение техники внедрения потока
с использованием вызова API CreateRemoteThread, когда
DLL загруженаHijackDLL-Threads: полезен для измерения времени жизни потоков,
запущенных в DLL после перехватаКонцепт-доказательство, показывающее, как COM-перехват может использоваться для внедрения в процессы:
Первый шаг — выполнить перехват:
COMInjectDotNet.exe chrome.exe C:\COM\COMInjectTarget.dll
Перехват не сработает немедленно; возможно, потребуется запустить приложение (если оно ещё не запущено) или выполнить некоторые базовые действия в приложении. Вероятно, есть и более удачные CLSID, срабатывающие чаще, но и этих достаточно.
COMInjectTarget.dll будет записывать ход своего выполнения в файл журнала в C:\COM. Это
выглядит более стабильным, чем использование, например, AllocConsole из другого
процесса и обычный вывод на консоль.
Ниже показана внедрённая DLL, работающая внутри основного процесса
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)
В настоящее время поддерживаются следующие процессы:
Чтобы узнать больше о COM и COM-перехватах: