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

如何检测及防护基于CVE-2017-0005漏洞的权限提升攻击

来源:本站整理 作者:佚名 时间:2017-08-22 TAG: 我要投稿

一、前言
2017年3月14日,微软公布了安全公告MS17-013,修复了CVE-2017-0005漏洞。CVE-2017-0005漏洞位于Windows Win32k组件中,攻击者利用该漏洞可能实现权限提升。根据合作伙伴的可信报告,我们发现了该漏洞的零日(zero-day)利用方法。漏洞利用的目标系统为老版本的Windows系统,攻击者可借此在目标系统上提升进程权限。
在本文中,我们详细分析了漏洞利用方法的技术细节,评估了Windows 10周年更新版(于2016年8月份发布)对漏洞的防御效果,同时也评估了一些缓解措施的效果,比如SMEP(Supervisor Mode Execution Prevention,管理模式执行保护)以及VBS(virtualization-based security,基于虚拟化的安全)。此外,我们也展示了Windows在创造者更新(Creators Update)中带来的Windows Defender ATP(Windows Defender Advanced Threat Protection)的增强功能,Windows Defender ATP可以检测攻击者实施的权限提升(elevation-of-privilege,EoP)攻击行为,自然也能检测与该漏洞有关的权限提升攻击行为。
二、权限提升攻击细节
经过对漏洞利用代码的审计分析后,我们发现此次EoP攻击的目标为运行Windows 7以及Windows 8的主机。攻击者精心构造了利用工具,避免其运行在较新的平台上。
漏洞利用工具的执行过程中的各个阶段以及对应的函数如图1所示。

2.1 阶段1&2:解密器以及API解析器
为了保护主功能代码,攻击者使用AES-256算法对初始阶段的PE文件进行加密。为了加载下一阶段的代码,程序需要将某个密码作为参数传递给主入口函数。代码中使用了CryptHashData这个API,将传入的密码作为密钥来解密下一阶段的载荷。
第2阶段充当了一个中间阶段的角色,这个阶段用来解析API函数。这一阶段所做的API解析工作与shellcode或者位置无关(position-independent)代码的运行过程类似。
GetProcAddress API解析过程的部分代码如下所示。这部分代码似乎会混淆后续的载荷,阻止对其的安全分析。

2.3 阶段3:避免在新平台上运行
在阶段3中,利用工具会执行一些环境检查过程,特别是会检查操作系统平台以及具体的版本信息。攻击者借此确保漏洞利用代码运行在存在漏洞的系统上(具体说来,这些系统为Windows 7以及Windows 8),它们较少启用对应的漏洞防护功能。

从代码中我们可知,工具专门针对特定版本的Windows系统研发,具体版本为:
主版本号(Major release version)为5;
主版本号为6,次版本号(minor version)为0、1或者2。
这些版本对应的是Windows 2000以及Windows 8之间的Windows操作系统,其中不包含Windows 8.1以及Windows 10。此外,仔细研究其中的系统架构检查代码后,我们发现漏洞利用代码针对的是64位操作系统
下一阶段的载荷通过DLL反射技术完成加载。
2.4 阶段4:漏洞利用程序
环境检查通过后,攻击代码开始真正利用CVE-2017-0005这个Windows内核漏洞,最终造成内存崩溃,实现代码权限提升目的。
通过破坏PALETTE.pfnGetNearestFromPalentry中的一个指针,程序可以实现内存空间中的代码执行。微软安全研究员一直在密切跟踪这种利用技术,这种技术可以通过精心构造的PALETTE对象实现在内核中执行代码。此前我们在Duqu安全事件的一个样本中观察到这种漏洞利用技术,并于Virus Bulletin 2015的演讲中介绍过这种技术。
如下代码片段中,我们可以看到PALETTE函数指针处于损坏状态:

漏洞利用代码调用NtGdiEngBitBlt这个原生API来触发win32k!XLATEOBJ_iXlate函数,后者使用了已损坏的那个处理函数。这样一来,控制流就会传递给之前已分配的一段shellcode。相对比而言,Duqu 2.0中的漏洞利用代码使用了Gdi32.dll中的GetNearestPaletteIndex函数,以便将程序执行权传递给损坏的回调处理函数。虽然这两个漏洞利用代码在某些地方有些相似,但根据这个不同点,我们可以判定这两个漏洞利用代码并不相关,此类漏洞利用技术有非常翔实的参考文档,因此也能解释这两段利用代码的相似性。
漏洞利用代码使用动态创建的系统调用(syscall)代码片段来调用原生的Windows API,如下所示。

shellcode执行期间的调用栈如下所示:

shellcode执行后,利用程序会使用一种常见的令牌交换(token-swapping)技术来将当前进程的权限提升到SYSTEM权限。在类似的EoP漏洞利用中我们经常可以看到这种技术。

[1] [2]  下一页

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