Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
EfiGuard — 在启动时禁用 PatchGuard 和 Driver Signature Enforcement | Kitploit
工具/GitHubGitHub/mattiwatti/efiguard
防御工具漏洞利用逆向工程二进制分析
GitHubmattiwatti/efiguard

EfiGuard

在启动时禁用 PatchGuard 和 Driver Signature Enforcement

查看仓库
2.5k40962个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

概述

EfiGuard 是一款便携式 x64 UEFI 启动工具包(bootkit),可在启动时修补 Windows 启动管理器、启动加载器和内核,以禁用 PatchGuard 和驱动程序签名强制(DSE)。

如果你只是想尝试 EfiGuard,请跳到使用。

功能特性

  • 目前支持自 Vista SP1 至 Windows 11 所有已发布的与 EFI 兼容的 Windows x64 版本。

  • 易于使用:可通过 U 盘或 Windows EFI 分区启动,加载器会自动查找并启动 Windows。驱动程序也可通过 UEFI Shell 或加载器手动加载和配置。

  • 大量使用 Zydis 反汇编库进行快速运行时指令解码,以支持比签名匹配更健壮的分析——签名匹配通常需要随新系统更新而更改。

  • 被动工作:驱动程序不会加载或启动 Windows 启动管理器,而是通过固件启动管理器(通过启动选择菜单或 EFI 应用程序,如加载器)对 bootmgfw.efi 的加载做出反应。如果启动非 Windows 操作系统,驱动程序将自动卸载自身。

  • 支持四阶段修补,适用于 bootmgfw.efi 启动 bootmgr.efi 而非 winload.efi 的情况,例如加载 WIM 文件以启动 WinPE、Windows 安装程序或 Windows 恢复模式时。

  • 优雅恢复:如果修补失败,驱动程序将显示错误信息并提示按 ESC 继续启动或重启。即便在内核修补的最后阶段也是如此,因为最后的修补阶段发生在调用 ExitBootServices 之前。许多 UEFI Windows 启动工具包会挂钩 OslArchTransferToKernel——该函数虽易于通过模式匹配找到,却是在 ExitBootServices 之后以保护模式执行的。这意味着没有可用的引导服务来告知用户出现问题。 蓝屏

    模拟的修补失败及其错误信息

  • 可调试:在内核修补阶段可将消息输出到内核调试器和屏幕(尽管是缓冲输出),在启动管理器和启动加载器修补阶段可将消息输出到串行端口或屏幕(无缓冲)。如果驱动程序以 PDB 调试信息编译,可在 HAL 初始化后的任意时刻加载调试符号,只需指定虚拟 DXE 驱动程序基址,并像调试普通 NT 驱动程序一样调试它。

  • DSE 绕过:提供两种方式:一种是在启动时直接禁用 DSE(类似 UPGDSED 风格),另一种是挂钩 EFI 运行时服务 SetVariable()。后者作为任意内核模式读/写后门,可通过 Windows 的 NtSetSystemEnvironmentValueEx 从用户态调用,并允许将 g_CiEnabled/g_CiOptions 设置为所需值。此外还提供了一个名为 EfiDSEFix.exe 的小型 DSEFix 风格应用程序。也可以保持 DSE 启用而仅禁用 PatchGuard。默认情况下,加载器将使用 SetVariable 挂钩方法,因为某些反作弊和防病毒程序无法区分作弊/恶意软件与自签名驱动程序的差异,并会针对 UPGDSED 修复。

  • 支持已修改的内核和启动加载器(磁盘上的),通过在每一阶段修补 ImgpValidateImageHash 以及 ImgpFilterValidationFailure(后者可能静默地将某些违规行为报告给 TPM 或 SI 日志文件)来实现。

  • 允许 Windows 7 在启用安全启动(Secure Boot)的情况下工作(这不是玩笑!)。Windows 7 本身不支持安全启动,甚至(根据官方资料)在不启用 CSM 的情况下无法启动。这对那些希望在需要 WHQL 安全启动的锁定设备上使用 Windows 7 的用户很有用。关于如何实现此功能的 Wiki 条目请参见此处。 win7_secureboot

    已启用安全启动的 Windows 7 上的 WinObjEx64

