Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
EfiGuard — Deshabilitar PatchGuard y la aplicación de firmas de controladores en el momento de arranque | Kitploit
Herramientas/GitHubGitHub/mattiwatti/efiguard
Herramientas DefensivasExplotaciónIngeniería InversaAnálisis de Binarios
GitHubmattiwatti/efiguard

EfiGuard

Deshabilitar PatchGuard y la aplicación de firmas de controladores en el momento de arranque

Ver Repositorio
2.5k4096hace 2 mesesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Descripción general

EfiGuard es un bootkit UEFI x64 portátil que parchea el administrador de arranque, el cargador de arranque y el kernel de Windows durante el arranque para deshabilitar PatchGuard y la aplicación de firma de controladores (DSE).

Si solo buscas probar EfiGuard, salta a Uso.

Características

  • Actualmente es compatible con todas las versiones de Windows x64 compatibles con EFI jamás lanzadas, desde Vista SP1 hasta Windows 11.

  • Fácil de usar: se puede iniciar desde una unidad USB o la partición EFI de Windows mediante un cargador que encuentra e inicia Windows automáticamente. El controlador también se puede cargar y configurar manualmente usando el shell UEFI o el cargador.

  • Hace un uso extensivo de la biblioteca desensambladora Zydis para la decodificación rápida de instrucciones en tiempo de ejecución, lo que permite un análisis más robusto que el posible con la coincidencia de firmas, que a menudo requiere cambios con las nuevas actualizaciones del sistema operativo.

  • Funciona de forma pasiva: el controlador no carga ni inicia el administrador de arranque de Windows. En su lugar, actúa sobre una carga de bootmgfw.efi por parte del administrador de arranque del firmware a través del menú de selección de arranque o una aplicación EFI como el cargador. Si se inicia un sistema operativo que no sea Windows, el controlador se descargará automáticamente.

  • Admite parcheo en cuatro etapas para cuando bootmgfw.efi inicia bootmgr.efi en lugar de winload.efi. Este es el caso cuando se carga un archivo WIM para iniciar WinPE, la configuración de Windows o el modo de recuperación de Windows.

  • Recuperación elegante: en caso de fallo del parche, el controlador mostrará información de error y solicitará continuar con el arranque o reiniciar presionando ESC. Esto es cierto incluso hasta la etapa final de parcheo del kernel, porque la última etapa de parcheo ocurre antes de que se llame a ExitBootServices. Muchos bootkits UEFI de Windows enganchan OslArchTransferToKernel, que, aunque es fácil de encontrar mediante coincidencia de patrones, es una función que se ejecuta en modo protegido después de ExitBootServices. Esto significa que no hay servicios de arranque disponibles para informar al usuario de que algo salió mal. bsod

    Fallo de parche simulado con información de error

  • Depurable: puede enviar mensajes a un depurador del kernel y a la pantalla (aunque almacenados en búfer) durante la etapa de parcheo del kernel, y a un puerto serie o sin búfer a la pantalla durante las etapas de parcheo del administrador de arranque y el cargador de arranque. Si el controlador se compila con información de depuración PDB, es posible cargar los símbolos de depuración en cualquier momento después de la inicialización de HAL especificando la base virtual del controlador DXE y depurándolo como lo haría con un controlador NT normal.

  • Omisiones de DSE: disponibles como una desactivación directa de DSE al estilo UPGDSED en el momento del arranque o como un gancho en el servicio EFI en tiempo de ejecución SetVariable(). Este último sirve como una puerta trasera arbitraria de lectura/escritura en modo kernel que se puede llamar desde Windows usando NtSetSystemEnvironmentValueEx y permite establecer g_CiEnabled/g_CiOptions al valor deseado. Se proporciona una pequeña aplicación similar a DSEFix llamada EfiDSEFix.exe que se puede utilizar para esto. También es posible dejar DSE habilitado y deshabilitar solo PatchGuard. El cargador usará el método de gancho SetVariable por defecto, debido a que algunos programas antichoque y antivirus no entienden la diferencia entre trampas o malware y los controladores autofirmados en general y apuntan a la corrección de UPGDSED.

  • Admite kernels y cargadores de arranque modificados en disco mediante el parcheo de ImgpValidateImageHash en cada etapa, así como ImgpFilterValidationFailure, que puede denunciar silenciosamente algunas clases de violaciones a un TPM o al archivo de registro SI.

  • Permite que el Arranque Seguro funcione con Windows 7 (¡no es broma!). Windows 7 en sí mismo es ajeno al Arranque Seguro ya que no lo admite, ni (oficialmente) siquiera arrancar sin CSM. Esto es útil para personas que quieren usar Windows 7 en un dispositivo bloqueado que requiere Arranque Seguro WHQL. Entrada de wiki sobre cómo hacer que esto funcione aquí. win7_secureboot

    WinObjEx64 en Windows 7 con Arranque Seguro habilitado

