欢迎来到 无奈人生 安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

CVE-2018-8120在Windows 7 x64环境下的漏洞利用分析

来源: 作者: 时间:2019-02-24 19:29 点击: 我要投稿

2018年5月15日,ESET披露了其捕获的PDF文档样本中的两枚0-day漏洞。其中CVE-2018-4990为Adobe PDF阅读器的代码执行漏洞,而CVE-2018-8120则是Windows操作系统Win32k的内核提权漏洞,在获取代码执行权限后通过内核提权漏洞绕过Adobe PDF阅读器的沙盒保护,实现任意代码执行。
360威胁情报中心在2018年5月25日已经发布了《CVE-2018-4990 Adobe Reader 代码执行漏洞利用分析》(详见参考资料[1]),而其中的内核提权漏洞虽然已经有公开的漏洞利用代码,但仅仅是针对Windows 32位环境下的利用。由于大部分用户机器已经是64位操作系统,所以泄露的利用代码危害有限。而在近日,有安全研究人员在GitHub上上传了针对Windows 7 64位环境下CVE-2018-8120的漏洞利用代码,经验证分析该漏洞利用代码真实可用,考虑到漏洞相关的技术细节和验证程序已经公开,所以此漏洞接下来极有可能被利用来执行大规模的攻击。
漏洞分析
在本文中我们试图通过公开的针对Windows 7 64位环境的内核提权POC对漏洞原理和利用过程进行详细分析,并记录整个分析过程。如有分析不当之处敬请谅解。
分析环境:分析和调试的过程将在 Windows 7 x64 为基础的环境中进行
样本来源:https://github.com/unamer/CVE-2018-8120
补丁比较
通过分析安全公告补丁程序可以知道,本次漏洞主要修复了系统中的win32k.sys内核模块文件,我们将64位Windows 7中的win32k.sys文件与未打补丁的文件进行对比,发现本次针对 win32k.sys 的NtUserSetImeInfoEx函数做了以下修补:

可以明显看到,补丁后的函数代码在函数中增加了对窗口站对象tagWINDOWSTATION的成员域spklList的值是否为0的校验,如果值为0则函数直接返回:
修补前的代码:

修补后的代码:

漏洞细节
根据以上对win32k.sys补丁前后改动的代码对比可知,漏洞发生在函数NtUserSetImeInfoEx中。NtUserSetImeInfoEx 是操作系统提供的接口函数,用于将用户进程定义的输入法扩展信息对象设置在与当前进程关联的窗口站中。
窗口站
窗口站是和当前进程和会话(session)相关联的一个内核对象,它包含剪贴板(clipboard)、原子表、一个或多个桌面(desktop)对象等。窗口站 tagWINDOWSTATION 结构体的定义如下:

NtUserSetImeInfoEx执行过程分析
知道了补丁代码修复的部分,我们来看下漏洞函数NtUserSetImeInfoEx的具体实现,此函数只有一个tagIMEINFOEX类型的参数:

整理后的漏洞函数执行过程分析如下:
l 函数先获取当前的窗口站rpwinsta,并从rpwinsta指向的窗口站对象中获取spklList成员

spklList 是指向关联的键盘布局 tagKL 对象链表首节点的指针。键盘布局 tagKL 结构体的定义如下:

l 然后函数从首节点开始遍历键盘布局对象链表,直到节点对象的pklNext成员指回到首节点对象为止。函数判断每个被遍历的节点对象的hkl成员是否与参数 ime_info_ex 指向的源输入法扩展信息对象的hkl成员相等

l 接下来函数判断目标键盘布局对象的piiex成员是否为空,且成员变量 fLoadFlag 值是否为 FALSE。如果是,则把参数 ime_info_ex 的数据拷贝到目标键盘布局对象的piiex成员中

函数的实现过程比较简单,在这里我们可以清楚的看到分析过程的第2步中导致漏洞产生的原因:
在遍历键盘布局对象链表 spklList 的时候并没有判断 spklList 地址是否为 NULL,假设此时 spklList 为空的话,接下来对 spklList 访问的时候将触发访问异常,导致系统 BSOD 的发生。
POC验证
我们使用PowerShell脚本来测试验证该漏洞,以下PowerShell脚本使用CreateWindowStation创建了一个窗口站,并调用函数 SetProcessWindowStation 将创建的窗口站与当前进程关联起来,然后打印出窗口站的HANDLE,最后调用 NtUserSetImeInfoEx 函数触发漏洞:

[1] [2] [3] [4]  下一页

(责任编辑:admin)
【声明】:无奈人生安全网(http://www.wnhack.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱472701013@qq.com,我们会在最短的时间内进行处理。