65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 DSE-Patcher 禁用驱动程序签名强制

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.97/5 (7投票s)

2022 年 11 月 28 日

GPL3

18分钟阅读

viewsIcon

19724

downloadIcon

1355

如何使用 DSE-Patcher 禁用驱动程序签名强制

1. 引言

驱动程序签名强制 (DSE) 是 Microsoft 从 Windows Vista x64 开始引入的一项功能。DSE 是操作系统的安全功能,可确保仅加载经过数字签名的有效驱动程序。要安装未签名驱动程序,必须禁用 DSE 安全功能。DSE-Patcher 可用于禁用从 Windows Vista 及更高版本开始的所有 64 位操作系统上的 DSE。我们开发 DSE-Patcher 是为了向感兴趣的开发者展示利用已知漏洞和修改内核地址空间内存有多么容易。

2. 使用说明

DSE-Patcher 应以管理员权限运行。DSE-Patcher 启动后,将首先使用易受攻击的驱动程序列表中的第一个驱动程序来检查实际的驱动程序签名强制状态。首次启动时,我们使用 RTCore64,因为它目前兼容性和可靠性最高。它支持从 Windows Vista x64 开始的所有操作系统。请注意,此工具仅设计用于 x64 操作系统版本,因为在 x86 上,操作系统根本不强制执行 DSE。

启动工具后,您应该会看到有关实际 DSE 状态的详细数据。它看起来如下所示:

DSE-Patcher 支持三个主要任务。我们可以通过对话框中的相应按钮来禁用、启用和恢复 DSE 状态。这三个按钮具有以下功能:

  • 禁用 DSE 将禁用驱动程序签名强制,并将变量设置为禁用 DSE 值
  • 启用 DSE 将启用驱动程序签名强制,并将变量设置为启用 DSE 值
  • 恢复 DSE 将重置驱动程序签名强制,并将变量设置为原始 DSE 值

DSE-Patcher 设置的值可以在DSE 补丁数据部分查找。原始 DSE 值在 DSE-Patcher 首次启动时保存在全局变量中。建议在加载自己的未签名驱动程序后,将 DSE 值恢复到保存的原始值。通常,您会单击禁用 DSE,加载自己的未签名驱动程序,然后在之后单击恢复 DSE以恢复原始 DSE 状态。在 Windows 8 或更高版本中,g_CiOptions 由 PatchGuard 保护。如果该值被修改的时间过长,Windows 将显示蓝屏。因此,我们应该尽快加载自己的未签名驱动程序,然后重新启用 DSE。

实际 DSE 值是显示当前 DSE 状态的值。图像基址和补丁地址是根据显示的模块名称基于虚拟内核内存地址计算的。对于 Windows Vista 和 Windows 7,它是NTOSKRNL.EXE;对于 Windows 8 及更高版本,它是CI.DLL。请注意,禁用和启用 DSE 的值可能因操作系统而异。这还取决于操作系统版本,我们将在下一章中解释。

DSE-Patcher 完成其任务后,所有已安装的易受攻击的驱动程序都将被干净地卸载。像 DBUtil v2.3 这样的某些驱动程序存在卸载问题,这与驱动程序本身及其不受支持的停止功能有关。在 Windows 10 中,服务将在下次重新启动时移除,但驱动程序的 sys 文件必须在下次重新启动后由用户手动删除。

3. 在 Windows Vista 和 Windows 7 上修补 DSE

要在 Windows Vista 和 Windows 7 上修补 DSE,我们需要更改ntoskrnl.exe中的变量g_CiEnabled。如果启用了 DSE,则该变量设置为 1,否则为零。要计算和检索该变量,我们在ntoskrnl.exe中搜索字节序列EB 06 88 1D,其中包含跳转、跳转位置loc_1403F5B82以及后续汇编代码中的移动指令:

在该字节序列的紧后面,就是g_CiEnabled的地址。基于这个偏移量,我们计算内核地址空间内的变量地址并对其进行修补。请注意,此补丁可能在操作系统的已检查调试版本上不起作用,因为根本找不到该字节序列,或者找到的偏移量无效。

4. 在 Windows 8 及更高版本(直到 Windows 10 版本 1703)上修补 DSE

从 Windows 8 开始,DSE 的概念与 Windows Vista 和 Windows 7 相比略有改变。旧变量g_CiEnabled已消失,无法再用于绕过 DSE。要在 Windows 8 及更高版本上修补 DSE,我们需要更改ci.dll中的变量g_CiOptions。如果启用了 DSE,则该变量设置为 6,否则为零。请注意,g_CiOptions也可能具有许多其他值和标志组合,其中并非所有都为公众所知。例如,在 Windows 安装阶段,如果启用了 DSE,变量值也可能更改为 6 以外的值。在这些情况下,我们实现了 DSE-Patcher 的恢复功能,该功能在首次启动时保存原始 DSE 值,并在稍后恢复它。要计算和检索该变量,我们首先在函数CiInitialize中搜索长度为 5 字节的跳转指令。

