> Windows Syscalls
ntoskrnl.exeT1542.001T1014T1490

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

NameTypeDirDescription
IdULONGinVon der Firmware vergebene Kennung des zu entfernenden Treibers (Wert, den NtAddDriverEntry zuvor zurückgegeben hat).

Syscall-IDs pro Windows-Version

Windows-VersionSyscall-IDBuild
Win10 15070xC3win10-1507
Win10 16070xC6win10-1607
Win10 17030xC9win10-1703
Win10 17090xCAwin10-1709
Win10 18030xCBwin10-1803
Win10 18090xCCwin10-1809
Win10 19030xCDwin10-1903
Win10 19090xCDwin10-1909
Win10 20040xD1win10-2004
Win10 20H20xD1win10-20h2
Win10 21H10xD1win10-21h1
Win10 21H20xD2win10-21h2
Win10 22H20xD2win10-22h2
Win11 21H20xD7win11-21h2
Win11 22H20xD8win11-22h2
Win11 23H20xD8win11-23h2
Win11 24H20xDAwin11-24h2
Server 20160xC6winserver-2016
Server 20190xCCwinserver-2019
Server 20220xD6winserver-2022
Server 20250xDAwinserver-2025

Kernel-Modul

ntoskrnl.exeNtDeleteDriverEntry

Verwandte APIs

SetFirmwareEnvironmentVariableW (Driver#### with size 0)NtAddDriverEntryNtModifyDriverEntryNtEnumerateDriverEntriesNtSetSystemEnvironmentValueEx (DriverOrder)

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 firmware­definierte 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.

Erkennungs­mö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 ENDP

cPost-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