NtDeleteDriverEntry
Supprime une EFI_DRIVER_ENTRY enregistrée par ID, en effaçant la variable NVRAM UEFI Driver#### correspondante.
Prototype
NTSTATUS NtDeleteDriverEntry( ULONG Id );
Arguments
| Name | Type | Dir | Description |
|---|---|---|---|
| Id | ULONG | in | Identifiant attribué par le firmware du pilote à supprimer (valeur précédemment retournée par NtAddDriverEntry). |
IDs de syscalls par version de Windows
| Version de Windows | ID de syscall | Build |
|---|---|---|
| Win10 1507 | 0xC3 | win10-1507 |
| Win10 1607 | 0xC6 | win10-1607 |
| Win10 1703 | 0xC9 | win10-1703 |
| Win10 1709 | 0xCA | win10-1709 |
| Win10 1803 | 0xCB | win10-1803 |
| Win10 1809 | 0xCC | win10-1809 |
| Win10 1903 | 0xCD | win10-1903 |
| Win10 1909 | 0xCD | win10-1909 |
| Win10 2004 | 0xD1 | win10-2004 |
| Win10 20H2 | 0xD1 | win10-20h2 |
| Win10 21H1 | 0xD1 | win10-21h1 |
| Win10 21H2 | 0xD2 | win10-21h2 |
| Win10 22H2 | 0xD2 | win10-22h2 |
| Win11 21H2 | 0xD7 | win11-21h2 |
| Win11 22H2 | 0xD8 | win11-22h2 |
| Win11 23H2 | 0xD8 | win11-23h2 |
| Win11 24H2 | 0xDA | win11-24h2 |
| Server 2016 | 0xC6 | winserver-2016 |
| Server 2019 | 0xCC | winserver-2019 |
| Server 2022 | 0xD6 | winserver-2022 |
| Server 2025 | 0xDA | winserver-2025 |
Module noyau
APIs liées
Stub du syscall
4C 8B D1 mov r10, rcx B8 DA 00 00 00 mov eax, 0xDA F6 04 25 08 03 FE 7F 01 test byte ptr [0x7FFE0308], 1 75 03 jne short +3 0F 05 syscall C3 ret CD 2E int 2Eh C3 ret
Notes non documentées
Syscall à un seul argument. Sur UEFI, le noyau émet un `EFI_SET_VARIABLE` avec `DataSize = 0` sur la variable NVRAM `Driver####` correspondante, sémantique de suppression définie par le firmware. SeSystemEnvironmentPrivilege requis. Le slot DriverOrder correspondant doit être nettoyé séparément via NtSetSystemEnvironmentValueEx, sinon il continuera à référencer une variable vide.
Usage courant par les malwares
Deux abus complémentaires. (1) **Nettoyage** : après qu'un payload DXE a flashé sa seconde étape en flash SPI ou dans un blob NVRAM caché, l'attaquant supprime la DRIVER_ENTRY de bootstrap visible afin que les `bcdedit /enum FIRMWARE` côté défenseur et les scans CHIPSEC ne montrent plus d'entrée anormale — l'implant vit entièrement dans le firmware. (2) **Sabotage** : un ransomware peut supprimer les entrées de pilotes OEM recovery/diagnostic (pilotes DXE de mise à jour BIOS du fournisseur) pour rendre inopérant le chemin de mise à jour firmware que la victime utiliserait pour restaurer la plateforme, en complément des wipers MBR/GPT.
Opportunités de détection
ETW Microsoft-Windows-Kernel-Boot journalise la suppression. L'heuristique à forte valeur est la corrélation sur un parc : si un seul hôte a soudain *moins* de DRIVER_ENTRY que ses pairs matériellement identiques dans votre CMDB, ce delta est suspect. `tools.uefi.uefivar_fuzz`/`platform.smm_dma` de CHIPSEC et la baseline d'Eclypsium peuvent signaler l'absence d'entrées pilote OEM attendues. Auditer 4673 (SeSystemEnvironmentPrivilege) sur l'hôte où la suppression a eu lieu pour épingler le processus parent.
Exemples de syscalls directs
asmx64 direct stub (Win11 24H2, SSN 0xDA)
NtDeleteDriverEntry PROC
mov r10, rcx ; ULONG Id
mov eax, 0DAh ; Win11 24H2
syscall
ret
NtDeleteDriverEntry ENDPcPost-flash cleanup pattern
// Conceptual: after the DXE driver has executed once and written its persistent
// payload into SPI/NVRAM, remove the visible bootstrap entry.
extern NTSTATUS NTAPI NtDeleteDriverEntry(ULONG);
NTSTATUS hide_tracks(ULONG bootstrap_id) {
NTSTATUS s = NtDeleteDriverEntry(bootstrap_id);
// Caller must also rewrite DriverOrder via NtSetSystemEnvironmentValueEx.
return s;
}rustNaked stub
use std::arch::asm;
#[unsafe(naked)]
unsafe extern "system" fn nt_delete_driver_entry(_id: u32) -> i32 {
asm!(
"mov r10, rcx",
"mov eax, 0xDA", // Win11 24H2
"syscall",
"ret",
options(noreturn),
);
}Mappings MITRE ATT&CK
Last verified: 2026-05-20