Problemas y limitaciones

  • EfiGuard no puede deshabilitar la Integridad de Código impuesta por el Hipervisor (HVCI o HyperGuard) debido a que HVCI se ejecuta con un nivel de privilegio mayor. EfiGuard puede coexistir con HVCI e incluso deshabilitar con éxito PatchGuard en el kernel normal, pero esto no es útil en la práctica porque HVCI detectará lo que PatchGuard hacía anteriormente. Ambos tipos de omisión de DSE quedan inutilizados por HVCI: el parche en tiempo de arranque no tiene efecto porque el kernel delega en el kernel seguro para las comprobaciones de integridad, y el gancho SetVariable causará una comprobación de error SECURE_KERNEL_ERROR si se usa para escribir en g_CiOptions.
  • Los kernels checked no son compatibles debido a las diferencias en el código de inicialización de PatchGuard y DSE causadas por optimizaciones deshabilitadas y afirmaciones agregadas, así como cambios adicionales en PatchGuard en kernels checked. Esto no debería ser un problema ya que los kernels checked no son generalmente útiles sin un depurador de kernel adjunto, que deshabilita PatchGuard.

Uso

Hay dos formas de usar EfiGuard: iniciar la aplicación cargadora, que cargará el controlador e iniciará Windows por usted, o instalar el controlador como una entrada de controlador UEFI para que el firmware lo cargue automáticamente.

Instalar el controlador puede ser preferible en algunas configuraciones avanzadas, como cuando se arranca múltiples sistemas, pero el cargador es el más fácil de usar y debería funcionar bien en todas las configuraciones. Consulta la tabla a continuación para ver las diferencias más importantes entre los dos métodos. Si no estás seguro, elige la aplicación cargadora.

UbicaciónInstalación¿Se puede saltar?¿Qué SO se inicia?
Entrada de controlador UEFIDebe estar en la ESPMediante Shell UEFI

Comparación entre cargador y entrada de controlador UEFI

Iniciando el cargador

  1. Descarga EfiGuard y renombra EFI/Boot/Loader.efi a bootx64.efi.
  2. Coloca los archivos en una unidad de arranque, como una unidad USB formateada en FAT32 (para máquinas físicas) o un ISO/disco virtual (para máquinas virtuales). Asumiendo la unidad X:, las rutas para los dos archivos deberían ser ahora X:/EFI/Boot/{bootx64|EfiGuardDxe}.efi
  3. Inicia la máquina desde la unidad que usaste en el paso 2. La mayoría de los firmwares proporcionan un menú de arranque para hacer esto mediante F8/F10/F11/F12. Si no, deberás configurar la BIOS para que arranque desde la nueva unidad.
  4. Windows debería arrancar ahora, y deberías ver mensajes de EfiGuard durante el arranque.
  5. Si iniciaste con el gancho SetVariable (el predeterminado), ejecuta EfiDSEFix.exe -d desde un símbolo del sistema como Administrador después del arranque para deshabilitar DSE, o ejecuta EfiDSEFix.exe para ver la lista completa de opciones.

Ten en cuenta que no necesitas usar una unidad separada para el cargador. Si lo prefieres, puedes instalar EfiGuard en la ESP donde ya está instalado Windows. Sin embargo, esto es algo más complicado, ya que necesitarás agregar una entrada de arranque UEFI para el cargador.

Para hacer esto, monta la ESP en X: usando mountvol X: /S y sigue los pasos anteriores, pero no renombres el cargador y simplemente copia ambos archivos a X:/EFI/Boot. Después de eso, necesitarás agregar manualmente una entrada de arranque UEFI desde el Shell UEFI usando bcfg boot addp 0 Loader.efi "EfiGuard", o alternativamente usando efibootmgr (Linux), EasyUEFI (Windows) o similar.

Instalando el controlador

  1. Monta la ESP en X: usando mountvol X: /S.
  2. Copia EfiGuardDxe.efi a X:/EFI/Boot/EfiGuardDxe.efi.
  3. Inicia el Shell UEFI y agrega una entrada de controlador UEFI: bcfg driver add 0 EfiGuardDxe.efi "EfiGuardDxe".
  4. Windows debería arrancar ahora, y deberías ver mensajes de EfiGuard durante el arranque.
  5. Si iniciaste con el gancho SetVariable (el predeterminado), ejecuta EfiDSEFix.exe -d desde un símbolo del sistema como Administrador después del arranque para deshabilitar DSE, o ejecuta EfiDSEFix.exe para ver la lista completa de opciones.

Nota: dependiendo de tu firmware, es posible que necesites usar "addp" en el paso 3 en lugar de "add". Se sabe que VirtualBox requiere esto, y posiblemente algunos firmwares de placas base también.

Nota: algunos firmwares muy antiguos o no conformes pueden no soportar este método de instalación en absoluto. En estos sistemas no tendrás más opción que usar el cargador.

Compilación

Compilando EfiGuardDxe y el cargador