我们跟随跳转到函数CipInitialize,并在函数CipInitialize中搜索字节序列89 0D,其中包含后续汇编代码中的g_CiOptions移动指令:

在该字节序列的紧后面,就是g_CiOptions的地址。基于这个偏移量,我们计算内核地址空间内的变量地址并对其进行修补。这适用于 Windows 8 及更高版本(直到 Windows 10 版本 1703)。请注意,此补丁可能在操作系统的已检查调试版本上不起作用,因为根本找不到该字节序列,或者找到的偏移量无效。

5. 在 Windows 10 版本 1709 及更高版本上修补 DSE

在 Windows 10 版本 1709 中,跳转到CipInitialize被调用指令取代。此外,Windows 10 Build 21H2 开始在我们的目标调用之前使用调用指令进行功能分阶段初始化。因此,我们必须检查调用指令以及所有函数参数以检索正确的代码位置。要计算和检索g_CiOptions变量,我们首先在函数CiInitialize中搜索函数参数和长度为 5 字节的调用指令。

我们跟随调用到函数CipInitialize,并在函数CipInitialize中搜索字节序列89 0D,其中包含后续汇编代码中的g_CiOptions移动指令:

在该字节序列的紧后面,就是g_CiOptions的地址。基于这个偏移量,我们计算内核地址空间内的变量地址并对其进行修补。请注意,此补丁可能在操作系统的已检查调试版本上不起作用,因为根本找不到该字节序列,或者找到的偏移量无效。

在 Windows 10 Build 21H2 上,上述在CiInitialize中目标调用之前的函数分阶段初始化调用将如下所示:

6. 使用 BYOVD 修补内核地址空间

要应用g_CiEnabledg_CiOptions变量的补丁,我们需要访问内核地址空间,而这受到 DSE-Patcher 等用户模式应用程序的保护。从用户模式进行内存补丁的一种简单方法是使用可以访问内核地址空间的驱动程序。理论上,我们可以编写自己的驱动程序来完成这项工作,但由于启用了 DSE,它也将无法加载。因此,在我们的情况下,最佳方法是使用一个已签名的驱动程序,该驱动程序可以写入内存。这时,就会想到“自带易受攻击驱动程序”(BYOVD) 漏洞利用。这些漏洞利用了一个易受攻击的、完全签名的驱动程序,该驱动程序首先被加载,然后运行一个漏洞利用来读取或写入内核地址空间。乍一看可能很复杂,但如果您查看 DSEFix、KDU 或 DSE-Patcher 等工具的源代码,就会发现这是一项简单的任务。DSE-Patcher 使用的所有易受攻击的驱动程序将在接下来的章节中进行描述。

7. RTCore64 v4.6.2

易受攻击的驱动程序 RTCore64 v4.6.2 随 MSI Afterburner v4.6.2 Build 15658 Beta 2 一起提供。下载仍可在以下 URL 获取:

您只需解压 ZIP 文件,然后使用 7-Zip 打开MSIAfterburnerSetup462Beta2.exe。在存档的根目录中,我们可以找到易受攻击的RTCore64.sys驱动程序。RTCore64 v4.6.2 驱动程序文件具有以下属性:

Name    : RTCore64.sys
Type    : Driver sys file
CVE ID  : CVE-2019-16098
SHA-1   : F6F11AD2CD2B0CF95ED42324876BEE1D83E01775
SHA-256 : 01AA278B07B58DC46C84BD0B1B5C8E9EE4E62EA0BF7A695862444AF32E87F1FD
MD5     : 2D8E4F38B36C334D0A32A7324832501D

该漏洞自 2019 年起就存在,允许经过身份验证的用户读取和写入任意内存、I/O 端口和 MSR。这可用于权限提升和以高权限执行代码。我们仅使用该驱动程序读取和写入 DSE 变量以禁用驱动程序签名强制。

为了启动魔法,我们只需安装驱动程序,打开一个设备句柄,然后发送 I/O 控制代码0x80002048(用于内存读取)和0x8000204C(用于内存写入)。RTCore64 支持 Windows Vista 及更高版本。

8. DBUtil v2.3

易受攻击的驱动程序 DBUtil v2.3 随许多戴尔工具一起提供。快速搜索后,我们在 Dell BIOS 更新工具 v1.0.2 (2019 年 6 月 11 日)、v1.0.3 (2019 年 7 月 15 日) 和 v1.1.3 (2019 年 9 月 27 日) for OptiPlex 7070 系统中找到了该驱动程序。照常,下载仍可在以下 URL 获取:

我们还可以从以下 URL 的戴尔驱动程序搜索页面获取:

