关闭驱动校验bypass dse
字数 1695 2025-08-29 08:32:30

利用GDRV.SYS驱动漏洞绕过Windows驱动签名校验(DSE)教学文档

1. 漏洞背景

GDRV.SYS是技嘉(Gigabyte)的一个驱动程序,存在任意地址读写漏洞(CVE-2018-19320)。该漏洞可以用于关闭Windows的驱动签名校验(DSE - Driver Signature Enforcement)。

2. Windows驱动签名校验机制

Windows上的驱动签名校验由ci.dll(位于%WINDIR%\System32\)管理:

  • Windows 8之前:使用全局布尔变量g_CiEnabled控制签名校验
  • Windows 8及以后:使用全局变量g_CiOptions控制签名校验,它是一个标志组合:
    • 0x0:禁用签名校验
    • 0x6:启用签名校验
    • 0x8:测试模式

3. GDRV.SYS漏洞分析

漏洞位于驱动中的0xC3502808分支,该分支实现了memcpy功能,关键代码如下:

v2 = *(__int64 **)(a2 + 24);
*(_QWORD *)(a2 + 56) = 0i64;
if (!v2)
    return 3221225485i64;
v3 = *v2;
v4 = *(unsigned int *)(v2 + 4);
v5 = v2[1];
DbgPrint("Dest=%x,Src=%x,size=%d", *v2, v5, (unsigned int)v4);
if ((_DWORD)v4) {
    v6 = v5 - v3;
    v7 = v4;
    do {
        *(_BYTE *)(v3 - 1) = *(_BYTE *)(v6 + v3);
        v3++;
        --v7;
    } while (v7);
}

这段代码实现了从v5地址向v3地址拷贝v4大小的数据,而v2v5v4都来自IRP参数,形成了任意地址读写漏洞。

4. 漏洞利用方法

4.1 定义数据结构

typedef struct _GIOMEMInput {
    ULONG_PTR Dst;  // 目的地址
    ULONG_PTR Src;  // 源地址
    ULONG Size;     // 大小
} GIOMEMInput, *PGIOMEMInput;

4.2 利用IOCTL调用

NtDeviceIoControlFile(
    DeviceHandle, 
    nullptr, 
    nullptr, 
    nullptr, 
    &IoStatusBlock, 
    IOCTL_GIO_MEMCPY, 
    &MemcpyInput, 
    sizeof(MemcpyInput), 
    nullptr, 
    0
);

通过这个调用可以实现:

  • 读取内核地址内容:将内核地址内容写入到变量中
  • 写入内核地址内容:将变量内容写入内核地址

5. 定位驱动校验变量地址

5.1 Windows 10系统

变量位于CI.dll!g_CiOptions,查找方法:

  1. CI.dll的导出函数CiInitialize中调用了CipInitialize函数
  2. CipInitialize中存在mov cs:g_CiOptions, ecx指令
  3. 通过反汇编找到这条指令即可获取g_CiOptions的地址

5.2 Windows 7系统

变量位于ntoskrnl.exe!g_CiEnabled,查找方法与Windows 10类似。

6. 具体实现步骤

6.1 加载CI.dll到内存空间

6.2 获取CI.dll的基址

使用NtQuerySystemInformation函数,第一个参数设为11,遍历系统模块信息找到CI.dll的基址。

6.3 反汇编机器指令

