Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
EfiGuard — Desativar PatchGuard e Driver Signature Enforcement na inicialização | Kitploit
Ferramentas/GitHubGitHub/mattiwatti/efiguard
Ferramentas DefensivasExploraçãoEngenharia ReversaAnálise de Binários
GitHubmattiwatti/efiguard

EfiGuard

Desativar PatchGuard e Driver Signature Enforcement na inicialização

Ver Repositório
2.5k409há 2 mesesRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Visão Geral

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.

Funcionalidades

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

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

    WinObjEx64 no Windows 7 com Secure Boot ativado

Problemas e limitações

  • O EfiGuard não pode desabilitar a Integridade de Código Imposta pelo Hypervisor (HVCI ou HyperGuard) devido ao HVCI executar em um nível de privilégio maior. O EfiGuard pode coexistir com o HVCI e até mesmo desabilitar com sucesso o PatchGuard no kernel normal, mas isso não é útil na prática porque o HVCI pegará o que o PatchGuard fazia anteriormente. Ambos os tipos de bypass de DSE são tornados inúteis pelo HVCI: a modificação na inicialização não tem efeito porque o kernel delega ao kernel seguro as verificações de integridade, e o gancho SetVariable causará um bugcheck SECURE_KERNEL_ERROR se for usado para escrever em g_CiOptions.
  • Kernels checked não são suportados devido às diferenças no código de inicialização do PatchGuard e DSE causadas por otimizações desabilitadas e asserts adicionados, bem como alterações adicionais no PatchGuard em kernels checked. Isso não deve ser um problema, pois kernels checked geralmente não são úteis sem um depurador de kernel anexado, o que desabilita o PatchGuard.

Uso

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çãoInstalaçãoIgnorável?Qual SO é inicializado?
Entrada de Driver UEFIDeve estar na ESPVia Shell UEFI

Comparação entre carregador e entrada de driver UEFI