EfiGuard requiere EDK2 para compilar. Si no tienes EDK2 instalado, sigue primero los pasos en Getting Started with EDK2 ya que el sistema de compilación de EDK2 es bastante complejo de configurar. Esta sección asume que tienes un directorio workspace al que apunta tu variable de entorno WORKSPACE, con una copia de EDK2 desplegada en workspace/edk2. Los compiladores compatibles son MSVC, Clang, GCC e ICC.

  1. Clona el repositorio de EfiGuard en workspace/edk2/EfiGuardPkg.
  2. Abre un símbolo del sistema o shell que configure las variables de entorno para EDK2.
  3. Ejecuta build -a X64 -t VS2019 -p EfiGuardPkg/EfiGuardPkg.dsc -b RELEASE, sustituyendo tu cadena de herramientas por VS2019.

Esto producirá EfiGuardDxe.efi y Loader.efi en workspace/Build/EfiGuard/RELEASE_VS2019/X64.

Compilando EfiDSEFix

EfiDSEFix requiere Visual Studio para compilar.

  1. Abre EfiGuard.sln y compila la solución.

El binario de salida EfiDSEFix.exe estará en Application/EfiDSEFix/bin.

La solución de Visual Studio también incluye proyectos para EfiGuardDxe.efi y Loader.efi que se pueden usar con VisualUefi, pero estos proyectos no se compilan de forma predeterminada porque no enlazarán sin código adicional, y el resultado de la compilación será inferior (más grande) que el que produce EDK2. Loader.efi no enlazará en absoluto debido a que VisualUefi carece de UefiBootManagerLib. Por lo tanto, estos archivos de proyecto están destinados solo como ayuda para el desarrollo y los archivos EFI aún deben compilarse con EDK2. Para configurar VisualUefi para este propósito, clona el repositorio en workspace/VisualUefi y abre EfiGuard.sln.

Arquitectura

architecture Aunque EfiGuard es un bootkit UEFI, no comenzó como tal. EfiGuard era originalmente un parcheador en disco que se ejecutaba en NT (similar a UPGDSED), destinado a probar la viabilidad de un enfoque basado en desensamblador, en lugar de usar símbolos PDB y firmas específicas de versión. PatchNtoskrnl.c todavía se parece mucho a este diseño original. Solo después de que este enfoque demostró ser exitoso, sin necesidad de modificaciones en el código durante más de un año de actualizaciones de Windows, UEFI entró en escena como una forma de mejorar aún más las capacidades y la facilidad de uso.

Algunos de los beneficios proporcionados por un enfoque de bootkit incluyen:

  • No se necesitan modificaciones en disco en kernels o cargadores de arranque.
  • No es necesario modificar el almacén de configuración de arranque usando bcdedit.
  • No es necesario parchear ImgpValidateImageHash (aunque esto todavía se hace opcionalmente).
  • Irónicamente, el uso de un bootkit permite habilitar el Arranque Seguro, siempre que poseas la Clave de Plataforma y puedas agregar tu certificado personal al almacén db.

La encarnación inicial de EfiGuard como bootkit fue un intento de hacer que el UEFI-Bootkit de dude719 funcionara con versiones recientes de Windows 10, porque se había vuelto obsoleto y ya no funciona en las últimas versiones (como UPGDSED, a menudo causado por escaneos de patrones sensibles a la versión). Aunque eventualmente logré que funcionara, no quedé satisfecho con el resultado, principalmente debido a la elección de enganchar OslArchTransferToKernel, que como se señaló anteriormente se ejecuta en modo protegido y después de que se haya llamado a ExitBootServices. Aparte de esto, no estaba satisfecho con solo poder parchear algunas versiones de Windows 10; quería que el bootkit funcionara en todas las versiones de Windows x64 compatibles con EFI lanzadas hasta la fecha. Debido a esto, reescribí el bootkit desde cero con los siguientes objetivos:

  • Proporcionar información del parche en cada etapa del arranque, incluido el parche del kernel en sí.
  • Ser compatible con todas las versiones de Windows compatibles con EFI (en el momento de escribir esto).
  • Habilitar la instanciación diferida del bootkit y opcionalmente una puerta trasera del kernel, lograda mediante ganchos en la Tabla del Sistema EFI.

Una visión general del flujo de arranque final de EfiGuard se muestra en el diagrama anterior. Para los ganchos y parches específicos de componentes individuales, consulta EfiGuardDxe/PatchXxx.c en los archivos fuente. Para la inicialización/descarga del controlador y los ganchos de los Servicios de Arranque y Tiempo de Ejecución EFI, consulta EfiGuardDxe.c.

Créditos

  • UPGDSED por hfiref0x y Fyyre
  • Zydis por zyantific
  • Artículos de Uninformed sobre PatchGuard v1, v2 y v3 por Skywing
  • UEFI-Bootkit por dude719
  • ReactOS

Licencia

EfiGuard está licenciado bajo GPLv3. Los archivos en el submódulo EfiGuardDxe/Zydis están licenciados bajo la licencia MIT.

Descargar herramienta
❌
Igual que antes
CargadorEn cualquier lugarNo es necesario✔️Windows