关闭驱动校验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大小的数据,而v2、v5、v4都来自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,查找方法:
- 在
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/