CVE-2018-8453漏洞分析利用

阅读量    58007 | 评论 3   稿费 180

分享到: QQ空间 新浪微博 微信 QQ facebook twitter

概述

微软发布了他们的安全公告,修补了CVE-2018-8453等若干漏洞。CVE-2018-8453是卡巴斯基实验室于今年8月份发现的win32k.sys漏洞。我们于2018年8月17日向Microsoft报告了此漏洞,Microsoft已确认此漏洞并将其指定为CVE-2018-8453。

Alt img1

在2018年8月,我们的自动漏洞防护(AEP)系统检测到一个尝试利用微软Windows操作系统中的漏洞的案例。对此案例的进一步分析使我们发现了win32k.sys中的0day漏洞。exploit代码会在恶意软件安装程序的第一阶段时被执行,用于获得一些必要的权限从而能在受害者电脑上造成更持久的攻击。该漏洞利用代码质量很高,其设计目的便是可靠地利用尽可能多的微软Windows各版本系统,包括Windows 10 RS4。

到目前为止,我们只检测到非常少数利用此漏洞进行的攻击行为,受害者位于中东。

卡巴斯基实验室的技术产品通过以下技术主动检测到该漏洞:

  1. 基于端点的行为检测引擎和自动化漏洞攻击防御
  2. 卡巴斯基反目标攻击平台(KATA)高级沙盒和反恶意软件引擎技术

卡巴斯基实验室对这次案例中的漏洞检测定义如下:

  • HEUR:Exploit.Win32.Generic
  • HEUR:Trojan.Win32.Generic
  • PDM: Exploit.Win32.Generic

客户可以通过卡巴斯基情报获取有关此攻击的更多信息。
联系方式:intelreports@kaspersky.com

 

技术细节

CVE-2018-8453是一种”释放后使用”(UAF)类型的漏洞,位于win32kfull!xxxDestroyWindow中,类似于一个年份久一些的漏洞—CVE-2017-0263。CVE-2017-0263漏洞最初由Sofacy APT组织于2017年,与一个PostScript漏洞一起进行部署验证。

为了对漏洞做技术分析,我们完整地逆向了所获得的ITW利用样本,并且重写了一个完整的POC。

利用此漏洞的关键在于通过钩子从而得到执行的一系列事件,钩子被挂在三个用户模式的回调函数(fnDWORDfnNCDESTROY,fnINLPCREATESTRUCT)上。该漏洞通过替换掉KernelCallbackTable中的函数指针来装载这些钩子。

img2内核回调表中的钩子函数

fnINLPCREATESTRUCT钩子中,我们的exploit通过显式地指定位置来初始化”SysShadow“窗口。

img3fnINLPCREATESTRUCT上的Usermode挂钩初始化SysShadow

当处理WM_LBUTTONDOWN消息时,fnDWORD钩子会在父节点上执行DestroyWindow函数,导致窗口被标记为空闲,并且随后被垃圾收集器释放。

问题的关键点位于DestroyWindow函数运行期间被执行的fnNCDESTROY钩子。它会执行NtUserSetWindowFNID系统调用,该调用包含一个逻辑缺陷,可以绕过检查窗口是否被标记为FNID_FREED而直接改变窗口的fnid状态位。

img4NtUserSetWindowFNID中的易受攻击的代码

窗口的fnid状态位位于tagWND结构体中的0x02a偏移量处:

kd> dt win32k!tagWND 
... 
+ 0x02a fnid:Uint2B

最初滚动条被创建时,它的值为FNID_SCROLLBAR(0x029A)

下图显示了执行NtUserSetWindowFNID系统调用前后的fnid值:

img5在执行NtUserSetWindowFNID系统调用之前和之后的滚动条fnid

我们可以通过ReactOS源码来获取并检查新的fnid值:

