> Windows Syscalls
ntoskrnl.exeT1542.001T1014T1490

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

NameTypeDirDescription
IdULONGinIdentifiant attribué par le firmware du pilote à supprimer (valeur précédemment retournée par NtAddDriverEntry).

IDs de syscalls par version de Windows

Version de WindowsID de syscallBuild
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

Module noyau

ntoskrnl.exeNtDeleteDriverEntry

APIs liées

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

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 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),
    );
}

Mappings MITRE ATT&CK

Last verified: 2026-05-20