从可执行文件中提取驱动程序有点复杂。我们需要使用 OllyDbg 加载可执行文件OptiPlex_7070_1.0.2.exe,并在驱动程序解压完成后立即停止执行。要手动解压 DBUtil v2.3,请遵循以下步骤:

  • 注意:这些步骤必须在 x64 版本的 Windows 上进行,否则将解压 32 位驱动程序而不是 64 位驱动程序!
  • 以管理员身份安装并运行 OllyDbg v1.10。
  • 菜单 > 文件 > 打开 > 选择OptiPlex_7070_1.0.2.exe > 打开
  • 右键单击反汇编器窗口 > 搜索 > 当前模块中的名称(标签)
  • 名称窗口中,键入OpenServiceA > 右键单击它 > 查找导入引用 > 右键单击 > 在反汇编器中跟随。
  • F2OpenServiceA处设置断点。
  • F9 运行可执行文件。

    即使我们没有戴尔机器,可执行文件也会运行并为我们解压驱动程序。

  • 可执行文件将停止执行并在此断点OpenServiceA处命中。
  • F8 单步执行一次 > 在寄存器窗口中,右键单击EAX的值并选择“清零”。

    这将清零从OpenServiceA函数调用返回的有效句柄。只有在没有有效句柄的情况下,驱动程序才会解压自身一次以上。DBUtil v2.3 仅在可执行文件首次运行时解压自身,之后一直驻留在内存中直到下次重新启动。

  • 继续使用 F8 单步执行,直到下一个 OptiPlex 调用之后。
  • 反汇编器窗口应如下所示:

  • 在调用OptiPlex.000A4190之后,我们可以在C:\Users\<UserName>\AppData\Local\Temp\DBUtil_2_3.Sys找到解压后的驱动程序。
  • 现在我们可以复制驱动程序并关闭OllyDbg

DBUtil v2.3 驱动程序文件具有以下属性:

Name    : DBUtil_2_3.Sys
Type    : Driver sys file
CVE ID  : CVE-2021-21551
SHA-1   : C948AE14761095E4D76B55D9DE86412258BE7AFD
SHA-256 : 0296E2CE999E67C76352613A718E11516FE1B0EFC3FFDB8918FC999DD76A73A5
MD5     : C996D7971C49252C582171D9380360F2 

该漏洞自 2021 年起就存在,允许经过身份验证的用户读取和写入任意内存。这可用于权限提升和以高权限执行代码。我们仅使用该驱动程序读取和写入 DSE 变量以禁用驱动程序签名强制。

我们只需安装驱动程序,打开一个设备句柄,然后发送 I/O 控制代码0x9B0C1EC4(用于内存读取)和0x9B0C1EC8(用于内存写入)。DBUtil v2.3 支持从 Windows Vista 到 Windows 11 Build 21H2。请注意,该驱动程序不支持 Windows 11 Build 22H2,因为 Microsoft 已正确更新驱动程序阻止列表。这将阻止驱动程序加载。此外,在 Windows 10 上,由于驱动程序无法停止且正在运行,因此只能在重新启动后手动删除。在 Windows 7 上,删除没有问题。

9. DBUtil v2.5

易受攻击的驱动程序 DBUtil v2.5 随许多戴尔工具一起提供。我们将在 Dell BIOS 更新工具 v1.3.1 (2020 年 4 月 9 日)、v1.4.4 (2020 年 6 月 30 日)、v1.5.0 (2020 年 9 月 9 日)、v1.5.1 (2020 年 9 月 30 日) 和 v1.7.0 (2020 年 11 月 20 日) for OptiPlex 7070 系统中找到该驱动程序。同样,下载仍可在以下 URL 获取:

我们还可以从以下 URL 的戴尔驱动程序搜索页面获取:

从可执行文件中提取驱动程序有点复杂。我们需要使用 OllyDbg 加载可执行文件OptiPlex_7070_1.3.1.exe,并在驱动程序解压完成后立即停止执行。要手动解压 DBUtil v2.5,请遵循以下步骤:

  • 注意:这些步骤必须在 x64 版本的 Windows 上进行,否则将解压 32 位驱动程序而不是 64 位驱动程序!我们也不能再使用 Windows 7,因为缺少一些 DLL 导入。
  • 以管理员身份安装并运行 OllyDbg v1.10
  • 菜单 > 文件 > 打开 > 选择OptiPlex_7070_1.3.1.exe > 打开
  • 右键单击反汇编器窗口 > 搜索 > 当前模块中的名称(标签)
  • 名称窗口中,键入CreateProcessA > 右键单击它 > 查找导入引用 > 右键单击 > 在所有命令上设置断点
  • 转到反汇编器窗口并按 F9 运行可执行文件。

    即使我们没有戴尔机器,可执行文件也会运行并为我们解压驱动程序。

  • 可执行文件将停止执行并在此断点CreateProcessA处命中。
  • 反汇编器窗口应如下所示:

  • 断点触发后,我们可以在目录C:\Users\<UserName>\AppData\Local\Temp中找到解压后的驱动程序文件。
  • 驱动程序由以下文件组成:
    • C9632CF058AE4321B6B0B5EA39B710FE
    • DBUtilDrv2.cat
    • DBUtilDrv2.inf
    • DBUtilDrv2.Sys
  • 名为C9632CF058AE4321B6B0B5EA39B710FE的文件是一个可执行文件,它通过调用CreateProcessA来启动。此 EXE 将 INF 文件路径作为第一个参数来安装驱动程序。
  • 现在我们可以复制驱动程序文件并关闭OllyDbg