/ * NtUserSetWindowFNID的FNID,NtUserMessageCall * / 
#define FNID_SCROLLBAR 0x029A 
... 
#define FNID_BUTTON 0x02A1 
... 
#define FNID_FREED 0x8000 / *正在释放的窗口... * /

这个动作会导致第一个滚动条被销毁,而系统同时还保留着一个对”SysShadow”类的引用,因为滚动条fnid不再被标记为FNID_FREED,而是FNID_BUTTON。

为了成功回收释放的内存池,该exploit还包含了许多不同的风水策略。喷射程序取决于被利用的系统的版本,由于exploit可以影响到很多种操作系统,所以对应各种系统它有以下5个独立的堆喷射函数:

img6支持的堆喷射程序

对于最新的版本(Windows 10 RS4),喷射策略非常复杂。内核受到不同大小的位图对象喷射。这就需要耗尽内存分配器的资源,从而最终绕过新版本Windows中得到显著改进的低碎片堆安全缓解技术(Low Fragmentation Heap security mitigations):

img7用于Windows RS4 17134的堆风水技术

这会导致如下的内存布局,其中USERTAG_SCROLLTRACK是释放后的池分配。

img8释放滚动条堆分配

分配另一个滚动条时,SysShadow类的内存引用会被重用,但是其内容受攻击者控制,因为释放的Usst(ffffee30044b2a10)和Gpbm(ffffee30044b2a90)池合并为一个块:

img8释放的内存与后面的池合并

导致即使是在最新版本的Windows系统上,也可以实现使用GDI Bitmap原语的、强大的任意内核读/写。

成功利用之后,一个略做修改、用于偷取token的payload会被用于交换当前进程和SYSTEM EPROCESS结构中的token。

img8修改后的令牌窃取payload进程

到目前为止,当exploit被打包在恶意软件安全程序中时,我们已经在一些针对性攻击中观察其被使用。安装程序会请求系统的特权从而安装payload。payload被复杂地嵌入到系统,从而使得攻击者可以持久地访问受害者机器。payload的一些主要特征包含以下:

  1. 会使用带有SMBIOS UUID的SHA-1的AES-256-CBC套件加密主要payload(这使得如果SMBIOS UUID未知的话,将无法在受害者机器之外的其它机器上解密payload)
  2. 使用Microsoft BITS(后台智能传输服务)与其C&C服务器进行通信,这是一种不寻常的技术
  3. 将主要payload存储在硬盘上一个随机命名的文件中;装载程序包含该文件名的哈希值,会尝试通过比较windows目录中的全部文件的文件名哈希值来找到payload。

客户可以通过卡巴斯基情报获取有关该恶意软件及其背后的APT攻击的更多信息。
联系方式:intelreports@kaspersky.com

 

受害者

根据我们的遥感勘测,攻击的分布性似乎是高度针对性的,影响了中东地区不超过12名的受害者。

 

归因

在我们的调查过程中,我们发现攻击者使用的是PowerShell后门,这个后门之前被FruityArmor APT独家使用。在这一系列事件与之前的FruityArmor活动之间,所使用的C2域名也存在重叠。这让我们充满信心地评估出,FruityArmor应该和这次CVE-2018-8453攻击有很大的关系。

 

结论

即使0day似乎比以前更频繁,这也是我们第二次发现FruityArmor使用其中一个来分发其恶意软件。这展示出了这个行动者的资源丰富和复杂性,以及他们散布出的先进的终端机器。

到目前为止,这次攻击活动极具针对性,影响了中东地区极少数受害者,可能是袭击者感兴趣的人。然而,特别是在涉及的受害者人数如此之少时,受害者研究结果尚不完整。

我们相信尽管FruityArmor的活动在过去两年中一直在缓慢增加,但这些攻击的极具针对性的特性有助于它们在雷达之下飞行

 

附录I – Indicators of compromise

Domains

weekendstrips[.]net
shelves-design[.]com

分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读
|发表评论
|评论列表
加载更多