
Ricerca di tesi magistrale su CVE-2024-51324 (BYOVD). Exploit avanzato con 4 modalità operative (SCANNER, LOADER, KILLER, CLEANUP), verifica del driver SHA-256 e documentazione accademica completa. Il pezzo del portfolio copre la sicurezza dei driver del kernel Windows, il reverse engineering di IOCTL e lo sfruttamento di Bring Your Own Vulnerable Driver.
Bring Your Own Vulnerable Driver (BYOVD) — Antivirus Baidu
BdApiUtil64.sys
Tre primitive del kernel non documentate: terminazione dei processi, cancellazione arbitraria di file e cancellazione di file in uso con bypass diSectionObjectPointer
Affetto: Antivirus Baidu v5.2.3.116083 (BdApiUtil64.sys)
Caricamento del driver vulnerabile nel kernel (modalità LOADER)
Questo repository contiene la mia ricerca per la Tesi Magistrale su CVE-2024-51324, una vulnerabilità Bring Your Own Vulnerable Driver (BYOVD) nel driver del kernel BdApiUtil64.sys dell'Antivirus Baidu.
Il record NVD assegna un punteggio base CVSS v3.1 di 3.8 (Basso) con vettore AV:N/AC:L/PR:H/UI:N/S:U/C:L/I:L/A:N e CWE-269 (Gestione impropria dei privilegi). Questo punteggio non riflette la realtà dell'attacco locale documentata in questa ricerca: una volta che il driver viene caricato da un amministratore (un passo unico ottenibile tramite ingegneria sociale o qualsiasi escalation di privilegi locale), qualsiasi processo successivo — inclusi processi in sandbox o di utente standard — può inviare IOCTL senza ulteriori controlli di privilegio. Un punteggio CVSS v3.1 valutato dal ricercatore di 7.8 (Alto) con vettore AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H cattura in modo più accurato la realtà dello sfruttamento post-caricamento. Entrambi i punteggi sono discussi nella documentazione tecnica.
Il driver crea l'oggetto dispositivo \Device\BdApiUtil con SecurityDescriptor = NULL, permettendo a qualsiasi processo indipendentemente dal livello di integrità di aprire un handle e inviare IOCTL. L'analisi statica tramite Ghidra 11.0.3 rivela che il meccanismo interno è più significativo di quanto documentato in precedenza: il driver utilizza PsLookupProcessByProcessId + ObOpenObjectByPointer(KernelMode) anziché ZwOpenProcess, bypassando SeAccessCheck completamente. Tre primitive IOCTL sono state pienamente caratterizzate, due delle quali non hanno documentazione pubblica precedente.
| Aspetto | Descrizione |
|---|---|
| Correzione tecnica | ZwOpenProcess è assente dalla tabella di importazione; il meccanismo reale è PsLookupProcessByProcessId + ObOpenObjectByPointer(KernelMode), che bypassa SeAccessCheck incondizionatamente |
| Tre primitive documentate | Terminazione dei processi (0x800024B4), cancellazione arbitraria di file (0x80002648) e cancellazione di file in uso con bypass di SectionObjectPointer (0x8000264C) — le ultime due non hanno documentazione pubblica precedente |
| Quattro modalità operative | LOADER, KILLER, SCANNER e CLEANUP — gestione completa del ciclo di vita |
| Verifica SHA-256 | Hash del driver verificato prima di ogni tentativo di caricamento |
| Test empirico PPL | 10 tentativi per categoria di processo che confermano PPL come unica mitigazione a runtime |
| Analisi forense | Persistenza dell'Event ID 7045 dopo la pulizia; Event ID 1102 come artefatto di cancellazione del log auto-incriminante |
| Regole di rilevamento | Regola Sigma e configurazione Sysmon (Event ID 6 per hash + Event ID 13 per chiave di registro) |
| Rivalutazione CVSS | Discrepanza documentata tra il punteggio ufficiale NVD (3.8 Basso) e la gravità di sfruttamento locale valutata dal ricercatore (7.8 Alto) |
CVE-2024-51324/
├── README.md
├── LICENSE
│
├── drivers/
│ └── BdApiUtil64.sys # Driver (non distribuito)
│
├── exploit/
│ ├── exploit-explanation.md
│ └── byovd_killer.py # Exploit principale — 4 modalità operative
│
└── 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 completo con Ghidra, tre primitive, test 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
| Modalità | Comando | Privilegi | Descrizione |
|---|---|---|---|
| SCANNER | --scan | Qualsiasi utente | Informazioni sullo stato del sistema e del driver |
| LOADER | --load | Amministratore | Carica il driver tramite creazione di servizio kernel |
| KILLER | --kill / --pid | Qualsiasi utente | Termina i processi tramite IOCTL |
| CLEANUP | --cleanup | Amministratore | Arresta ed elimina il servizio driver |






