NtModifyDriverEntry
Überschreibt einen vorhandenen EFI_DRIVER_ENTRY anhand seiner ID und schreibt die UEFI-Driver####-NVRAM-Variable an Ort und Stelle neu.
Prototyp
NTSTATUS NtModifyDriverEntry( PEFI_DRIVER_ENTRY DriverEntry );
Argumente
| Name | Type | Dir | Description |
|---|---|---|---|
| DriverEntry | PEFI_DRIVER_ENTRY | in | Zeiger auf einen EFI_DRIVER_ENTRY, dessen `Id`-Feld den zu überschreibenden Eintrag auswählt; der Rest der Struktur ersetzt den aktuellen Inhalt. |
Syscall-IDs pro Windows-Version
| Windows-Version | Syscall-ID | Build |
|---|---|---|
| Win10 1507 | 0x103 | win10-1507 |
| Win10 1607 | 0x108 | win10-1607 |
| Win10 1703 | 0x10C | win10-1703 |
| Win10 1709 | 0x10D | win10-1709 |
| Win10 1803 | 0x10F | win10-1803 |
| Win10 1809 | 0x110 | win10-1809 |
| Win10 1903 | 0x111 | win10-1903 |
| Win10 1909 | 0x111 | win10-1909 |
| Win10 2004 | 0x116 | win10-2004 |
| Win10 20H2 | 0x116 | win10-20h2 |
| Win10 21H1 | 0x116 | win10-21h1 |
| Win10 21H2 | 0x117 | win10-21h2 |
| Win10 22H2 | 0x117 | win10-22h2 |
| Win11 21H2 | 0x11D | win11-21h2 |
| Win11 22H2 | 0x11E | win11-22h2 |
| Win11 23H2 | 0x11E | win11-23h2 |
| Win11 24H2 | 0x120 | win11-24h2 |
| Server 2016 | 0x108 | winserver-2016 |
| Server 2019 | 0x110 | winserver-2019 |
| Server 2022 | 0x11C | winserver-2022 |
| Server 2025 | 0x120 | winserver-2025 |
Kernel-Modul
Verwandte APIs
Syscall-Stub
4C 8B D1 mov r10, rcx B8 20 01 00 00 mov eax, 0x120 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
Pendant zu NtModifyBootEntry, jedoch für den UEFI-`Driver####`-Namespace. Die ID ist der Primärschlüssel innerhalb der EFI_DRIVER_ENTRY; der Kernel löst sie auf, findet die zugehörige Firmware-Variable und schreibt sie in einem einzigen atomaren SetVariable-Aufruf neu. SeSystemEnvironmentPrivilege ist Pflicht.
Häufige Malware-Nutzung
Wird genutzt, wenn bereits ein legitimer OEM-DXE-Treiber für Diagnose oder Firmware-Update in `DriverOrder` existiert. Statt einen neuen (verdächtigen) Eintrag zu registrieren, patcht Malware den `DriverFilePath` des bestehenden Eintrags, sodass er auf ein vom Angreifer kontrolliertes `.efi`-Binary auf der ESP zeigt, und erbt damit den OEM-Slot in DriverOrder samt plausiblem FriendlyName. Diese Technik ist in den LoJax-/MosaicRegressor-Analysen dokumentiert, wo APT28 die bestehende Firmware-Infrastruktur ausnutzte, statt einen neuen Eintrag zu schnitzen. Verteidiger, die nur unbekannte DRIVER_ENTRY-*Hinzufügungen* suchen, verpassen die Mutation.
Erkennungsmöglichkeiten
Sowohl Modifikation als auch Hinzufügung erscheinen in ETW Microsoft-Windows-Kernel-Boot. Diagnostisches Signal ist hier die **Datei-Inhalts-Drift**: die registrierten `Driver####`-Pfade lassen sich enumerieren und hashen; ein veränderter On-Disk-Hash eines zuvor bekannten DXE-Binaries (ohne entsprechendes signiertes Firmware-Update des OEM) ist starkes Indiz für einen `DriverFilePath`-Hijack. Eclypsium, CHIPSEC und das Tooling von Binarly baselinen DXE-Treiber-Hashes; Microsoft Defender for Endpoint zeigt UEFI-Treiber-Telemetrie in den „Boot driver and firmware"-Berichten.
Direkte Syscall-Beispiele
asmx64 direct stub (Win11 24H2, SSN 0x120)
NtModifyDriverEntry PROC
mov r10, rcx ; PEFI_DRIVER_ENTRY (Id inside struct)
mov eax, 0120h ; Win11 24H2
syscall
ret
NtModifyDriverEntry ENDPcRedirect an OEM driver entry to a rogue ESP path
// Defensive analysis: shows the shape of what LoJax-style attackers do.
NTSTATUS hijack_driver(ULONG id, const wchar_t* shim) {
BYTE buf[1024] = {0};
PEFI_DRIVER_ENTRY de = (PEFI_DRIVER_ENTRY)buf;
de->Version = 1;
de->Length = sizeof(buf);
de->Id = id; // existing OEM diagnostic driver
de->Attributes = LOAD_OPTION_ACTIVE;
de->BootFilePathOffset = FIELD_OFFSET(EFI_DRIVER_ENTRY, OsOptions);
// populate FILE_PATH(shim) into buf[BootFilePathOffset..] (omitted)
return NtModifyDriverEntry(de);
}rustNaked stub
use std::arch::asm;
#[unsafe(naked)]
unsafe extern "system" fn nt_modify_driver_entry(_entry: *mut u8) -> i32 {
asm!(
"mov r10, rcx",
"mov eax, 0x120", // Win11 24H2
"syscall",
"ret",
options(noreturn),
);
}MITRE ATT&CK-Mappings
Last verified: 2026-05-20