DBUtil v2.5 驱动程序文件具有以下属性:

Name    : DBUtilDrv2.Sys
Type    : Driver sys file
CVE ID  : CVE-2021-36276
SHA-1   : 90A76945FD2FA45FAB2B7BCFDAF6563595F94891
SHA-256 : 2E6B339597A89E875F175023ED952AAAC64E9D20D457BBC07ACF1586E7FE2DF8
MD5     : DACB62578B3EA191EA37486D15F4F83C

Name    : DBUtilDrv2.inf
Type    : Driver inf file
CVE ID  : CVE-2021-36276
SHA-1   : C40EBB395CB79C3CF7CA00F59F4DC17930435FC5
SHA-256 : 4E2AA67DAAB4C4ACAC3D6D13490F93D42516FA76B8FDA87C880969FC793A3B42
MD5     : A642273BEF0CA2D15F7D5E04673A4FC4

Name    : DBUtilDrv2.cat
Type    : Driver catalog file
CVE ID  : CVE-2021-36276
SHA-1   : 23BBC48543A46676C5CB5E33A202D261A33704FE
SHA-256 : 4B93FC56DB034BFEBB227B1E2AF1B5E71CC663FFEFFE3B59618F634C22DB579D
MD5     : E6CA7859C63FC37D6C4357C315F13CF4

Name    : C9632CF058AE4321B6B0B5EA39B710FE
Type    : Driver installer file
CVE ID  : CVE-2021-36276
SHA-1   : D568AC037ACA15BF5DF653F56A11021E15C29EA6
SHA-256 : 43DBBD5D6E65A62EB820967E3A302B0EB0D29DA644BDD2177F485EAD02EF83E4
MD5     : 014E30A60EB1497D9F88833606D3454C 

可执行驱动程序安装程序文件C9632CF058AE4321B6B0B5EA39B710FE在不同版本之间会略有变化。

该漏洞自 2021 年起就存在,允许经过身份验证的用户读取和写入任意内存。这可用于权限提升和以高权限执行代码。我们仅使用该驱动程序读取和写入 DSE 变量以禁用驱动程序签名强制。

我们只需安装驱动程序,打开一个设备句柄,然后发送 I/O 控制代码0x9B0C1EC4(用于内存读取)和0x9B0C1EC8(用于内存写入)。DBUtil v2.5 支持 Windows 10 版本 1507 及更高版本。请注意,该驱动程序无法在旧版操作系统上安装,因为缺少依赖的 KMDF 库版本 1.15。

10. DBUtil v2.6

易受攻击的驱动程序 DBUtil v2.6 随许多戴尔工具一起提供。我们将在 Dell BIOS 更新工具 v1.7.2 (2021 年 4 月 14 日) for OptiPlex 7070 系统中找到该驱动程序。下载仍可在以下 URL 获取:

我们可以在以下 URL 的戴尔驱动程序搜索页面获取:

驱动程序以与 DBUtil v2.5 相同的方式手动提取。DBUtil v2.6 驱动程序文件具有以下属性:

Name    : DBUtilDrv2.Sys
Type    : Driver sys file
CVE ID  : CVE-2021-36276
SHA-1   : 79FA541D22A2707B688890AA5F7CEB4016100823
SHA-256 : 4720B202C4E6DD919222FE7B1F458705C0ED1CCC17EC4BA72A31EEF8559B87C7
MD5     : 5EC88D1DD3DB03CE51DD718C7BB801ED

Name    : DBUtilDrv2.inf
Type    : Driver inf file
CVE ID  : CVE-2021-36276
SHA-1   : 03906D454CE6AD329FA9CC97BBDB0623F5F9A495
SHA-256 : 6E8A9FA6A0354B1189A36EB9E29673050BCACB003DE8D15916491E6231E4BC1C
MD5     : 18D6702C41EA493149E727EBB8FFD701

Name    : DBUtilDrv2.cat
Type    : Driver catalog file
CVE ID  : CVE-2021-36276
SHA-1   : 3811C12BB204041D9110ADE387C50AC6C57422E2
SHA-256 : 2A354D4D83F21702AF61FFAAC1ACC385C77AB9ADCBB721EABD4CA812D6108D5F
MD5     : BCA2B79EE9BFD264289C88358859671D

Name    : C9632CF058AE4321B6B0B5EA39B710FE
Type    : Driver installer file
CVE ID  : CVE-2021-36276
SHA-1   : 118BB07A29EF7129BB01C97EA6FB8AAB0FD62FB3
SHA-256 : CAB560CDA02FA0ECB0C7F5E6B9903971A1DB93B9B2B2D708CD656DE90963D57A
MD5     : 2AECF86EC35BAE06E8E462F71DF42B42 

