游乐游手机版
首页/网络安全/文章详情

Windows 7 RC 7100 Win32k.sys内核拒绝服务漏洞

时间:2026-07-24 22:14
Windows 7 的安全漏洞,尤其是在内核驱动层面的缺陷,始终是安全研究人员密切关注的重点。本文讨论的是一例典型的 win32k sys 漏洞,该漏洞在 Windows 7 RC 版本(7100,090421)中被发现,影响范围较为广泛。漏洞位于 NtUserGetDc 和 NtUserGetDc

Windows 7 的安全漏洞,尤其是在内核驱动层面的缺陷,始终是安全研究人员密切关注的重点。本文讨论的是一例典型的 win32k.sys 漏洞,该漏洞在 Windows 7 RC 版本(7100,090421)中被发现,影响范围较为广泛。漏洞位于 NtUserGetDcNtUserGetDcEx 这两个函数中,核心问题在于共享临界锁使用不当,导致任意权限的 GDI 程序都能触发系统蓝屏(BSOD),从而实现拒绝服务攻击。

win32k.sys 是 Windows 的图形驱动程序(GDI 驱动),负责大量图形界面处理任务。由于代码中许多部分继承自 Windows 3.1 时代并经过多次修改,历史包袱沉重,因此漏洞数量较多。在 Windows Vista 中,进入这两个函数前会调用 UserEnterUserCritSec 进入临界区,同时将 gptiCurrent 设置为当前线程的 WIN32THREAD。该函数的具体实现如下:

PWIN32THREAD UserEnterUserCritSec()
{
    PWIN32THREAD pwin32Thread;
    pwin32Thread = ExEnterPriorityRegionAndAcquireResourceExclusive(gpresUser);
    gptiCurrent = pwin32Thread;
    gbValidateHandleForIL = 1;
    return pwin32Thread;
}

ExEnterPriorityRegionAndAcquireResourceShared 是 NTOSKRNL 导出的共享资源锁函数,它锁定 gpresUser 资源,并返回当前线程的 Win32Thread(即 KeGetCurrentThread->Win32Thread)。对应的独占版本 ExEnterPriorityRegionAndAcquireResourceExclusive 功能类似。在 Windows XP 中,则是先调用 KeEnterCriticalRegion,再用 ExAcquireResourceExclusiveLite 锁定 gpresUser,然后通过 PsGetCurrentThread->PsGetThreadWin32Thread 获取线程的 win32kthread,并存储到 gptiCurrent 中。

然而,到了 Windows 7,这两个函数进入前变更为调用 UserEnterSharedCrit,进入共享临界区。其实现非常简单:

PWIN32THREAD EnterSharedCrit()
{
    return ExEnterPriorityRegionAndAcquireResourceShared(gpresUser);
}

注意,这里不再设置 gptiCurrent。实际上,NtUserGetDcNtUserGetDcEx 会将这个函数返回的指针保存在寄存器中,以便后续使用 CurrentWin32Thread 中的数据。从独占临界改为共享临界,本意是提升效率并减少锁竞争,但这种修改存在缺陷。

为什么是缺陷?因为在共享临界模式下,没有修改 gptiCurrent,很可能遇到 gptiCurrent 处于非法状态的情况。例如,如果一个线程没有执行过 PsConvertToGuiThread,那么 gptiCurrent 就会为空。而 WIN32K 中有大量内部例程(通常以 zzzxxx 开头),它们都假设调用自身之前 gptiCurrent 是有效的。其中就包括 xxxDestroyWindow

一个典型的蓝屏触发路径是:NtUserGetDcGetWindowDcGetDcExSpbCheckDceSpbCheckRectSpbCheckRect2FreeSpb。当调用到 FreeSpb 时,需要释放一个 spb 对象,随后进入 FreeSpbHMAssigmentUnlockHMUnlockObjectHMUnlockObjectInternalHMDestroyUnlockedObject,最终调用到 ganti 表中的函数。由于这里是 GetWindowDc,因此会调用 xxxDestroyWindowxxxDestroyWindow 的第一行代码便无检查地引用了 gptiCurrent 指针中的数据,自然直接导致 BSOD。

解决方案

等待微软发布官方补丁。微软可能的修补方向有两个:

  • 牺牲效率,将 NtUserGetDc 等函数中的共享锁替换回独占临界锁。
  • 或者,将所有 NtUserGetDc 等函数可能调用的内部函数中的 gptiCurrent 引用去除,改为不依赖 gptiCurrent 的其他实现。

无论采用哪种方式,该漏洞的根源都在于设计上的“优化”忽略了共享锁下的线程安全性。对于安全研究人员而言,这也提醒我们:在追求性能的同时,绝不能忽视那些看似微小的状态一致性假设。

来源:https://www.jb51.net/hack/16356.html
上一篇Discuz PHP开源论坛安全提问算法解析 下一篇邮箱记事本存储型XSS漏洞分析与修复
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
零基础Python网络安全学习指南,包住宿实战培训
网络安全 · 2026-07-25

零基础Python网络安全学习指南,包住宿实战培训

先抛出几个核心判断:网络安全人才缺口确实已经超过70万。这个数字不算夸张,各大招聘网站上安全岗位的薪资涨幅和需求增长都是实实在在的。但实话实说,行业真正缺的是能上手干活的人,不是只懂几个理论概念的新手。因此,一套扎实且成体系的训练方案,对于零基础转行或进阶提升就显得格外关键。 从零基础到能够独立应对

网络安全定义与核心概念详解
网络安全 · 2026-07-25

网络安全定义与核心概念详解

谈到网络安全,不同组织与标准体系对其定义虽有差异,但核心目标高度统一:保护信息与系统不受威胁侵害。以下梳理几种主流定义—— 什么是网络安全? 国际标准化组织(ISO)在ISO-74982文献中将安全定义为:最大程度地降低数据和资源遭受攻击的可能性。该定义虽简短,却精准点出安全的本质——即风险控制。

IIS 7.0网站漏洞利用与修复方法指南
网络安全 · 2026-07-25

IIS 7.0网站漏洞利用与修复方法指南

先来聊聊当前网络安全领域比较流行的一种实战技巧——以PHP环境为例,详细讲解图片马合并与解析漏洞利用的具体操作步骤。整个过程并不复杂,但细节往往决定成败,大家跟着流程逐步操作即可。 合并一张PHP一句话图片马 首先,我们需要将一句话木马脚本与一张正常图片合并,生成一个看似无害的图片文件。合并方式主要

织梦管理系统后台查找功能教程
网络安全 · 2026-07-25

织梦管理系统后台查找功能教程

通过SQL注入漏洞获取织梦CMS(DedeCMS)管理员密码后,满怀期待地准备进入后台,却发现怎么也找不到登录入口——这种情况其实相当常见。别着急,这里有一个实用的技巧值得尝试。 直接在网站地址后面添加以下路径: include dialog select_media php?f=form1 mur

微软IE浏览器BrowseDialog类(ccrpbds6.dll)拒绝服务安全漏洞深度分析
网络安全 · 2026-07-25

微软IE浏览器BrowseDialog类(ccrpbds6.dll)拒绝服务安全漏洞深度分析

BrowseDialog Class (ccrpbds6 dll) 导致 Internet Explorer 拒绝服务漏洞分析 该漏洞的PoC(概念验证代码)实现极为直接——触发浏览器崩溃的条件简单得令人意外。测试环境采用Windows XP Professional SP2(已安装全部补丁)并运行