0x01 概述

2017年3月14日,Microsoft发布了安全公告MS17-013,来解决CVE-2017-0005提权漏洞,这是Windows Win32k组件中一个允许提权的漏洞。CVE-2017-0005是一个0day漏洞,该漏洞利用的目标是旧版本的Windows,并允许攻击者提升进程权限。

在本文中,我们将详细介绍CVE-2017-0005漏洞利用的技术细节,并对发布于2016年8月的Windows10的一周年更新版本中的漏洞防御效果进行评估,例如Supervisor Mode Execution Prevention(SMEP)和 virtualization-based security(VBS),这里我们还展示准备发布的Windows Defender Advanced Treat Protection威胁防护(Windows Defender ATP )中的Update更新增强功能如何检测攻击者的特权提升(EoP)活动,,包括与漏洞利用相关的EoP活动。

0x02 0day提权漏洞

经过审查其代码后,我们发现这个oday EoP漏洞专门针对运行Windows 7和Windows 8的计算机,这里我们已经搭建好环境了。

攻击包分四个阶段展开:

1-Execution-stages-of-the-exploit-package-and-corresponding-functionality

 

图1.exploit包的执行阶段和相应的功能

阶段1和阶段2:解密和API解析

为了保护主要的恶意利用代码,攻击者使用AES-256算法加密了初始阶段的PE文件。要加载下一阶段的代码,必须将密码作为参数传递给主输入函数。使用CryptHashData API,该密码用作解密下一阶段加载程序的密钥。

阶段2作为执行API解析的中间阶段。这个阶段的API解析程序类似于shellcodeposition-independent代码的工作原理。

以下代码显示了GetProcAddress API解决方案的一部分,这些代码模糊了后续的有效载荷并阻止了分析。

2-Locating-kernel32GetProcAddress-location-using-EAT-traverse

 

图2.使用EAT遍历找到kernel32!GetProcAddress位置

阶段3:避免新的平台

在第3阶段,攻击包执行环境检查,特别是识别操作系统平台和版本号,攻击者要确保漏洞利用代码在内置缓解较少的系统上运行,特别是Windows 7和Windows 8设备。

3-Code-that-performs-environmental-checks (1)图3 .执行环境检查的代码

我们分析漏洞利用代码,揭示了它只在特定的Windows系统版本上运行:

这些版本映射到Windows2000和Windows 8之间的Windows操作系统,除了Windows 8.1和Windows 10版本。此外,在对这些代码体系结构检查例程后,我们发现该漏洞的利用代码主要针对64位系统。

下一阶段的有效载荷通过DLL反射加载。

阶段4 :利用程序

对攻击环境检查后,攻击者开始实际利用Windows内核漏洞CVE-2017-0005的代码,导致任意内存损坏和特权代码执行。

PALETTE.pfnGetNearestFromPalentry变种

通过利用PALETTE.pfnGetNearestFromPalentry函数中损坏的指针,可以在内核空间中执行代码。 Microsoft安全研究人员一直密切关注这种利用技术,该技术的目的是在内核中执行代码,这些代码由一个格式不正确的PALETTE对象提供,我们在Duqu事件的“ Virus Bulletin 2015”演示文稿中也描述了这种相对较旧的漏洞利用技术

以下代码显示了PALETTE函数指针的损坏状态:

4-PALETTE.pfnGetNearestFromPalentry-corruption

图4 .PALETTE.pfnGetNearestFromPalentry 变种

漏洞利用代码会调用本机API NtGdiEngBitBlt来触发使用受损处理程序的win32k!XLATEOBJ_iXlate函数调用,从而将控制流传递给先前分配的shellcode。通过比较发现,Duqu 2.0案例中的漏洞利用代码是使用Gdi32.dllGetNearestPaletteIndex调用来执行传递给损坏的回调处理程序。这个差异清楚地表明,这两个漏洞是无关的,尽管它们的代码及其相似。

漏洞利用动态构建的系统调用代码片段来调用本机Windows API5-Dynamically-constructed-calls-to-kernel-functions

图5.动态构造调用内核函数

在执行shellcode期间,调用堆栈如下所示:6-Example-of-the-call-stack-when-passing-control-flow-using-the-corrupted-function-handler

图6.使用损坏的函数处理程序传递控制流时调用堆栈的示例

一旦shellcode被执行,漏洞会利用一个常见的令牌交换技术来获得当前进程提升的SYSTEM权限。我们可以经常在类似的EoP漏洞中观察到这种技术。7-Token-swapping-shellcode

图7.令牌交换shellcode

0x03  检测和缓解

如上面所述,这个0day攻击并不针对像Windows 10这样的最新系统。如果在Windows 10系统中执行漏洞利用代码来攻击,我们会发现漏洞根本无法运行,它有额外的防御层来防御。

暂时防御 – 预防pfnGetNearestFromPalentry滥用