Inicializando o carregador

  1. Baixe o EfiGuard e renomeie EFI/Boot/Loader.efi para bootx64.efi.
  2. Coloque os arquivos em uma unidade inicializável, como um pendrive formatado em FAT32 (para máquinas físicas) ou um ISO/disco virtual (para VMs). Supondo a unidade X:, os caminhos para os dois arquivos devem ser agora X:/EFI/Boot/{bootx64|EfiGuardDxe}.efi
  3. Inicialize a máquina a partir da unidade que você usou no passo 2. A maioria dos firmwares fornece um menu de inicialização para isso via F8/F10/F11/F12. Caso contrário, você precisará configurar a BIOS para inicializar a partir da nova unidade.
  4. O Windows deve inicializar agora, e você deve ver mensagens do EfiGuard durante a inicialização.
  5. Se você inicializou com o gancho SetVariable (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.

Observe que você não precisa usar uma unidade separada para o carregador. Se preferir, você pode instalar o EfiGuard na ESP onde o Windows já está instalado. No entanto, isso é um pouco mais complicado, pois você precisará adicionar uma entrada de inicialização UEFI para o carregador.

Para fazer isso, monte a ESP em X: usando mountvol X: /S e siga os passos acima, mas não renomeie o carregador e simplesmente copie ambos os arquivos para X:/EFI/Boot. Depois disso, você precisará adicionar manualmente uma entrada de inicialização UEFI a partir do Shell UEFI usando bcfg boot addp 0 Loader.efi "EfiGuard", ou alternativamente usando efibootmgr (Linux), EasyUEFI (Windows), ou similar.

Instalando o driver

  1. Monte a ESP em X: usando mountvol X: /S.
  2. Copie EfiGuardDxe.efi para X:/EFI/Boot/EfiGuardDxe.efi.
  3. Inicialize no Shell UEFI e adicione uma entrada de driver UEFI: bcfg driver add 0 EfiGuardDxe.efi "EfiGuardDxe".
  4. O Windows deve inicializar agora, e você deve ver mensagens do EfiGuard durante a inicialização.
  5. Se você inicializou com o gancho SetVariable (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.

Nota: dependendo do seu firmware, você pode precisar usar "addp" no passo 3 em vez de "add". Sabe-se que o VirtualBox exige isso, e possivelmente alguns firmwares de placa-mãe também.

Nota: alguns firmwares muito antigos ou não compatíveis podem não suportar este método de instalação. Nesses sistemas, você não terá outra opção senão usar o carregador.

Compilação

Compilando o EfiGuardDxe e o carregador

O EfiGuard requer o EDK2 para compilar. Se você não tiver o EDK2 instalado, siga primeiro os passos em Getting Started with EDK2, pois o sistema de compilação do EDK2 é bastante complexo de configurar. Esta seção pressupõe que você tenha um diretório workspace para o qual sua variável de ambiente WORKSPACE aponta, com uma cópia do EDK2 baixada em workspace/edk2. Os compiladores suportados são MSVC, Clang, GCC e ICC.

  1. Clone o repositório do EfiGuard em workspace/edk2/EfiGuardPkg.
  2. Abra um prompt ou shell que configure as variáveis de ambiente para o EDK2.
  3. Execute build -a X64 -t VS2019 -p EfiGuardPkg/EfiGuardPkg.dsc -b RELEASE, substituindo seu conjunto de ferramentas por VS2019.

Isso produzirá EfiGuardDxe.efi e Loader.efi em workspace/Build/EfiGuard/RELEASE_VS2019/X64.

Compilando o EfiDSEFix

O EfiDSEFix requer o Visual Studio para compilar.

  1. Abra EfiGuard.sln e compile a solução.

O binário de saída EfiDSEFix.exe estará em Application/EfiDSEFix/bin.

A solução do Visual Studio também inclui projetos para EfiGuardDxe.efi e Loader.efi que podem ser usados com VisualUefi, mas esses projetos não são compilados por padrão, pois não serão vinculados sem código adicional, e a saída da compilação será inferior (maior) do que a produzida pelo EDK2. Loader.efi não será vinculado devido à ausência de UefiBootManagerLib no VisualUefi. Esses arquivos de projeto são, portanto, destinados apenas como auxílio ao desenvolvimento, e os arquivos EFI ainda devem ser compilados com o EDK2. Para configurar o VisualUefi para esse fim, clone o repositório em workspace/VisualUefi e abra EfiGuard.sln.

Arquitetura

architecture Embora o EfiGuard seja um bootkit UEFI, ele não começou como um. O EfiGuard era originalmente um modificador em disco executado no NT (semelhante ao UPGDSED), destinado a testar a viabilidade de uma abordagem baseada em desmontador, em vez de usar símbolos PDB e assinaturas específicas de versão. PatchNtoskrnl.c ainda se parece muito com esse design original. Somente depois que essa abordagem se mostrou bem-sucedida, sem necessidade de modificações no código por mais de um ano de atualizações do Windows, o UEFI entrou em cena como uma forma de melhorar ainda mais as capacidades e a facilidade de uso.

Alguns dos benefícios fornecidos por uma abordagem de bootkit incluem:

  • Nenhuma modificação em disco nos kernels ou carregadores de inicialização necessária.
  • Sem necessidade de modificar o armazenamento de configuração de inicialização usando bcdedit.
  • Sem necessidade de modificar ImgpValidateImageHash (embora isso ainda seja feito opcionalmente).
  • Ironicamente, o uso de um bootkit permite ativar o Secure Boot, desde que você possua a Chave de Plataforma e possa adicionar seu certificado pessoal ao armazenamento db.

A primeira encarnação do EfiGuard como bootkit foi uma tentativa de fazer o UEFI-Bootkit do dude719 funcionar com versões recentes do Windows 10, porque ele havia se tornado desatualizado e não funcionava mais nas versões mais recentes (como o UPGDSED, frequentemente causado por varreduras de padrão sensíveis à versão). Embora eu tenha conseguido fazer isso funcionar, fiquei insatisfeito com o resultado, principalmente devido à escolha de interceptar OslArchTransferToKernel, que, como observado acima, executa em modo protegido e após a chamada de ExitBootServices. Além disso, não estava satisfeito em poder modificar apenas algumas versões do Windows 10; queria que o bootkit funcionasse em todas as versões compatíveis com EFI do Windows x64 já lançadas. Por isso, reescrevi o bootkit do zero com os seguintes objetivos:

  • Fornecer informações de modificação em cada estágio da inicialização, incluindo a própria modificação do kernel.
  • Suportar todas as versões do Windows compatíveis com EFI (no momento da escrita).
  • Permitir a instanciação preguiçosa do bootkit e opcionalmente uma backdoor no kernel, alcançada por ganchos na Tabela do Sistema EFI.

Uma visão geral do fluxo de inicialização final do EfiGuard é mostrada no diagrama acima. Para os ganchos e modificações específicos de cada componente, veja EfiGuardDxe/PatchXxx.c nos arquivos fonte. Para a inicialização/descarregamento do driver e os ganchos dos Serviços de Inicialização e Tempo de Execução EFI, veja EfiGuardDxe.c.

Créditos

  • UPGDSED por hfiref0x e Fyyre
  • Zydis por zyantific
  • Uninformed artigos sobre PatchGuard v1, v2 e v3 por Skywing
  • UEFI-Bootkit por dude719
  • ReactOS

Licença

O EfiGuard é licenciado sob a GPLv3. Os arquivos no submódulo EfiGuardDxe/Zydis são licenciados sob a licença MIT.

Baixar ferramenta
❌
O mesmo de antes
CarregadorEm qualquer lugarNão é necessário✔️Windows