NtDeleteDriverEntry
Entfernt einen registrierten EFI_DRIVER_ENTRY anhand der ID und löscht die zugehörige UEFI-Driver####-NVRAM-Variable.
Prototyp
NTSTATUS NtDeleteDriverEntry( ULONG Id );
Argumente
| Name | Type | Dir | Description |
|---|---|---|---|
| Id | ULONG | in | Von der Firmware vergebene Kennung des zu entfernenden Treibers (Wert, den NtAddDriverEntry zuvor zurückgegeben hat). |
Syscall-IDs pro Windows-Version
| Windows-Version | Syscall-ID | 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 |
Kernel-Modul
Verwandte APIs
Syscall-Stub
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
Undokumentierte Hinweise
Syscall mit nur einem Argument. Auf UEFI setzt der Kernel `EFI_SET_VARIABLE` mit `DataSize = 0` gegen die passende `Driver####`-NVRAM-Variable ab — die firmwaredefinierte Löschsemantik. SeSystemEnvironmentPrivilege erforderlich. Der zugehörige DriverOrder-Slot muss separat über NtSetSystemEnvironmentValueEx bereinigt werden, sonst verweist er weiter auf eine leere Variable.
Häufige Malware-Nutzung
Zwei komplementäre Missbräuche. (1) **Cleanup**: nachdem ein DXE-Payload seine zweite Stufe in SPI-Flash oder einen versteckten NVRAM-Blob geflasht hat, löscht der Angreifer den sichtbaren Bootstrap-DRIVER_ENTRY, sodass verteidigerseitige `bcdedit /enum FIRMWARE`-Aufrufe und CHIPSEC-Scans keinen anomalen Eintrag mehr zeigen — das Implant lebt vollständig in der Firmware. (2) **Sabotage**: Ransomware kann OEM-Recovery-/Diagnose-Treibereinträge (Vendor-BIOS-Update-DXE-Treiber) löschen, um den Firmware-Update-Pfad zu zerstören, den das Opfer zur Plattformwiederherstellung nutzen würde — ergänzend zu MBR/GPT-Wipern.
Erkennungsmöglichkeiten
ETW Microsoft-Windows-Kernel-Boot loggt die Löschung. Hochwertige Heuristik ist die flotteweite Korrelation: hat ein einzelner Host plötzlich *weniger* DRIVER_ENTRYs als seine hardwareidentischen Peers in der CMDB, ist das Delta verdächtig. CHIPSECs `tools.uefi.uefivar_fuzz`/`platform.smm_dma` und Eclypsiums Baseline können das Fehlen erwarteter OEM-Treibereinträge melden. Audit 4673 (SeSystemEnvironmentPrivilege) auf dem Host der Löschung gibt den Parent-Prozess preis.
Direkte Syscall-Beispiele
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),
);
}MITRE ATT&CK-Mappings
Last verified: 2026-05-20