
Dissertação de Mestrado sobre CVE-2024-51324 (BYOVD). Exploit avançado com 4 modos operacionais (SCANNER, LOADER, KILLER, CLEANUP), verificação de driver SHA-256 e documentação acadêmica completa. Peça de portfólio que cobre segurança de drivers do kernel do Windows, engenharia reversa de IOCTL e exploração Bring Your Own Vulnerable Driver.
Bring Your Own Vulnerable Driver (BYOVD) — Baidu Antivirus
BdApiUtil64.sys
Três primitivas de kernel não documentadas: término de processo, exclusão arbitrária de arquivos e exclusão de arquivo em uso com bypass deSectionObjectPointer
Afetado: Baidu Antivirus v5.2.3.116083 (BdApiUtil64.sys)
Carregando o driver vulnerável no kernel (modo LOADER)
Este repositório contém minha pesquisa de Tese de Mestrado sobre CVE-2024-51324, uma
vulnerabilidade Bring Your Own Vulnerable Driver (BYOVD) no driver de kernel
BdApiUtil64.sys do Baidu Antivirus.
O registro NVD atribui uma pontuação base CVSS v3.1 de 3.8 (Baixa) com vetor
AV:N/AC:L/PR:H/UI:N/S:U/C:L/I:L/A:N e CWE-269 (Gerenciamento de Privilégio Impropriamente Controlado).
Esta pontuação não reflete a realidade de ataque local documentada nesta pesquisa: uma vez
que o driver é carregado por um administrador (uma etapa única realizável via engenharia
social ou qualquer escalação de privilégio local), qualquer processo subsequente — incluindo
processos em sandbox ou de usuário padrão — pode enviar IOCTLs sem verificações de privilégio
adicionais. Uma pontuação CVSS v3.1 avaliada pelo pesquisador de 7.8 (Alta) com vetor
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H captura com mais precisão a realidade de exploração
pós-carregamento. Ambas as pontuações são discutidas na documentação técnica.
O driver cria o objeto de dispositivo \Device\BdApiUtil com
SecurityDescriptor = NULL, permitindo que qualquer processo, independentemente do nível de
integridade, abra um handle e envie IOCTLs. A análise estática via Ghidra 11.0.3 revela que o
mecanismo interno é mais significativo do que documentado anteriormente: o driver usa
PsLookupProcessByProcessId + ObOpenObjectByPointer(KernelMode) em vez de
ZwOpenProcess, ignorando SeAccessCheck completamente. Três primitivas IOCTL foram
completamente caracterizadas, duas das quais não têm documentação pública prévia.
| Aspecto | Descrição |
|---|---|
| Correção técnica | ZwOpenProcess está ausente da tabela de importação; o mecanismo real é PsLookupProcessByProcessId + ObOpenObjectByPointer(KernelMode), que ignora SeAccessCheck incondicionalmente |
| Três primitivas documentadas | Término de processo (0x800024B4), exclusão arbitrária de arquivos (0x80002648) e exclusão de arquivo em uso com bypass de SectionObjectPointer (0x8000264C) — as duas últimas não têm documentação pública prévia |
| Quatro modos de operação | LOADER, KILLER, SCANNER e CLEANUP — gerenciamento completo do ciclo de vida |
| Verificação SHA-256 | Hash do driver verificado antes de qualquer tentativa de carregamento |
| Teste empírico de PPL | 10 tentativas por categoria de processo confirmando PPL como a única mitigação em tempo de execução |
| Análise forense | Event ID 7045 persistente pós-limpeza; Event ID 1102 como artefato autoincriminatório de limpeza de log |
| Regras de detecção | Regra Sigma e configuração do Sysmon (Event ID 6 por hash + Event ID 13 por chave de registro) |
| Reavaliação CVSS | Discrepância documentada entre a pontuação oficial do NVD (3.8 Baixa) e a gravidade de exploração local avaliada pelo pesquisador (7.8 Alta) |
CVE-2024-51324/
├── README.md
├── LICENSE
│
├── drivers/
│ └── BdApiUtil64.sys # Driver (não distribuído)
│
├── exploit/
│ ├── exploit-explanation.md
│ └── byovd_killer.py # Exploit principal — 4 modos operacionais
│
└── docs/
├── screenshots/
│ ├── 01-byovd-scan.png
│ ├── 02-byovd-scan-target.png
│ ├── 03-byovd-load.png
│ ├── 04-byovd-load-custom.png
│ ├── 05-kill-name.gif
│ ├── 06-kill-pid.gif
│ ├── 07-kill-limit.gif
│ ├── 08-dry-run.gif
│ └── 09-byovd-cleanup.png
│
└── analysis/
├── 01-root-cause.md
├── 02-driver-analysis.md # RE completa em Ghidra, três primitivas, teste PPL
└── 03-timeline.md
BdApiUtil64.sys (SHA-256: 47EC51B5F0EDE1E70BD66F3F0152F9EB536D534565DBB7FCC3A05F542DBE4428)python exploit/byovd_killer.py --scan
python exploit/byovd_killer.py --scan --target lsass.exe
python exploit/byovd_killer.py --load
python exploit/byovd_killer.py --load --driver C:\path\to\BdApiUtil64.sys
python exploit/byovd_killer.py --load --service-name MyService
python exploit/byovd_killer.py --kill notepad.exe
python exploit/byovd_killer.py --pid 1234
python exploit/byovd_killer.py --kill notepad.exe --max-instances 2
python exploit/byovd_killer.py --kill notepad.exe --dry-run
python exploit/byovd_killer.py --cleanup
python exploit/byovd_killer.py --cleanup --service-name MyService
| Modo | Comando | Privilégios | Descrição |
|---|---|---|---|
| SCANNER | --scan | Qualquer usuário | Informações do sistema e status do driver |
| LOADER | --load | Administrador | Carregar driver via criação de serviço de kernel |
| KILLER | --kill / --pid | Qualquer usuário | Finalizar processos via IOCTL |
| CLEANUP | --cleanup | Administrador | Parar e excluir serviço do driver |