问题与限制

  • EfiGuard 无法禁用 Hypervisor 强制的代码完整性(HVCI 或 HyperGuard),因为 HVCI 运行在更高的特权级别。EfiGuard 可以与 HVCI 共存,甚至能成功禁用普通内核中的 PatchGuard,但这在实践中没有用,因为 HVCI 会捕捉之前由 PatchGuard 捕获的违规行为。两种 DSE 绕过方式都会被 HVCI 无效化:启动时修补无效,因为内核将完整性检查委托给了安全内核;而 SetVariable 挂钩如果用于写入 g_CiOptions,将导致 SECURE_KERNEL_ERROR 蓝屏。
  • 不支持 Checked 内核,因为 PatchGuard 和 DSE 初始化代码因禁用优化、添加断言以及 Checked 内核中 PatchGuard 的额外更改而存在差异。这通常不是问题,因为 Checked 内核在没有内核调试器(该调试器会禁用 PatchGuard)的情况下通常没有用处。

使用

使用 EfiGuard 有两种方式:启动加载器应用程序,它将加载驱动程序并自动启动 Windows;或者将驱动程序安装为 UEFI 驱动程序条目,以便由固件自动加载。在某些高级配置(如多启动)中,安装驱动程序可能更优,但加载器最容易使用,且应在所有配置中正常工作。参见下表了解两种方法的主要区别。如果不确定,请选择加载器应用程序。

位置安装方式可跳过?启动哪个 OS?
UEFI 驱动程序条目必须在 ESP 上通过 UEFI Shell❌与之前相同
加载器任意位置无需安装✔️

加载器与 UEFI 驱动程序条目对比

启动加载器

  1. 下载 EfiGuard 并将 EFI/Boot/Loader.efi 重命名为 bootx64.efi。
  2. 将文件放置到启动驱动器上,例如 FAT32 格式的 U 盘(物理机)或 ISO/虚拟磁盘(虚拟机)。 假设驱动器为 X:,两个文件的路径现在应为 X:/EFI/Boot/{bootx64|EfiGuardDxe}.efi
  3. 从步骤 2 中使用的驱动器启动机器。 大多数固件可通过 F8/F10/F11/F12 提供启动菜单。如果没有,则需要配置 BIOS 从新驱动器启动。
  4. Windows 现在应能启动,你会在启动时看到 EfiGuard 消息。
  5. 如果你以 SetVariable 挂钩(默认)启动,启动后请以管理员身份运行命令提示符并执行 EfiDSEFix.exe -d 以禁用 DSE,或运行 EfiDSEFix.exe 查看完整选项列表。

请注意,加载器不需要使用单独的驱动器。如果方便,你可以将 EfiGuard 安装在 Windows 已安装的 ESP 上。不过这会更复杂,因为你需要为加载器添加一个 UEFI 启动项。

具体做法:使用 mountvol X: /S 将 ESP 挂载到 X:,然后按照上述步骤操作,但不要重命名加载器,直接将两个文件复制到 X:/EFI/Boot。之后,你需要从 UEFI Shell 手动添加 UEFI 启动项:使用 bcfg boot addp 0 Loader.efi "EfiGuard",或者使用 efibootmgr(Linux)、EasyUEFI(Windows)等工具。

安装驱动程序

  1. 使用 mountvol X: /S 将 ESP 挂载到 X:。
  2. 将 EfiGuardDxe.efi 复制到 X:/EFI/Boot/EfiGuardDxe.efi。
  3. 启动到 UEFI Shell 并添加 UEFI 驱动程序条目:bcfg driver add 0 EfiGuardDxe.efi "EfiGuardDxe"。
  4. Windows 现在应能启动,你会在启动时看到 EfiGuard 消息。
  5. 如果你以 SetVariable 挂钩(默认)启动,启动后请以管理员身份运行命令提示符并执行 EfiDSEFix.exe -d 以禁用 DSE,或运行 EfiDSEFix.exe 查看完整选项列表。

注意:取决于你的固件,步骤 3 中可能需要使用 "addp" 而不是 "add"。已知 VirtualBox 需要这样操作,某些主板固件也可能如此。

注意:某些非常老旧或不符合规范的固件可能完全不支持这种安装方式。在这些系统上,你只能使用加载器。

编译

编译 EfiGuardDxe 和加载器

