本文翻译自: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是一个复杂的植入,攻击者用它来达到在受害者机器中驻留的目的。其中的一些特征包括:
分析过程中,研究任意发现攻击者使用了PowerShell后门,FruityArmor APT组织之前也使用过该后门。其C2也和FruityArmor之前攻击活动中用作C2的域名也交叉。因此,研究任意推测FruityArmor正是背后利用CVE-2018-8453的攻击组织。
这是研究人员第二次监测到FruityArmor组织使用0 day漏洞利用来传播恶意软件。目前的监测结果显示,该攻击活动目标性极强,在影响了中东地区的少量受害者。但目前还不确定攻击者的主要目标。
IOC
域名:
weekendstrips[.]net
shelves-design[.]com