该漏洞自 2021 年起就存在,允许经过身份验证的用户读取和写入任意内存。这可用于权限提升和以高权限执行代码。我们仅使用该驱动程序读取和写入 DSE 变量以禁用驱动程序签名强制。

我们只需安装驱动程序,打开一个设备句柄,然后发送 I/O 控制代码0x9B0C1EC4(用于内存读取)和0x9B0C1EC8(用于内存写入)。DBUtil v2.6 支持 Windows 10 版本 1507 及更高版本。请注意,该驱动程序无法在旧版操作系统上安装,因为缺少依赖的 KMDF 库版本 1.15。

11. DBUtil v2.7

易受攻击的驱动程序 DBUtil v2.7 随许多戴尔工具一起提供。我们将在 Dell BIOS 更新工具 v1.8.4 (2021 年 7 月 29 日)、v1.9.1 (2021 年 8 月 26 日)、v1.10.0 (2021 年 11 月 9 日)、v1.11.0 (2022 年 1 月 12 日)、v1.12.0 (2022 年 1 月 12 日)、v1.13.0 (2022 年 4 月 14 日)、v1.15.0 (2022 年 6 月 15 日)、v1.16.0 (2022 年 8 月 9 日) 和 v1.18.0 (2022 年 11 月 7 日) for OptiPlex 7070 系统中找到该驱动程序。下载仍可在以下 URL 获取:

我们还可以从以下 URL 的戴尔驱动程序搜索页面获取:

驱动程序以与 DBUtil v2.5 相同的方式手动提取。DBUtil v2.7 驱动程序文件具有以下属性:

Name    : DBUtilDrv2.Sys
Type    : Driver sys file
CVE ID  : no CVE ID present yet
SHA-1   : B03B1996A40BFEA72E4584B82F6B845C503A9748
SHA-256 : 71FE5AF0F1564DC187EEA8D59C0FBC897712AFA07D18316D2080330BA17CF009
MD5     : D104621C93213942B7B43D65B5D8D33E

Name    : DBUtilDrv2.inf
Type    : Driver inf file
CVE ID  : no CVE ID present yet
SHA-1   : 19F8DA3FE9DDBC067E3715D15AED7A6530732AB5
SHA-256 : 56ED7FF7299C83B307282CE8D1DEF51D72A3663249E72A32C09F6264348B1DA2
MD5     : B87944DCC444E4C6CE9BB9FB8A9C0DEF

Name    : DBUtilDrv2.cat
Type    : Driver catalog file
CVE ID  : no CVE ID present yet
SHA-1   : 06F2B629E7303AC1254B52EC0560C34D72B46155
SHA-256 : C77C24E945ACC73D6B723F60BCDC0330FF501EEA34B7DA95061101DD1120392A
MD5     : DE39EE41D03C97E37849AF90E408ABBE

Name    : C9632CF058AE4321B6B0B5EA39B710FE
Type    : Driver installer file
CVE ID  : no CVE ID present yet
SHA-1   : F1C876DCB8F330B976CF31BE47F9D510FD76E2D8
SHA-256 : CD2688A74A151B03282388DADB8B6AACA309F2535C8B2B21D1243846D2B259DC
MD5     : 94758F0D75BC41190B05EE25BA565FB9

Name    : WdfCoinstaller01009.dll
Type    : WdfCoinstaller for Kernel-Mode Driver Framework (KMDF) v1.9
CVE ID  : no CVE ID present yet
SHA-1   : C1E821B156DBC3FEB8A2DB4FDB9CF1F5A8D1BE6B
SHA-256 : 3B9264416A78F5EAB2812CD46B14F993815E9DBF5BD145B3876C2F0F93B98521
MD5     : 290464641660EA5CFDDA076CE6DA27C6 

可执行驱动程序安装程序文件“C9632CF058AE4321B6B0B5EA39B710FE”在不同版本之间会略有变化。

该漏洞自 2021 年起就存在,允许经过身份验证的用户读取和写入任意内存。该驱动程序是否可用于权限提升和以高权限执行代码尚未得到证实,但我们非常有信心它仍然有效。我们仅使用该驱动程序读取和写入 DSE 变量以禁用驱动程序签名强制。

我们只需安装驱动程序,打开一个设备句柄,然后发送 I/O 控制代码0x9B0C1EC4(用于内存读取)和0x9B0C1EC8(用于内存写入)。DBUtil v2.7 支持 Windows 8 及更高版本。请注意,要在安装了 Service Pack 1 的 Windows 7 上安装驱动程序,您必须应用 Windows 更新KB3033929以支持 SHA256,因为 Vista 和 Windows 7 只能处理使用 SHA1 摘要算法签名的驱动程序。此驱动程序和 KB 更新将不适用于 Windows 7 Service Pack 1 之前的操作系统。

