Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
EfiGuard — Disabilita PatchGuard e Driver Signature Enforcement all'avvio | Kitploit
Strumenti/GitHubGitHub/mattiwatti/efiguard
Strumenti DifensiviExploitReverse EngineeringAnalisi di Binari
GitHubmattiwatti/efiguard

EfiGuard

Disabilita PatchGuard e Driver Signature Enforcement all'avvio

Vedi Repository
2.5k4092 mesi faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Panoramica

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.

Caratteristiche

  • 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. bsod

    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. win7_secureboot

    WinObjEx64 su Windows 7 con Avvio Protetto abilitato

Problemi e limitazioni

  • EfiGuard non può disabilitare Hypervisor-enforced Code Integrity (HVCI o HyperGuard) perché HVCI è eseguito a un livello di privilegio superiore. EfiGuard può coesistere con HVCI e disabilita con successo PatchGuard nel kernel normale, ma questo non è utile in pratica perché HVCI intercetterà ciò che PatchGuard faceva in precedenza. Entrambi i tipi di bypass DSE sono resi inutili da HVCI: la patch all'avvio non ha effetto perché il kernel rimanda al kernel sicuro per i controlli di integrità, e l'hook SetVariable causerà un bugcheck SECURE_KERNEL_ERROR se usato per scrivere su g_CiOptions.
  • I kernel checked non sono supportati a causa delle differenze nel codice di inizializzazione di PatchGuard e DSE causate da ottimizzazioni disabilitate e asserzioni aggiunte, oltre a modifiche aggiuntive a PatchGuard nei kernel checked. Questo non dovrebbe essere un problema poiché i kernel checked non sono generalmente utili senza un debugger del kernel collegato, che disabilita PatchGuard.

Utilizzo

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.

PosizioneInstallazioneSaltabile?Quale sistema operativo viene avviato?
Voce driver UEFIDeve essere su ESPTramite Shell UEFI

Confronto tra loader e voce driver UEFI

Avvio del loader

  1. Scarica EfiGuard e rinomina EFI/Boot/Loader.efi in bootx64.efi.
  2. Posiziona i file su un'unità di avvio come una chiavetta USB formattata FAT32 (per macchine fisiche) o un ISO/disco virtuale (per VM). Supponendo l'unità X:, i percorsi per i due file dovrebbero ora essere X:/EFI/Boot/{bootx64|EfiGuardDxe}.efi
  3. Avvia la macchina dall'unità usata al punto 2. La maggior parte dei firmware fornisce un menu di avvio per farlo tramite F8/F10/F11/F12. In caso contrario, dovrai configurare il BIOS per avviare dalla nuova unità.
  4. Windows dovrebbe ora avviarsi e dovresti vedere messaggi di EfiGuard durante l'avvio.
  5. Se hai avviato con l'hook SetVariable (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.

Per farlo, monta l'ESP su X: usando mountvol X: /S e segui i passaggi sopra, ma non rinominare il loader e copia semplicemente entrambi i file in X:/EFI/Boot. Dopodiché, dovrai aggiungere manualmente una voce di avvio UEFI dalla Shell UEFI usando bcfg boot addp 0 Loader.efi "EfiGuard", o in alternativa usando efibootmgr (Linux), EasyUEFI (Windows) o simili.

Installazione del driver

  1. Monta l'ESP su X: usando mountvol X: /S.
  2. Copia EfiGuardDxe.efi in X:/EFI/Boot/EfiGuardDxe.efi.
  3. Avvia alla Shell UEFI e aggiungi una voce di driver UEFI: bcfg driver add 0 EfiGuardDxe.efi "EfiGuardDxe".
  4. Windows dovrebbe ora avviarsi e dovresti vedere messaggi di EfiGuard durante l'avvio.
  5. Se hai avviato con l'hook SetVariable (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: a seconda del tuo firmware, potresti dover usare "addp" al punto 3 invece di "add". È noto che VirtualBox richiede questo, e forse anche alcuni firmware di schede madri.

Nota: alcuni firmware molto vecchi o non conformi potrebbero non supportare affatto questo metodo di installazione. Su questi sistemi non avrai altra scelta che usare il loader.

Compilazione

Compilazione di EfiGuardDxe e del loader

EfiGuard richiede EDK2 per essere compilato. Se non hai EDK2 installato, segui prima i passaggi in Getting Started with EDK2 poiché il sistema di compilazione EDK2 è piuttosto complesso da configurare. Questa sezione presuppone che tu abbia una directory workspace a cui punta la variabile d'ambiente WORKSPACE, con una copia di EDK2 nella directory workspace/edk2. I compilatori supportati sono MSVC, Clang, GCC e ICC.

  1. Clona il repository EfiGuard in workspace/edk2/EfiGuardPkg.
  2. Apri un prompt o una shell che imposti le variabili d'ambiente per EDK2.
  3. Esegui build -a X64 -t VS2019 -p EfiGuardPkg/EfiGuardPkg.dsc -b RELEASE, sostituendo la tua toolchain con VS2019.