推荐使用HDE64工具(https://github.com/Cerbersec/HDE64)进行反汇编。

对于不同Windows版本:

  • Windows 10 (18363):在CiInitialize中注意第二次call指令(0xE8)
  • Windows 10 (19044):在CiInitialize中注意第三次call指令(0xE8)

CipInitialize函数中找到mov cs:g_CiOptions, ecx指令,计算偏移地址。

7. 绕过DSE

  1. 使用任意地址写入漏洞覆盖g_CiOptionsg_CiEnabled变量
    • 设置为0表示禁用驱动签名校验
  2. 加载未签名驱动
  3. 重要:立即恢复原始值,因为DSE受PatchGuard保护,长时间修改会导致蓝屏

8. 注意事项

  1. 此方法需要管理员权限
  2. 修改后必须尽快恢复原始值,避免触发PatchGuard
  3. 不同Windows版本可能需要调整查找g_CiOptions的方法
  4. 此技术仅用于研究和授权测试目的

9. 防御措施

  1. 更新系统,修补GDRV.SYS漏洞
  2. 启用Secure Boot
  3. 使用Windows Defender等安全软件监控驱动加载行为
  4. 定期检查系统已加载的驱动程序

10. 参考资源

  1. CVE-2018-19320漏洞详情:https://seclists.org/fulldisclosure/2018/Dec/39
  2. HDE64反汇编工具:https://github.com/Cerbersec/HDE64
  3. Windows内核文档:https://docs.microsoft.com/en-us/windows-hardware/drivers/
利用GDRV.SYS驱动漏洞绕过Windows驱动签名校验(DSE)教学文档 1. 漏洞背景 GDRV.SYS是技嘉(Gigabyte)的一个驱动程序,存在任意地址读写漏洞(CVE-2018-19320)。该漏洞可以用于关闭Windows的驱动签名校验(DSE - Driver Signature Enforcement)。 2. Windows驱动签名校验机制 Windows上的驱动签名校验由 ci.dll (位于 %WINDIR%\System32\ )管理: Windows 8之前 :使用全局布尔变量 g_CiEnabled 控制签名校验 Windows 8及以后 :使用全局变量 g_CiOptions 控制签名校验,它是一个标志组合: 0x0 :禁用签名校验 0x6 :启用签名校验 0x8 :测试模式 3. GDRV.SYS漏洞分析 漏洞位于驱动中的 0xC3502808 分支,该分支实现了memcpy功能,关键代码如下: 这段代码实现了从 v5 地址向 v3 地址拷贝 v4 大小的数据,而 v2 、 v5 、 v4 都来自IRP参数,形成了任意地址读写漏洞。 4. 漏洞利用方法 4.1 定义数据结构 4.2 利用IOCTL调用 通过这个调用可以实现: 读取内核地址内容:将内核地址内容写入到变量中 写入内核地址内容:将变量内容写入内核地址 5. 定位驱动校验变量地址 5.1 Windows 10系统 变量位于 CI.dll!g_CiOptions ,查找方法: 在 CI.dll 的导出函数 CiInitialize 中调用了 CipInitialize 函数 在 CipInitialize 中存在 mov cs:g_CiOptions, ecx 指令 通过反汇编找到这条指令即可获取 g_CiOptions 的地址 5.2 Windows 7系统 变量位于 ntoskrnl.exe!g_CiEnabled ,查找方法与Windows 10类似。 6. 具体实现步骤 6.1 加载CI.dll到内存空间 6.2 获取CI.dll的基址 使用 NtQuerySystemInformation 函数,第一个参数设为11,遍历系统模块信息找到 CI.dll 的基址。 6.3 反汇编机器指令 推荐使用HDE64工具(https://github.com/Cerbersec/HDE64)进行反汇编。 对于不同Windows版本: Windows 10 (18363) :在 CiInitialize 中注意第二次 call 指令(0xE8) Windows 10 (19044) :在 CiInitialize 中注意第三次 call 指令(0xE8) 在 CipInitialize 函数中找到 mov cs:g_CiOptions, ecx 指令,计算偏移地址。 7. 绕过DSE 使用任意地址写入漏洞覆盖 g_CiOptions 或 g_CiEnabled 变量 设置为 0 表示禁用驱动签名校验 加载未签名驱动 重要 :立即恢复原始值,因为DSE受PatchGuard保护,长时间修改会导致蓝屏 8. 注意事项 此方法需要管理员权限 修改后必须尽快恢复原始值,避免触发PatchGuard 不同Windows版本可能需要调整查找 g_CiOptions 的方法 此技术仅用于研究和授权测试目的 9. 防御措施 更新系统,修补GDRV.SYS漏洞 启用Secure Boot 使用Windows Defender等安全软件监控驱动加载行为 定期检查系统已加载的驱动程序 10. 参考资源 CVE-2018-19320漏洞详情:https://seclists.org/fulldisclosure/2018/Dec/39 HDE64反汇编工具:https://github.com/Cerbersec/HDE64 Windows内核文档:https://docs.microsoft.com/en-us/windows-hardware/drivers/