
Инструмент обхода перехвата контекста активации
PhantomCtx — это инструмент, автоматизирующий перехват контекста активации (Activation Context) с целью загрузки произвольной DLL в подавляющее большинство подписанных исполняемых файлов (например, Microsoft, Adobe, Mozilla).
Загрузчик представлен как современная альтернатива традиционному перехвату и подгрузке DLL (DLL Hijacking & Sideloading): в отличие от традиционных подходов, он не требует уязвимого бинарного файла. Метод может быть применён до тех пор, пока целевой исполняемый файл разрешает DLL через свою таблицу импорта (IAT) или, в худшем случае, через LoadLibrary без абсолютного пути.```c
C:\PhantomCtx\x64>.\PhantomCtx.exe
+----------------------------------+
| PhantomCtx v1.0 |
+----------------------------------+
Usage: PhantomCtx.exe -m [MODE] [OPTIONS]
Modes: -m recon Displays information about the Activation Context DLL redirections of a running process or one to be spawned.
-m spawn Perform Activation Context Hijacking using an on-disk executable
(preferably a signed binary for OPSEC purposes).
-m runtime Perform Activation Context Hijacking on an already running process.
Для более глубокого погружения в то, как это работает внутри и как обходит агрессивные EDR-решения, ознакомьтесь с постом в [моём техническом блоге](https://rexmax.dev/posts/phantomctx-new-approach-to-activation-context-hijacking-for-edr-evasion/).
# Содержание
- [Внутренний механизм](#internal-mechanism)
- [Новый метод перехвата контекста активации, ориентированный на обход EDR](#a-new-method-for-activation-context-hijacking-focused-on-edr-evasion)
- [Как скомпилировать](#how-to-compile)
- [Использование: модульный рабочий процесс](#usage-module-based-workflow)
- [Разведка](#recon)
- [Запуск (рекомендуется)](#spawn-recommended)
- [Во время выполнения](#runtime)
- [Пример: перехват контекста активации + DLL-проксинг mpnotify.exe](#example-activation-context-hijacking--dll-proxying-mpnotifyexe)
- [Отказ от ответственности](#disclaimer)
- [Ссылки](#references)
# Внутренний механизм
`PhantomCtx` злоупотребляет **легитимной** функцией Windows, присутствующей в большинстве процессов, называемой **контексты активации**. Согласно Microsoft:
>[_Контексты активации_](https://learn.microsoft.com/en-us/windows/win32/sbscs/a-sbscs-gly) — это структуры данных в памяти, содержащие информацию, которую система может использовать для перенаправления приложения **на загрузку определённой версии DLL**, экземпляра COM-объекта или пользовательской версии окна...
Когда загрузчик Windows разрешает DLL (через `LoadLibrary` или таблицу импорта), он следует определённому порядку разрешения:
1. Перенаправление DLL
2. Наборы API
3. **Перенаправление манифеста SxS**
4. Список загруженных модулей
5. Известные DLL
6. Граф зависимостей пакетов процесса
7 – 12. Стандартный порядок поиска файлов на диске
`PhantomCtx` нацелен на шаг 3: **перенаправление манифеста SxS**. Контексты активации создаются из [Side-by-Side](https://en.wikipedia.org/wiki/Side-by-side_assembly) (`.manifest`) файлов, связанных с исполняемыми файлами, обычно встроенных в PE-бинарники. Внутренне контекст активации содержит **оглавление (ToC)**, индексирующее несколько разделов, включая **раздел перенаправления DLL**. Загрузчик обычно обращается к контекстам активации через `PEB.ActivationContextData`.
Исследование [Куроша Даббага Эскаланте](https://github.com/Kudaes) показало, что вредоносный контекст активации можно создать с помощью `CreateActCtxW`, записать в память `RW` в целевой процесс, а затем активировать, перезаписывая `PEB.ActivationContextData` так, чтобы он указывал на сфабрикованную структуру.
После перехвата загрузчик разрешает перенаправления DLL, определённые в вредоносном контексте активации, **перенаправляя разрешение библиотек** на пути, контролируемые атакующим.
Загрузчик под названием `Eclipse`, разработанный в рамках его исследования, можно найти в [официальном репозитории](https://github.com/Kudaes/Eclipse).
## Новый метод перехвата контекста активации, ориентированный на обход EDR
После множества тестов `Eclipse` был обнаружен агрессивными EDR, такими как Elastic, в следующих точках:
- `Potential Suspended Process Code Injection`: создание приостановленного процесса с последующим `NtWriteVirtualMemory` для копирования AC-блобов в удалённый процесс.
- `Remote Process Memory Write by Low Reputation Module`: `NtWriteVirtualMemory` без `CreateProcess` в стеке вызовов и модуль с низкой репутацией, что необходимо для перезаписи `PEB.ActivationContextData`.
- `Remote Memory Write to Trusted Target Process`: `WriteProcessMemory` без `CreateProcess` в стеке вызовов, ограниченная системными/установленными пользователем бинарниками.
После одного дня исследований в поисках альтернативных подходов для реализации в `PhantomCtx` я обнаружил, что **область памяти исходного контекста активации является представлением раздела, отображаемым во время создания процесса**. Можно **отменить отображение этого представления раздела с помощью** `NtUnmapViewOfSection`, а затем создать новое представление раздела только для чтения, поддерживаемое нашим вредоносным контекстом активации, и отобразить его **по тому же самому адресу памяти**, где находился исходный.
В результате **больше нет необходимости** загрузчику перезаписывать указатель `PEB.ActivationContextData`. Это устраняет необходимость использования `NtAllocateVirtualMemory` и `NtWriteVirtualMemory`, обходя все правила мониторинга EDR, связанные с записью в память удалённого процесса и инъекцией.
Кроме того, для повышения сложности обнаружения `PhantomCtx` не использует `CreateActCtxW`, снимая необходимость работы с `.manifest` файлами во время атаки. В зависимости от выбранного режима он может **украсть контекст активации из другого удалённого процесса**, содержащего корректный раздел перенаправления DLL, с помощью `NtReadVirtualMemory`, реконструировать записи перенаправления DLL локально, пропатчить их, а затем заменить исходные.
# Как скомпилировать
Для компиляции инструмента рекомендуется использовать Visual Studio или совместимый компилятор.
Если вы используете VS, откройте `x64 Native Tools Command Prompt for VS`, перейдите в корневой каталог проекта и скомпилируйте с помощью `compile.bat`:```
C:\PhantomCtx>.\compile.bat
[INFO] Created output directory: x64
[INFO] Compiling PhantomCtx...
main.c
utils.c
recon.c
actctx.c
c_runtime.c
dynamic_resolution.c
process_utils.c
spawn.c
runtime.c
Generating Code...
[SUCCESSFUL] Build successful: x64\PhantomCtx.exe
Инструмент спроектирован с модульной архитектурой, чтобы упростить разработку, предоставляя оператору четкий пошаговый рабочий процесс.
Каждый модуль выполняет конкретную роль в рамках рабочего процесса эксплуатации.
Пожалуйста, уделите время на ознакомление с назначением каждого модуля, чтобы полностью использовать возможности инструмента!!!
Атака может быть выполнена либо на процесс, который будет запущен (рекомендуется), либо на уже работающий процесс. Инструмент предназначен для работы с обоими сценариями.```c C:\PhantomCtx\x64>.\PhantomCtx.exe
+----------------------------------+
| PhantomCtx v1.0 |
+----------------------------------+
Usage: PhantomCtx.exe -m [MODE] [OPTIONS]
Modes: -m recon Displays information about the Activation Context DLL redirections of a running process or one to be spawned.
-m spawn Perform Activation Context Hijacking using an on-disk executable
(preferably a signed binary for OPSEC purposes).