12. 所有这些易受攻击的驱动程序仍然有效吗?

起初,我们也曾问过同样的问题,并认为“这肯定不起作用了,因为微软会立即修补安全漏洞”。经过一些研究,我们发现答案比这要复杂得多。截至目前,DSE-Patcher 使用的所有上述 5 个驱动程序仍可在任何列出的操作系统上正常工作,包括最新的 Windows 10 和 Windows 11 x64 Build 22H2。只有 DBUtil v2.3 在最新的 Windows 11 x64 Build 22H2 上被阻止,因为驱动程序阻止列表已更新。

问题不仅仅在于微软,因为驱动程序供应商和创建者也必须撤销驱动程序的签名证书。例如,戴尔不会撤销 DBUtil v2.3、v2.5、v2.6 和 v2.7 的证书,因为这些证书也用于签署其他应用程序和驱动程序,一旦证书在操作系统中被全局阻止,这些应用程序和驱动程序将停止工作。这意味着上述安全漏洞可能会存在很多年。目前,我们甚至找不到最新驱动程序 DBUtil v2.7 的 CVE 条目。阻止这些漏洞利用的最佳方法是撤销与易受攻击驱动程序相关的证书。阻止恶意软件使用这些被利用的驱动程序的唯一方法是手动将其列入黑名单。

13. 如何阻止易受攻击的驱动程序?

从 Windows 10 Build 1903、Windows 11 和 Windows Server 2016 及更高版本开始,Microsoft 引入了所谓的“Windows Defender Application Control”(WDAC) 策略。只有这些 Windows 版本支持 WDAC 策略。较旧的操作系统不支持。我们没有找到在较旧 Windows 操作系统上阻止易受攻击驱动程序的方法。AppLocker无法在内核驱动程序级别工作,在证书管理器中阻止证书也毫无作用。