EfiGuard 需要 EDK2 来构建。如果你没有安装 EDK2,请先按照 EDK2 入门 的步骤操作,因为 EDK2 构建系统设置起来相当复杂。本节假设你的 WORKSPACE 环境变量指向一个 workspace 目录,且其中已检出 EDK2 副本(位于 workspace/edk2)。支持的编译器包括 MSVC、Clang、GCC 和 ICC。

  1. 将 EfiGuard 仓库克隆到 workspace/edk2/EfiGuardPkg。
  2. 打开一个已设置 EDK2 环境变量的提示符或 Shell。
  3. 运行 build -a X64 -t VS2019 -p EfiGuardPkg/EfiGuardPkg.dsc -b RELEASE,将 VS2019 替换为你的工具链。

这将生成 EfiGuardDxe.efi 和 Loader.efi,位于 workspace/Build/EfiGuard/RELEASE_VS2019/X64。

编译 EfiDSEFix

EfiDSEFix 需要 Visual Studio 来构建。

  1. 打开 EfiGuard.sln 并生成解决方案。

输出二进制文件 EfiDSEFix.exe 将位于 Application/EfiDSEFix/bin。

Visual Studio 解决方案中还包含 EfiGuardDxe.efi 和 Loader.efi 的项目,可使用 VisualUefi 进行构建,但默认不会构建这些项目,因为它们在缺少额外代码的情况下无法链接,且构建输出会比 EDK2 生成的更大(文件更大)。Loader.efi 甚至完全无法链接,因为 VisualUefi 缺少 UefiBootManagerLib。因此这些项目文件仅用作开发辅助,EFI 文件仍应使用 EDK2 编译。为此目的设置 VisualUefi 时,请将仓库克隆到 workspace/VisualUefi,然后打开 EfiGuard.sln。

架构

架构图 尽管 EfiGuard 是一个 UEFI 启动工具包,但它最初并非如此。EfiGuard 最初是一个运行在 NT 上的磁盘修补器(类似于 UPGDSED),旨在测试基于反汇编器的方法的可行性,以替代使用 PDB 符号和版本特定签名的方式。PatchNtoskrnl.c 仍然非常像这种原始设计。仅当这种方法被证明成功——在一年多的 Windows 更新中无需对代码进行任何修改——之后,UEFI 才被考虑进来,以进一步提升能力和易用性。

启动工具包方法带来的一些好处包括:

  • 无需对内核或启动加载器进行磁盘上的修改。
  • 无需使用 bcdedit 修改启动配置存储。
  • 无需修补 ImgpValidateImageHash(尽管仍可选择性地进行)。
  • 具有讽刺意味的是,使用启动工具包允许启用安全启动,前提是你拥有平台密钥并能将个人证书添加到 db 存储中。

EfiGuard 作为启动工具包的初始形态是尝试让 dude719 的 UEFI-Bootkit 能够在较新的 Windows 10 版本上工作,因为它已经过时,不再适用于最新版本(像 UPGDSED 一样,通常是由版本敏感的模式扫描导致的)。虽然我最终让它工作了,但我对结果并不满意,主要是因为选择了挂钩 OslArchTransferToKernel——如前所述,该函数在保护模式下执行,且 ExitBootServices 已被调用。除此之外,我并不满足于仅能修补某些版本的 Windows 10;我希望启动工具包能够适用于所有至今发布的与 EFI 兼容的 Windows x64 版本。因此,我完全重写了启动工具包,目标如下:

  • 在启动的每个阶段(包括内核修补本身)提供修补信息。
  • 支持所有与 EFI 兼容的 Windows 版本(截至撰写本文时)。
  • 实现启动工具包的惰性实例化,并可选择性地提供内核后门,通过 EFI 系统表挂钩实现。

上方的图表提供了最终 EfiGuard 启动流程的宏观概览。有关各个组件特定的挂钩和修补,请参阅源文件中的 EfiGuardDxe/PatchXxx.c。关于驱动程序初始化/卸载以及 EFI 启动和运行时服务挂钩,请参阅 EfiGuardDxe.c。

致谢

  • UPGDSED 由 hfiref0x 和 Fyyre 开发
  • Zydis 由 zyantific 开发
  • Uninformed 上关于 PatchGuard v1、v2 和 v3 的文章,作者 Skywing
  • UEFI-Bootkit 由 dude719 开发
  • ReactOS

许可证

EfiGuard 根据 GPLv3 许可证授权。EfiGuardDxe/Zydis 子模块中的文件根据 MIT 许可证授权。

下载工具
Windows