
Disabilita PatchGuard e Driver Signature Enforcement all'avvio
EfiGuard è un bootkit UEFI x64 portatile che modifica il boot manager, il boot loader e il kernel di Windows all'avvio per disabilitare PatchGuard e Driver Signature Enforcement (DSE).
Se stai solo cercando di provare EfiGuard, passa a Utilizzo.
Supporta attualmente tutte le versioni di Windows x64 compatibili con EFI mai rilasciate, da Vista SP1 a Windows 11.
Facile da usare: può essere avviato da una chiavetta USB o dalla partizione EFI di Windows tramite un loader che trova e avvia automaticamente Windows. Il driver può anche essere caricato e configurato manualmente usando sia la shell UEFI che il loader.
Fa ampio uso della libreria disassemblatrice Zydis per la decodifica rapida delle istruzioni in runtime, supportando un'analisi più robusta rispetto a quella possibile con il pattern matching, che spesso richiede modifiche con i nuovi aggiornamenti del sistema operativo.
Funziona passivamente: il driver non carica né avvia il boot manager di Windows. Agisce invece sul caricamento di bootmgfw.efi da parte del boot manager del firmware tramite il menu di selezione di avvio o un'applicazione EFI come il loader. Se viene avviato un sistema operativo non Windows, il driver si scaricherà automaticamente.
Supporta la patch a quattro stadi per quando bootmgfw.efi avvia bootmgr.efi invece di winload.efi. Questo accade quando viene caricato un file WIM per avviare WinPE, Configurazione di Windows o la modalità di ripristino di Windows.
Recupero graduale: in caso di fallimento della patch, il driver visualizzerà informazioni sull'errore e richiederà di continuare l'avvio o riavviare premendo ESC. Questo è vero anche fino allo stadio finale della patch del kernel, perché l'ultimo stadio della patch avviene prima che venga chiamata ExitBootServices. Molti bootkit UEFI di Windows hookano OslArchTransferToKernel che, sebbene facile da trovare tramite pattern matching, è una funzione che viene eseguita in modalità protetta dopo ExitBootServices. Ciò significa che non sono disponibili servizi di avvio per informare l'utente che qualcosa è andato storto.

Simulazione di fallimento della patch con informazioni sull'errore
Debuggabile: può inviare messaggi a un debugger del kernel e allo schermo (sebbene bufferizzati) durante la fase di patching del kernel, e a una porta seriale o non bufferizzati allo schermo durante le fasi di patching del boot manager e del boot loader. Se il driver è compilato con informazioni di debug PDB, è possibile caricare i simboli di debug in qualsiasi momento dopo l'inizializzazione di HAL specificando la base virtuale del driver DXE e debugandolo come si farebbe con un normale driver NT.
Bypass DSE: disponibile come disabilitazione DSE diretta all'avvio (stile UPGDSED) o come hook sul servizio EFI runtime SetVariable(). Quest'ultimo funge da backdoor arbitraria in lettura/scrittura in modalità kernel che può essere chiamata da Windows usando NtSetSystemEnvironmentValueEx e permette di impostare g_CiEnabled/g_CiOptions al valore desiderato. Viene fornita una piccola applicazione in stile DSEFix chiamata EfiDSEFix.exe che può essere utilizzata per farlo. È anche possibile lasciare DSE abilitato e disabilitare solo PatchGuard. Il loader utilizzerà il metodo hook SetVariable per impostazione predefinita, poiché alcuni programmi anti-cheat e antivirus non comprendono la differenza tra cheat/malware e driver autofirmati in generale e prendono di mira la fix UPGDSED.
Supporta kernel e boot loader modificati su disco patchando ImgpValidateImageHash in ogni stadio, oltre a ImgpFilterValidationFailure, che potrebbe silenziosamente segnalare alcune classi di violazioni a un TPM o al file di log SI.
Consente l'avvio protetto (Secure Boot) con Windows 7 (non è uno scherzo!). Windows 7 stesso ignora l'avvio protetto poiché non lo supporta, o (ufficialmente: ufficialmente) nemmeno l'avvio senza CSM. Questo è utile per chi vuole usare Windows 7 su un dispositivo bloccato che richiede l'avvio protetto WHQL. Voce della wiki su come farlo funzionare qui.

WinObjEx64 su Windows 7 con Avvio Protetto abilitato
SetVariable causerà un bugcheck SECURE_KERNEL_ERROR se usato per scrivere su g_CiOptions.Ci sono due modi per usare EfiGuard: avviare l'applicazione loader, che caricherà il driver e avvierà Windows per te, oppure installare il driver come voce di driver UEFI in modo che venga caricato automaticamente dal firmware.
Installare il driver può essere preferibile in alcune configurazioni avanzate come quando si avviano più sistemi operativi, ma il loader è il più semplice da usare e dovrebbe funzionare bene in tutte le configurazioni. Vedi la tabella qui sotto per le differenze più importanti tra i due metodi. In caso di dubbio, scegli l'applicazione loader.
| Posizione | Installazione | Saltabile? | Quale sistema operativo viene avviato? | |
|---|---|---|---|---|
| Voce driver UEFI | Deve essere su ESP | Tramite Shell UEFI | ❌ | Uguale a prima |
| Loader | Ovunque | Non necessaria | ✔️ | Windows |
Confronto tra loader e voce driver UEFI
EFI/Boot/Loader.efi in bootx64.efi.X:, i percorsi per i due file dovrebbero ora essere X:/EFI/Boot/{bootx64|EfiGuardDxe}.efiSetVariable (predefinito), esegui EfiDSEFix.exe -d da un prompt dei comandi come Amministratore dopo l'avvio per disabilitare DSE, oppure esegui EfiDSEFix.exe per vedere l'elenco completo delle opzioni.Nota che non hai bisogno di usare un'unità separata per il loader. Se preferisci, puoi installare EfiGuard sull'ESP su cui Windows è già installato. Tuttavia, questo è leggermente più complicato poiché dovrai aggiungere una voce di avvio UEFI per il loader.