
Desativar PatchGuard e Driver Signature Enforcement na inicialização
EfiGuard é um bootkit portátil x64 UEFI que modifica o gerenciador de inicialização, o carregador de inicialização e o kernel do Windows durante a inicialização para desabilitar o PatchGuard e a Imposição de Assinatura de Driver (DSE).
Se você está apenas procurando testar o EfiGuard, pule para Uso.
Atualmente suporta todas as versões compatíveis com EFI do Windows x64 já lançadas, do Vista SP1 ao Windows 11.
Fácil de usar: pode ser inicializado a partir de um pendrive ou da partição EFI do Windows através de um carregador que automaticamente encontra e inicializa o Windows. O driver também pode ser carregado e configurado manualmente usando o shell UEFI ou o carregador.
Faz uso extensivo da biblioteca desmontadora Zydis para decodificação rápida de instruções em tempo de execução, suportando análises mais robustas do que o possível com correspondência de assinaturas, que frequentemente exige alterações com novas atualizações do sistema operacional.
Funciona passivamente: o driver não carrega nem inicia o gerenciador de inicialização do Windows. Em vez disso, age sobre um carregamento de bootmgfw.efi pelo gerenciador de inicialização do firmware através do menu de seleção de inicialização ou de um aplicativo EFI como o carregador. Se um sistema operacional não Windows for inicializado, o driver será descarregado automaticamente.
Suporta modificação em quatro estágios para quando bootmgfw.efi inicia bootmgr.efi em vez de winload.efi. Isso ocorre quando um arquivo WIM é carregado para inicializar o WinPE, a Configuração do Windows ou o modo de Recuperação do Windows.
Recuperação elegante: em caso de falha na modificação, o driver exibirá informações de erro e solicitará a continuação da inicialização ou a reinicialização pressionando ESC. Isso é verdade até mesmo no estágio final da modificação do kernel, porque o último estágio de modificação ocorre antes de ExitBootServices ser chamado. Muitos bootkits UEFI do Windows interceptam OslArchTransferToKernel que, embora seja fácil de encontrar por correspondência de padrões, é uma função que executa em modo protegido após ExitBootServices. Isso significa que nenhum serviço de inicialização está disponível para informar ao usuário que algo deu errado.

Falha de modificação simulada com informações de erro
Depurável: pode enviar mensagens para um depurador de kernel e para a tela (embora em buffer) durante o estágio de modificação do kernel, e para uma porta serial ou sem buffer para a tela durante os estágios de modificação do gerenciador de inicialização e do carregador de inicialização. Se o driver for compilado com informações de depuração PDB, é possível carregar os símbolos de depuração em qualquer ponto após a inicialização do HAL especificando a base virtual do driver DXE e depurando-o como faria com um driver NT normal.
Burlas de DSE: disponíveis como uma desativação de DSE direta no estilo UPGDSED na inicialização ou como um gancho no serviço de tempo de execução EFI SetVariable(). Este último serve como uma backdoor arbitrária de leitura/gravação em modo kernel que pode ser chamada do Windows usando NtSetSystemEnvironmentValueEx e permite definir g_CiEnabled/g_CiOptions para o valor desejado. Um pequeno aplicativo no estilo DSEFix chamado EfiDSEFix.exe é fornecido para fazer isso. Também é possível deixar o DSE ativado e desabilitar apenas o PatchGuard. O carregador usará o método de gancho SetVariable por padrão, devido ao fato de que alguns programas anti-cheat e antivírus não entendem a diferença entre cheats ou malware e drivers autoassinados em geral e visam o fix do UPGDSED.
Suporta kernels e carregadores de inicialização modificados em disco ao modificar ImgpValidateImageHash em cada estágio, bem como ImgpFilterValidationFailure, que pode denunciar silenciosamente algumas classes de violações a um TPM ou ao arquivo de log SI.
Permite que o Secure Boot funcione com Windows 7 (não é piada!). O Windows 7 em si é alheio ao Secure Boot, pois não o suporta, ou (oficialmente) nem mesmo inicializar sem CSM. Isso é útil para pessoas que desejam usar o Windows 7 em um dispositivo bloqueado que exige Secure Boot WHQL. Entrada da wiki sobre como fazer isso funcionar aqui.

WinObjEx64 no Windows 7 com Secure Boot ativado
SetVariable causará um bugcheck SECURE_KERNEL_ERROR se for usado para escrever em g_CiOptions.Há duas maneiras de usar o EfiGuard: inicializando o aplicativo carregador, que carregará o driver e iniciará o Windows para você, ou instalando o driver como uma entrada de driver UEFI para que seja carregado automaticamente pelo firmware.
Instalar o driver pode ser preferível em algumas configurações avançadas, como ao fazer multi-boot, mas o carregador é mais fácil de usar e deve funcionar bem em todas as configurações. Veja a tabela abaixo para as diferenças mais importantes entre os dois métodos. Se não tiver certeza, escolha o aplicativo carregador.
| Localização | Instalação | Ignorável? | Qual SO é inicializado? | |
|---|---|---|---|---|
| Entrada de Driver UEFI | Deve estar na ESP | Via Shell UEFI | ❌ | O mesmo de antes |
| Carregador | Em qualquer lugar | Não é necessário | ✔️ | Windows |
Comparação entre carregador e entrada de driver UEFI
EFI/Boot/Loader.efi para bootx64.efi.X:, os caminhos para os dois arquivos devem ser agora X:/EFI/Boot/{bootx64|EfiGuardDxe}.efiSetVariable (o padrão), execute EfiDSEFix.exe -d em um prompt de comando como Administrador após a inicialização para desabilitar o DSE, ou execute EfiDSEFix.exe para ver a lista completa de opções.