要为 DSE-Patcher 支持的所有五个易受攻击的驱动程序创建示例 WDAC 策略,请执行以下步骤:

  • 创建一个空的 XML 文件C:\Users\Public\DriverBlocklist.xml,将此内容复制到文件中并保存。
    <?xml version="1.0" encoding="utf-8"?>
    <SiPolicy xmlns="urn:schemas-microsoft-com:sipolicy">
      <VersionEx>10.0.25210.0</VersionEx>
      <PlatformID>{2E07F7E4-194C-4D20-B7C9-6F44A6C5A234}</PlatformID>
      <Rules>
        <Rule>
          <Option>Enabled:Unsigned System Integrity Policy</Option>
        </Rule>
        <Rule>
          <Option>Enabled:Advanced Boot Options Menu</Option>
        </Rule>
        <!--
        <Rule>
          <Option>Enabled:Audit Mode</Option>
        </Rule>
        -->
        <Rule>
          <Option>Disabled:Script Enforcement</Option>
        </Rule>
        <Rule>
          <Option>Enabled:Update Policy No Reboot</Option>
        </Rule>
      </Rules>
      <!--File Rules-->
      <FileRules>
        <Allow ID="ID_ALLOW_ALL_1" FriendlyName="" FileName="*" />
        <Allow ID="ID_ALLOW_ALL_2" FriendlyName="" FileName="*" />
        <Deny ID="ID_DENY_RTCORE_64_SHA1" 
         FriendlyName="64-bit MSI RTCore64 v4.6.2 RTCore64.sys Hash Sha1" 
         Hash="4A68C2D7A4C471E062A32C83A36EEDB45A619683" />
        <Deny ID="ID_DENY_RTCORE_64_SHA256" 
         FriendlyName="64-bit MSI RTCore64.sys Hash Sha256" 
         Hash="478C36F8AF7844A80E24C1822507BEEF6314519185717EC7AE224A0E04B2F330" />
        <Deny ID="ID_DENY_RTCORE_64_SHA1_PAGE" 
         FriendlyName="64-bit MSI RTCore64.sys Hash Page Sha1" 
         Hash="84152FA241C3808F8C7752964589C957E440403F" />
        <Deny ID="ID_DENY_RTCORE_64_SHA256_PAGE" 
         FriendlyName="64-bit MSI RTCore64.sys Hash Page Sha256" 
         Hash="A807532037A3549AE3E046F183D782BCB78B6193163EA448098140563CF857CB" />
        <Deny ID="ID_DENY_DBUTIL_V23_64_SHA1" 
         FriendlyName="64-bit Dell DBUtil v2.3 DBUtil_2_3.Sys 
         Hash Sha1" Hash="E3C1DD569AA4758552566B0213EE4D1FE6382C4B" />
        <Deny ID="ID_DENY_DBUTIL_V23_64_SHA256" 
         FriendlyName="64-bit Dell DBUtil v2.3 DBUtil_2_3.Sys Hash Sha256" 
         Hash="FE4270A61DBED978C28B2915FCC2826D011148DCB7533FA8BD072DDCE5944CEF" />
        <Deny ID="ID_DENY_DBUTIL_V23_64_SHA1_PAGE" 
         FriendlyName="64-bit Dell DBUtil v2.3 DBUtil_2_3.Sys Hash Page Sha1" 
         Hash="E09B5E80805B8FE853EA27D8773E31BFF262E3F7" />
        <Deny ID="ID_DENY_DBUTIL_V23_64_SHA256_PAGE" 
         FriendlyName="64-bit Dell DBUtil v2.3 DBUtil_2_3.Sys Hash Page Sha256" 
         Hash="7E2AD3D6D76F4FCD4583B865FFC12DE6C44FC16CBCBB81D480CB067F2A860422" />
        <Deny ID="ID_DENY_DBUTIL_V25_64_SHA1" 
         FriendlyName="64-bit Dell DBUtil v2.5 DBUtilDrv2.sys Hash Sha1" 
         Hash="6BC2AB0F03D7A58685A165B519E8FEE6937526A6" />
        <Deny ID="ID_DENY_DBUTIL_V25_64_SHA256" 
         FriendlyName="64-bit Dell DBUtil v2.5 DBUtilDrv2.sys Hash Sha256" 
         Hash="D7C683EF033AC2DC4DFA0DC61F39931F91C0E8FD19E613F664CB03E14112EF6E" />
        <Deny ID="ID_DENY_DBUTIL_V25_64_SHA1_PAGE" 
         FriendlyName="64-bit Dell DBUtil v2.5 DBUtilDrv2.sys Hash Page Sha1" 
         Hash="66B2E2438725B576428CBEAE3E481148B4B5FD8C" />
        <Deny ID="ID_DENY_DBUTIL_V25_64_SHA256_PAGE" 
         FriendlyName="64-bit Dell DBUtil v2.5 DBUtilDrv2.sys Hash Page Sha256" 
         Hash="C60578FAD95216EF74BCD9661A562C0DDC2C8697D64B546F59A7EF85F71D3814" />
        <Deny ID="ID_DENY_DBUTIL_V26_64_SHA1" 
         FriendlyName="64-bit Dell DBUtil v2.6 DBUtilDrv2.sys Hash Sha1" 
         Hash="4D1E9A5F3F05F244E68286723E70F3202FB4E4A5" />
        <Deny ID="ID_DENY_DBUTIL_V26_64_SHA256" 
         FriendlyName="64-bit Dell DBUtil v2.6 DBUtilDrv2.sys Hash Sha256" 
         Hash="462CD6DB3C0BE714DD751466D5871C111812FAF392C468C81A88CB0DA4783458" />
        <Deny ID="ID_DENY_DBUTIL_V26_64_SHA1_PAGE" 
         FriendlyName="64-bit Dell DBUtil v2.6 DBUtilDrv2.sys Hash Page Sha1" 
         Hash="D66BC7C933EC056A9B303AE9A094CC6DA1F83823" />
        <Deny ID="ID_DENY_DBUTIL_V26_64_SHA256_PAGE" 
         FriendlyName="64-bit Dell DBUtil v2.6 DBUtilDrv2.sys Hash Page Sha256" 
         Hash="68D50D19203D6045C9385B4B5D2CC92A8F3946507F5BC1E566B79C18E89DDB8D" />
        <Deny ID="ID_DENY_DBUTIL_V27_64_SHA1" 
         FriendlyName="64-bit Dell DBUtil v2.7 DBUtilDrv2.sys Hash Sha1" 
         Hash="D46AE9BCC746CA408FBB55FB0D61B638720A8F25" />
        <Deny ID="ID_DENY_DBUTIL_V27_64_SHA256" 
         FriendlyName="64-bit Dell DBUtil v2.7 DBUtilDrv2.sys Hash Sha256" 
         Hash="7BACB353363CC29F7F3815A9D01E85CD86202D92378D1AB1B11DF1AB2F42F40A" />
        <Deny ID="ID_DENY_DBUTIL_V27_64_SHA1_PAGE" 
         FriendlyName="64-bit Dell DBUtil v2.7 DBUtilDrv2.sys Hash Page Sha1" 
         Hash="F0A5923AEF58A074FC1E388BDF086078BFC514EB" />
        <Deny ID="ID_DENY_DBUTIL_V27_64_SHA256_PAGE" 
         FriendlyName="64-bit Dell DBUtil v2.7 DBUtilDrv2.sys Hash Page Sha256" 
         Hash="17AE4DFC31BDE054108E5598551515F4B4B46367F6D4324F087201B8038A4E3D" />
      </FileRules>
      <!--Driver Signing Scenarios-->
      <SigningScenarios>
        <SigningScenario Value="131" ID="ID_SIGNINGSCENARIO_DRIVERS_1" 
         FriendlyName="Auto generated policy on 09-19-2022">
          <ProductSigners>
            <FileRulesRef>
              <FileRuleRef RuleID="ID_ALLOW_ALL_1" />
              <FileRuleRef RuleID="ID_DENY_RTCORE_64_SHA1" />
              <FileRuleRef RuleID="ID_DENY_RTCORE_64_SHA256" />
              <FileRuleRef RuleID="ID_DENY_RTCORE_64_SHA1_PAGE" />
              <FileRuleRef RuleID="ID_DENY_RTCORE_64_SHA256_PAGE" />
              <FileRuleRef RuleID="ID_DENY_DBUTIL_V23_64_SHA1" />
              <FileRuleRef RuleID="ID_DENY_DBUTIL_V23_64_SHA256" />
              <FileRuleRef RuleID="ID_DENY_DBUTIL_V23_64_SHA1_PAGE" />
              <FileRuleRef RuleID="ID_DENY_DBUTIL_V23_64_SHA256_PAGE" />
              <FileRuleRef RuleID="ID_DENY_DBUTIL_V25_64_SHA1" />
              <FileRuleRef RuleID="ID_DENY_DBUTIL_V25_64_SHA256" />
              <FileRuleRef RuleID="ID_DENY_DBUTIL_V25_64_SHA1_PAGE" />
              <FileRuleRef RuleID="ID_DENY_DBUTIL_V25_64_SHA256_PAGE" />
              <FileRuleRef RuleID="ID_DENY_DBUTIL_V26_64_SHA1" />
              <FileRuleRef RuleID="ID_DENY_DBUTIL_V26_64_SHA256" />
              <FileRuleRef RuleID="ID_DENY_DBUTIL_V26_64_SHA1_PAGE" />
              <FileRuleRef RuleID="ID_DENY_DBUTIL_V26_64_SHA256_PAGE" />
              <FileRuleRef RuleID="ID_DENY_DBUTIL_V27_64_SHA1" />
              <FileRuleRef RuleID="ID_DENY_DBUTIL_V27_64_SHA256" />
              <FileRuleRef RuleID="ID_DENY_DBUTIL_V27_64_SHA1_PAGE" />
              <FileRuleRef RuleID="ID_DENY_DBUTIL_V27_64_SHA256_PAGE" />
            </FileRulesRef>
          </ProductSigners>
        </SigningScenario>
        <SigningScenario Value="12" ID="ID_SIGNINGSCENARIO_WINDOWS" 
    FriendlyName="Auto generated policy on 09-19-2022">
          <ProductSigners>
            <FileRulesRef>
              <FileRuleRef RuleID="ID_ALLOW_ALL_2" />
            </FileRulesRef>
          </ProductSigners>
        </SigningScenario>
      </SigningScenarios>
      <HvciOptions>0</HvciOptions>
      <Settings>
        <Setting Provider="PolicyInfo" Key="Information" ValueName="Name">
          <Value>
            <String>Microsoft Windows Driver Policy</String>
          </Value>
        </Setting>
        <Setting Provider="PolicyInfo" Key="Information" ValueName="Id">
          <Value>
            <String>10.0.25210.0</String>
          </Value>
        </Setting>
      </Settings>
      <PolicyTypeID>{A244370E-44C9-4C06-B551-F6016E563076}</PolicyTypeID>
    </SiPolicy>
  • 以管理员身份打开 Windows PowerShell,然后输入以下命令来应用策略:
    # convert policy to binary form and save it to 
    # "C:\Windows\System32\CodeIntegrity\SiPolicy.p7b"
    ConvertFrom-CIPolicy -XmlFilePath "C:\Users\Public\DriverBlocklist.xml" 
    -BinaryFilePath "$Env:windir\System32\CodeIntegrity\SiPolicy.p7b"
    # update policy without reboot
    Invoke-CimMethod -Namespace "root\Microsoft\Windows\CI" 
          -ClassName PS_UpdateAndCompareCIPolicy 
          -MethodName Update 
          -Arguments @{ FilePath = "$Env:windir\System32\CodeIntegrity\SiPolicy.p7b" }

之后,DSE-Patcher 将不再工作。驱动程序可以被解压,但无法安装,并在 Windows 中被成功阻止。在事件查看器中,我们会在“系统”和“安全”类别中看到以下事件:

如果您想在 XML 文件中添加自定义的易受攻击驱动程序,您必须计算 SHA1 和 SHA256 哈希以及页面哈希。这些哈希与正常的 SHA1 和 SHA256 文件哈希不同,因为一些数据(如可执行文件校验和和附加的证书)被排除在外。计算正确 Authenticode 校验和的一种简单方法是使用hfiref0x的工具Authenticode Hash Calc。您可以在以下 URL 下载源代码和二进制文件:

14. 致谢和下载链接

衷心感谢以下开发者:

包含所有必要文件的完整 DSE-Patcher 套件可从 Sourceforge 下载。

感谢您的关注和对此主题的兴趣。

历史

  • 2022 年 11 月 27 日:版本 1.0
© . All rights reserved.