安全头条

综合

资讯

资料

CVE-2018-8453 0 day漏洞利用分析

先知 2018-10-11

本文翻译自:https://securelist.com/cve-2018-8453-used-in-targeted-attacks/88151/


10月9日,微软发布更新,修复了CVE-2018-8453漏洞。CVE-2018-8453是Kaspersky实验室8月份发现的win32k.sys中的安全漏洞。

2018年8月,Kaspersky实验室的Automatic Exploit Prevention(AEP,自动化漏洞利用预防)系统检测到利用Windows操作系统漏洞的情况。研究人员分析发现了win32k.sys的0 day漏洞,即CVE-2018-8453。该利用执行的第一步是恶意软件下载器在受害者系统中获取足够的权限,以达到驻留的目的。利用的代码质量很高,可以在不同的Windows是版本上完成漏洞利用,包括windows 10 RS4。

最近,研究人员检测到利用这一漏洞的攻击数量还非常少,受害者主要位于中东地区。

技术细节

CVE-2018-8453是win32kfull!xxxDestroyWindow中的Use-After-Free漏洞,与CVE-2017-0263有点类似。为了对该漏洞进行分析,研究人员逆向了ITW的利用样本,并重写了POC。

漏洞利用是基于一系列的事件,从hook设置到3个用户模式回调函数,包括fnDWORD, fnNCDESTROY, fnINLPCREATESTRUCT。漏洞利用通过替换KernelCallbackTable中的函数指针来安装hooks。

Kernel Callback表中的hook的函数

fnINLPCREATESTRUCT hook中,漏洞利用通过分配位置来初始化SysShadow窗口:

fnINLPCREATESTRUCT初始化SysShadow的Usermode hook

在处理WM_LBUTTONDOWN消息时,fnDWORD hook会执行DestroyWindow函数,并导致window被标记为free,随后由garbage collector释放。

漏洞就位于fnNCDESTROY hook中DestroyWindow函数执行的过程中。Hook会执行NtUserSetWindowFNID syscall,其中修改Windowfnid状态的逻辑是有缺陷的,因为没有检查fnid状态是否被设置为FNID_FREED

NtUserSetWindowFNID中有漏洞的代码

window的fnid状态位于tagWND结构的0x02a处:

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

当scrollbar创建后,值就是FNID_SCROLLBAR (0x029A)

下图是fnid在NtUserSetWindowFNID syscall`执行前后的值:

NtUserSetWindowFNID syscall执行前后Scrollbar fnid的值

然后可以通过验证ReactOS的源码来检查fnid的新值:

/* FNIDs for NtUserSetWindowFNID, NtUserMessageCall */
#define FNID_SCROLLBAR 0x029A
…
#define FNID_BUTTON 0x02A1
…
#define FNID_FREED 0x8000 /* Window being Freed… */

该动作会导致第一个scrollbar被破坏,而系统仍然含有到SysShadow类的引用,scrollbarfnid也不再标记为FNID_FREED,而是标记为FNID_BUTTON

为了成功地收回释放的内存池,漏洞利用含有大量不同的feng shui技术。Spray(喷射)的过程是根据利用的Windows版本来决定的,因为漏洞利用的目标是大量不同版本的操作系统,一共含有5个不同的函数:

漏洞利用支持的Heap spray(堆喷射)过程

在最新支持的版本Windows 10 RS4中,喷射技术相当复杂。Kernel是用不同大小的位图对象来喷射的。这需要耗尽内存分配器以最终绕过最新Windows版本中的Low Fragmentation Heap安全措施。

Windows RS4 17134中的Heap Feng Shui技术

这会导致下面的内存布局,即USERTAG_SCROLLTRACK在释放的池分配中。

释放的scrollbar heap allocation

当另一个scrollbar被分配后,会重用SysShadow类内存引用,但其内容是攻击者控制的,因为释放的Usst (ffffee30044b2a10)Gpbm (ffffee30044b2a90)会合并为一个单独的区块:

释放的分配合并

这可以使用在最新的Windows版本中支持的GDI Bitmap原语来进行任意kernel读写。

成功利用后,一个简单修改的Token窃取payload会用于与SYSTEM EPROCESS结构中的process Token值交换当前进程token值:

修改后的token窃取payload

截止目前,研究人员只发现一小部分攻击中使用了该漏洞利用,该漏洞利用被打包到一个恶意软件安装器中配合使用。安装器需要系统权限才能安装payload,payload是一个复杂的植入,攻击者用它来达到在受害者机器中驻留的目的。其中的一些特征包括:

  • 用SMBIOS UUID 的SHA-1和AES-256-CBC加密payload(如果没有SMBIOS UUID,就不能在机器上解密payload)
  • 使用微软BITS(Background Intelligent Transfer Service后台智能传输服务)与C2进行通信
  • 将主payload文件以随机名保持在硬盘上,含有文件名哈希值的加载器会尝试比较Windows目录中所有文件的哈希来找出payload

归属

分析过程中,研究任意发现攻击者使用了PowerShell后门,FruityArmor APT组织之前也使用过该后门。其C2也和FruityArmor之前攻击活动中用作C2的域名也交叉。因此,研究任意推测FruityArmor正是背后利用CVE-2018-8453的攻击组织。

总结

这是研究人员第二次监测到FruityArmor组织使用0 day漏洞利用来传播恶意软件。目前的监测结果显示,该攻击活动目标性极强,在影响了中东地区的少量受害者。但目前还不确定攻击者的主要目标。

IOC
域名:
weekendstrips[.]net
shelves-design[.]com

全部评论()
邮箱
昵称
密码
确认密码
阅读并接受《用户协议》
使用其他方式登录
微信登陆 QQ登录