微软安全研究人员已经对PALETTE.pfnGetNearestFromPalentry作为控制转移点的使用进行了一段时间的跟踪,事实上,这种方法是我们一直在追求的战术缓解。2016年8月,随着Windows 10周年纪念更新,Microsoft发布了可以防止滥用pfnGetNearestFromPalentry的战术缓解。当调用PALETTE函数指针时,缓解会检查PALETTE函数指针的有效性,确保仅调用一组预定义的函数,并防止对结构的任何滥用。

根本缓解

除了上面描述的暂时防御之外,这种漏洞也可以在Windows 10中由SMEP停止,ASLR可以在Windows内核64位的改进以及virtualization-based security (VBS)中停止。

Supervisor模式执行预防(SMEP)

自Windows 8以来就采用了较新的SMEPIntel CPU支持的Strategic缓解功能。

使用SMEP,页表项(PTE)作为User/Superviso(U / S)标志,指定页面处于用户模式或内核模式。如果从内核模式代码调用用户模式页面,SMEP将会访问冲突,并且系统触发错误检查,停止代码执行并报告安全冲突。这种机制大致上停止了使用用户模式分配的可执行页面在内核模式下运行shellcode的尝试,这是EoP漏洞利用的常用方法。8b-SMEP-capturing-exploit-attempt

图8.SMEP捕获攻击尝试

SMEP这样的预防技术可以立即使数百个EoP漏洞利用无效,从而有效地提高攻击者的难度,包括直接从内核调用shellcode的老式利用方法,例如CVE-2017-0005。

要检查计算机是否支持SMEP,可以使用Coreinfo工具。该工具会使用CPUID指令来显示要支持该功能的处理器和平台。Windows 8及更高版本都支持SMEP。下图显示被测CPU支持SMEP

9-Coreinfo-shows-whether-SMEP-is-enabled

图9.Coreinfo显示是否启用了SMEP

Windows内核64位ASLR改进

虽然攻击者正在努力地绕过SMEP来创建更复杂的攻击办法,但我们从安全会议上分享的研究和记录的事件中知道可能有绕过SMEP缓解的方法。这些旁路机制包括使用内核ROP小配件或通过读写(RW)原语进行直接PTE修改。为了回应这些可以预见的开发技术的发展,微软为Windows 10周年提供更新Windows内核64位ASLR改进,并让SMEP拥有强大的随机内核地址,减轻了直接PTE损坏导致的旁路向量。

10-Windows-Kernel-64-bit-ASLR-improvements

图10.Windows内核64位ASLR改进

基于虚拟化的安全性(VBS)

基于虚拟化的安全性(Virtualization Based Security,VBS)增强功能为内核中对执行恶意代码的尝试提供了另一层保护,例如,Device Guard阻止内核内存中非签名区域的代码执行,包括内核EoP代码。Device Guard中的增强功能还可以保护关键的MSR,控制寄存器和描述符表寄存器。CR4控制寄存器位域的未经授权的修改,包括SMEP字段,将立即被阻止。

Windows Defender ATP检测

随着即将到来的Creators Update版本,Windows Defender ATP将能够通过CR4注册修改来检测SMEP旁路的尝试。Windows Defender ATP将监视CR4.SMEP位的状态并报告它不一致的。除此之外,Windows Defender ATP将通过监视进程结构的令牌字段的状态来检测令牌交换尝试。

下图显示Windows Defender ATP捕获利用代码执行令牌交换技术来提升权限。11-Detection-of-token-swapping-technique-on-Windows-Defender-ATP-1024x491

图11.在Windows Defender ATP上检测令牌交换技术

0x04  结论:缓解和行为检测的弹性

CVE-2017-0005的0day漏洞剥离了较新的系统,因为它被停止了,只能设法获得不必要的曝光。攻击者不太注重传统的系统,而是避免了现代硬件和Windows 10周年纪念更新等当前平台中的安全性增强。虽然修补程序继续为特定漏洞提供单点修复,但攻击者的行为强调了内置的漏洞利益减轻措施,如SMEPASLR改进和基于virtualization-based security(VBS)是如何提供弹性。

具有更新的Windows Defender ATP – 现在可用于公开预览,通过检测端点上的漏洞利用行为进一步防御。随着即将到来的增强功能,Windows Defender ATP可以提高警报,以便SecOps人员立即意识到EoP活动,并可以做出相应的响应。可以阅读我们上一篇关于发现跨进程注入的文章,以了解有关Windows Defender ATP如何检测复杂的违规活动的更多信息。

除了加强EoP漏洞的通用检测之外,微软安全研究人员正在积极收集归属于ZIRCONIUM的威胁情报和指标,ZIRCONIUM是使用CVE-2017-0005漏洞利用的活动组织。Windows Defender ATP内置于Windows 10 Enterprise的核心。

 

*参考:technet.microsoft

源链接

Hacking more

...