Questo produrrà EfiGuardDxe.efi e Loader.efi in workspace/Build/EfiGuard/RELEASE_VS2019/X64.

Compilazione di EfiDSEFix

EfiDSEFix richiede Visual Studio per essere compilato.

  1. Apri EfiGuard.sln e compila la soluzione.

Il binario di output EfiDSEFix.exe si troverà in Application/EfiDSEFix/bin.

La soluzione Visual Studio include anche progetti per EfiGuardDxe.efi e Loader.efi che possono essere utilizzati con VisualUefi, ma questi progetti non vengono compilati per impostazione predefinita poiché non linkeranno senza codice aggiuntivo e l'output di compilazione sarà inferiore (più grande) rispetto a quello prodotto da EDK2. Loader.efi non linkerà affatto a causa della mancanza di UefiBootManagerLib in VisualUefi. Questi file di progetto sono quindi destinati solo come aiuto allo sviluppo e i file EFI dovrebbero comunque essere compilati con EDK2. Per configurare VisualUefi per questo scopo, clona il repository in workspace/VisualUefi e apri EfiGuard.sln.

Architettura

architecture Sebbene EfiGuard sia un bootkit UEFI, non è nato come tale. EfiGuard era originariamente un patcher su disco eseguito su NT (simile a UPGDSED), inteso a testare la fattibilità di un approccio basato su disassemblatore, invece di utilizzare simboli PDB e firme specifiche per versione. PatchNtoskrnl.c assomiglia ancora molto a questo progetto originale. Solo dopo che questo approccio si è dimostrato vincente, senza necessità di modifiche al codice in oltre un anno di aggiornamenti di Windows, l'UEFI è entrato in gioco come modo per migliorare ulteriormente le capacità e la facilità d'uso.

Alcuni dei vantaggi forniti da un approccio bootkit includono:

  • Nessuna modifica su disco a kernel o bootloader necessaria.
  • Nessuna necessità di modificare l'archivio di configurazione di avvio usando bcdedit.
  • Nessuna necessità di patchare ImgpValidateImageHash (anche se questo è ancora opzionalmente fatto).
  • Ironia della sorte, l'uso di un bootkit consente di abilitare l'avvio protetto, a condizione che tu possieda la Platform Key e sia in grado di aggiungere il tuo certificato personale all'archivio db.

L'incarnazione iniziale di EfiGuard come bootkit è stato un tentativo di far funzionare UEFI-Bootkit di dude719 con le versioni recenti di Windows 10, poiché era diventato datato e non funziona più sulle ultime versioni (come UPGDSED, spesso causato da scansioni di pattern sensibili alla versione). Sebbene alla fine sia riuscito a farlo funzionare, non ero soddisfatto del risultato principalmente a causa della scelta di hookare OslArchTransferToKernel, che come notato sopra viene eseguita in modalità protetta e dopo che ExitBootServices è stata chiamata. Oltre a questo, non ero soddisfatto di poter patchare solo alcune versioni di Windows 10; volevo che il bootkit funzionasse su ogni versione di Windows x64 compatibile con EFI rilasciata fino ad oggi. Per questo motivo, ho riscritto il bootkit da zero con i seguenti obiettivi:

  • Fornire informazioni sulla patch in ogni fase dell'avvio, inclusa la patch del kernel stessa.
  • Supportare tutte le versioni di Windows compatibili con EFI (al momento della scrittura).
  • Consentire l'istanziazione lazy del bootkit e opzionalmente un backdoor del kernel, ottenuto tramite hook della System Table EFI.

Una panoramica generale del flusso di avvio finale di EfiGuard è mostrata nel diagramma sopra. Per gli hook e le patch specifici dei singoli componenti, consulta EfiGuardDxe/PatchXxx.c nei file sorgente. Per l'inizializzazione/scaricamento del driver e gli hook EFI Boot e Runtime Services, consulta EfiGuardDxe.c.

Crediti

  • UPGDSED di hfiref0x e Fyyre
  • Zydis di zyantific
  • Articoli di Uninformed su PatchGuard v1, v2 e v3 di Skywing
  • UEFI-Bootkit di dude719
  • ReactOS

Licenza

EfiGuard è concesso in licenza sotto GPLv3. I file nel sottomodulo EfiGuardDxe/Zydis sono concessi in licenza sotto la licenza MIT.

Scarica lo strumento
❌
Uguale a prima
LoaderOvunqueNon necessaria✔️Windows