
Драйвер режима ядра Windows для обнаружения в реальном времени техник внедрения процессов, включая внедрение шелл-кода, DLL и рефлективное внедрение, с перехватом системных вызовов (syscall hooking) и обнаружением аномалий.
FalconEye — это программное обеспечение для обнаружения конечных точек Windows для внедрения процессов в реальном времени. Это драйвер режима ядра, предназначенный для обнаружения внедрения процессов по мере их выполнения (в реальном времени). Поскольку FalconEye работает в режиме ядра, он обеспечивает более сильную и надежную защиту от методов внедрения процессов, которые пытаются обойти различные перехватчики пользовательского режима.
Вы можете ознакомиться с нашей презентацией на 2021 Blackhat ASIA Arsenal и слайдами.
В таблице ниже показаны статус реализации и логика обнаружения различных методов внедрения процессов. WPM означает WriteProcessMemory. Для тестирования обнаружения можно обратиться к разделу ссылок.
| Техника | Статус | Детекция | Используемый POC |
|---|---|---|---|
| Atombombing | ✓ | Перехват QueueUserAPC и поиск функций семейства GlobalGetAtom | Pinjectra |
| Instrumentation callback injection | ✓ | Обнаружение создания нового потока из плавающего кода | https://github.com/antonioCoco/Mapping-Injection |
| Reflective DLL Injection | ✓ | Обнаружение создания нового потока из плавающего кода и записи PE-заголовка в жертву | MInjector |
| PROPagate | ✓ | Перехват SetProp для получения адреса записываемого свойства и соотнесение с предыдущими вызовами WPM для получения адреса плавающего кода | Pinjectra |
| Process Hollowing | ✓ | Обнаружено по записи PE-заголовка в память целевого процесса | MInjector |
| CreateRemoteThread with LoadLibrary | ✓ | Новый поток с начальным адресом, указывающим на LoadLibrary. Версия MInjector также записывает путь к DLL через WPM, что также обнаруживается | MInjector, Pinjectra |
| CreateRemoteThread with MapViewOfFile | ✓ | Обнаружение создания нового потока из плавающего кода | Pinjectra |
| Suspend-Inject-Resume | ✓ | Обнаружение создания нового потока из плавающего кода (MInjector). Запись пути к DLL через WPM (MInjector). Обнаружение установки контекста на ранее приостановленный поток (Pinjectra) | MInjector, Pinjectra |
| QueueUserAPC | ✓ | Путь к DLL записывается через WPM | MInjector |
| QueueUserAPC with memset (Stackbombing) | ✓ | Перехват QueueUserAPC и поиск memset | Pinjectra |
| SetWindowLong (Extra window memory injection) | ✓ | Перехват SetWindowLong для получения адреса записываемого указателя на функцию и соотнесение с предыдущими вызовами WPM для получения адреса плавающего кода | Pinjectra |
| Unmap + Overwrite | ✓ | Предупреждение, если процесс атакующего отображает ntdll из жертвы | Pinjectra |
| Kernel Ctrl Table | ✓ | Обнаружение перезаписи поля KernelCallbackTable в PEB жертвы через WPM | https://github.com/odzhan/injection/blob/master/kct |
| USERDATA |

ПРИМЕЧАНИЕ: Наш фокус был на обнаружении, а не на создании производительного движка. Мы продолжим эти усилия после презентации на BlackHat.
.
├── src
│ ├── FalconEye ---------------------------# FalconEye пользовательское и ядерное пространство
│ └── libinfinityhook ---------------------# Реализация ядерных хуков
├── 2021BHASIA_FalconEye.pdf
└── README.md
BCDEDIT /set nointegritychecks ONAtombombing: Brand new code injection for windows, 2016
Propagate - a new code injection trick, 2017
Windows process injection: Extra window bytes, 2018
Pavel Asinovsky. Diving into zberp's unconventional process injection technique, 2016
Rotem Kerner. Ctrl-inject, 2018
Windows process injection: Consolewindowclass, 2018
Windows process injection: Windows notication facility, 2018
A paradox: Writing to another process without openning it nor actually writing to it, 2007
Windows process injection: Service control handler, 2018
FalconEye предоставляется вам по лицензии с открытым исходным кодом Apache 2.0.
| ✓ |
| Проверить, находится ли целевой адрес WPM в диапазоне conhost.exe. Если да, проверить, совпадают ли соответствующие указатели функций из conhost с ранее сохраненным адресом WPM |
| https://github.com/odzhan/injection/blob/master/conhost |
| Ctrl-inject | ✓ | Обнаружение WPM в диапазоне KernelBase.dll жертвы | Pinjectra |
| ALPC Callback | ✓ | Извлечение PID жертвы из вызовов NtConnectPort к порту ALPC. Для пары атакующий-жертва проверить предыдущие вызовы WPM и применить обнаружение плавающего кода | Pinjectra |
| WNF Callback | ✓ | WPM с последующим вызовом UpdateWNFStateData | https://github.com/odzhan/injection/tree/master/wnf |
| SetWindowsHook | ✓ | Сохранить пути модулей, зарегистрированных в хуке NtUserSetWindowsHookEx. Позже, когда модуль, соответствующий этому пути, загружается в другом процессе, генерировать предупреждение | MInjector |
| GhostWriting | ✓ | Обнаружение установки контекста (вызов NtSetContextThread) на ранее приостановленный поток | Pinjectra |
| Service Control | ✓ | WPM перезаписывает Service IDE процесса (службы) | https://github.com/odzhan/injection/tree/master/svcctrl |
| Shellcode injection | ✓ | Новый поток запущен из плавающего кода. Путь к DLL записывается через WPM | MInjector |
| Image Mapping | ✓ | Поток запущен из плавающего кода. PE-заголовок записывается через WPM. Путь к DLL записывается через WPM | MInjector |
| Thread Reuse | ✓ | Поток запущен из плавающего кода. Путь к DLL записывается через WPM | MInjector |