锦州市广厦电脑维修|上门维修电脑|上门做系统|0416-3905144热诚服务,锦州广厦维修电脑,公司IT外包服务
topFlag1 设为首页
topFlag3 收藏本站
 
maojin003 首 页 公司介绍 服务项目 服务报价 维修流程 IT外包服务 服务器维护 技术文章 常见故障
锦州市广厦电脑维修|上门维修电脑|上门做系统|0416-3905144热诚服务技术文章
在Windows 7 x64环境下CVE-2018-8120的漏洞利用分析

作者: 佚名  日期:2018-06-09 19:22:36   来源: 本站整理

 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 函数触发漏洞



热门文章
  • 机械革命S1 PRO-02 开机不显示 黑...
  • 联想ThinkPad NM-C641上电掉电点不...
  • 三星一体激光打印机SCX-4521F维修...
  • 通过串口命令查看EMMC擦写次数和判...
  • IIS 8 开启 GZIP压缩来减少网络请求...
  • 索尼kd-49x7500e背光一半暗且闪烁 ...
  • 楼宇对讲门禁读卡异常维修,读卡芯...
  • 新款海信电视机始终停留在开机界面...
  • 常见打印机清零步骤
  • 安装驱动时提示不包含数字签名的解...
  • 共享打印机需要密码的解决方法
  • 图解Windows 7系统快速共享打印机的...
  • 锦州广厦电脑上门维修

    报修电话:13840665804  QQ:174984393 (联系人:毛先生)   
    E-Mail:174984393@qq.com
    维修中心地址:锦州广厦电脑城
    ICP备案/许可证号:辽ICP备2023002984号-1
    上门服务区域: 辽宁锦州市区
    主要业务: 修电脑,电脑修理,电脑维护,上门维修电脑,黑屏蓝屏死机故障排除,无线上网设置,IT服务外包,局域网组建,ADSL共享上网,路由器设置,数据恢复,密码破解,光盘刻录制作等服务

    技术支持:微软等