freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

利用CVE-2018-8373 0day漏洞的攻击与Darkhotel团伙相关的分析
2018-08-25 08:00:05

背景

2018年8月15日,网络安全公司趋势科技公开了其在今年7月捕获到的一例在野0day漏洞攻击,该攻击利用了Windows VBScript Engine的代码执行漏洞,经过分析对比发现该0day漏洞和2018年4月360公司首次发现影响IE浏览器并通过Office文档进行攻击的“双杀”漏洞(详见参考[1])使用了多个相同的攻击技术,极有可能是同一团伙所为。

360威胁情报中心第一时间对该0day漏洞进行了分析确认,并通过大数据关联分析确认本次的0day在野攻击与DarkHotelAPT组织存在关联。

来源

2018年8月15日,趋势科技公开了其在今年7月11日捕获到的一例在野0day漏洞攻击技术分析,该漏洞已于公开的前一天被微软修复,漏洞编号为:CVE-2018-8373。

三个“双杀”0day漏洞时间线

CVE-2018-8373其实是今年以来被发现的影响Windows VBScript Engine的第三个漏洞,其中前两个均为360公司的安全研究人员首次发现,这三个漏洞均影响IE浏览器,且可以通过微软Office文档进行攻击。三个“双杀”0day漏洞发现的时间线如下:

CVE 发现时间 修复时间 描述
CVE-2018-8174 2018.4.18 2018.5.8 影响Office和IE的双杀漏洞,在野
CVE-2018-8242   2018.7.10 360安全研究人员发现并上报微软(参考[2])
CVE-2018-8373 2018.7.11 2018.8.14 影响Office和IE的双杀漏洞,在野

溯源与关联

获得打码后的IOC

360威胁情报中心通过大数据分析关联首先得到了趋势科技打码后的IOC地址:


关联同源0day攻击样本

并发现一个攻击时间和趋势科技发现在野“双杀”0day攻击在同一天的疑似使用该0day攻击的office文档样本,该Offce文档样本中内嵌的域名和趋势科技给出的域名格式一致(http://windows-updater.net/stack/ov.php?w= 1\x00who =1)

image.png

确认与DarkHotel关联

得到0day漏洞攻击所使用的域名后我们立即发现,该域名正是360威胁情报中心在今年5月发布的关于DarkHotel APT团伙最新的攻击活动中使用过的域名(详见参考[4]):

image.png

image.png

在360威胁情报中心威胁平台中输入该域名也会立即关联到DarkHotel:

image.png

CVE-2018-8373漏洞分析

如下所示为趋势给出的对应POC触发代码:

image.png

如下为该漏洞和今年5月捕获的CVE-2018-8174的POC对比,CVE-2018-8174主要的漏洞原因在于Class_Terminater中可以对释放的内存对象继续赋值,从而导致释放后重用,而这次的CVE-2018-8373则是类的Propert Get操作中可以修改对应的类成员array的长度,从而导致之后的对象重用:

image.png

如下为对应的的POC代码,POC代码很简单,VulClass类中定义了array成员变量,方法Class_Initialize及Public Default Property Get P。

其中Class_Initialize是VB中一个已经弃用的方法,用于在类创建的时候实现对应的操作,重载后可以在类创建时完成相应的初始化工作,之后被new代替。

Default Property为一个类属性,被Public Default Property Get P重载后,对该类的访问将触发相应的操作,在POC中即执行ReDimPreserve array(1)。

ReDim用于对指定的内存重新分配,其最终在VB引擎中通过SafeArrayRedim函数实现,熟悉VB漏洞的话,可以知道该函数就是之前CVE-2015-6332漏洞的根源:

image.png

POC中首先执行该行代码,new的时候对应执行以下函数VBScriptClass::InitializeClass,由于VulClass类中重载了Class_Initialize方法,因此通过vbscript!CScriptEntryPoint::Call派发进入到对应的编码者实现的Class_Initialize方法中:

Set cls = New VulClass

image.png

Class_Initialize方法中修改对应的array长度:

Private Sub Class_Initialize

    ReDim array(2)

End Sub

可以看到此时生成的Array对象如下所示,其成员变量数为3,对应的pvData为0x0514dfd0:

image.png

之后运行以下代码,VB引擎解析以下代码的顺序是从左自右扫描的,因此首先会进行cls.array(2)的操作:

 cls.array(2) = cls

此时会调用函数vbscript!AccessArray判断对应array(2)是否可访问,如下所示此时获取对应array的内存对象:

image.png

经过一番判断之后,如下所示esi指向对应的array对象,依次获取array中每个成员的大小cbElements,此处为0x10,需要访问赋值的arrayindex,此处为2,pvData,以此计算出array(2)对象的地址0514dfd0(pvData)+2(element)*10(cbElements)=0514ff0,0514ff0会被直接拷贝到求值栈上:

image.png

如下所示拷贝到求值栈上的array(2)地址:

image.png

通过内存访问断点可以跟踪对该地址的引用:

image.png

之后执行等号右侧部分的操作,由于该VulClass类定义了Public Default Property Get P,因此会在赋值前执行其中对应的代码:

 cls.array(2) = cls

该段代码很简单,通过ReDim修改了array数组的长度,属性Preserve表示对数组中已赋值的那些数据不清空 ,但是该处并不影响对应的漏洞触发,该属性删掉也是可以的:

Public Default Property Get P

   ReDim Preserve array(1)

End Property

该重置array内存的操作实际通过函数RedimPreserveArray实现,如下所示传入的array对象:

image.png

经过一番array类型判断后最终会调用SafeArrayRedim,该函数也就是前面提到的漏洞CVE-2015-6332的成因根源,其原型如下所示,*psa为对应array对象,* psaboundNew为新数组的大小+1:

HRESULT SafeArrayRedim(

_Inout_ SAFEARRAY *psa,

_In_ SAFEARRAYBOUND *psaboundNew

);

此时的参数如下所示:

image.png

调用之后可以看到array对象的pvData已经被修改为0x084a0fe0,之前的pvData0514dfd0的内存地址已经被释放,包括我们之前存在赋值栈上的0x0514dff0:

image.png

最终调用函数AssignVar完成赋值,如下所示,具体赋值操作在红框中,之前会有一个VAR::Clear的操作,用于释放之前的引用:

image.png

VAR::Clear会获取对应的array(2)的地址,从而造成崩溃:

image.png

总结一下,cls.array(2)= cls这行代码中,cls.array(2)赋值前会保存array(2)的地址到求值栈上,之后cls中的Public Default Property Get P操作导致赋值前对array()内存进行重新分配,即之前保存到求值栈上的指针指向的内存被释放,该指针在最终的赋值操作中作为赋值的目标地址,从而导致重用崩溃。

image.png

样本分析

360威胁情报中心通过大数据关联到本次0day攻击相关的一些payload文件,并对其中的一个后门程序进行了详细分析。

Zlib

关联到的一个后门程序名为Zlib,其主要功能为:

1、  判断加载进程,如果为mmc.exe,则zlib模块是通过bypassuac的方式加载起来的,然后会通过rundll32加载zlib模块的导出函数uncormpress2(也就是恶意代码主函数),随后调用进程退出。

2、  判断加载进程,如果不是rundll32加载的(Dropper加载),在DllMain函数中创建线程;再判断操作系统是否为64位,如果为64位,直接执行恶意代码主函数,如果不是64位,把zlib模块文件拷贝到programdata目录下,然后通过劫持mmc,运行mmc.exe,加载zlib模块,实现bypassUAC,然后转到第一步。

3、  恶意代码的功能主要是从自身解密出URL,下载恶意payload,解密成dll,修改上线配置信息后,在内存中加载运行。

具体流程如下所示:

image.png

详细分析如下:

样本MD5:80705564b4f89915a04bd4c416cd63bc

样本编译时间是2018年7月12日:

image.png

样本入口首先会判断加载DLL的主程序是什么:

image.png

如果加载DLL的进程为mmc.exe,通过给rundll32.exe传参数调用DLL的uncompress2导出函数:

image.png

而该导出函数也被后面的调用进程不为rundll32.exe的流程的线程调用:

image.png

如果加载的进程不为rundll32.exe,会直接进入MainThread线程,该处会先判断系统版本,如果是64位系统,直接下载并加载shellcode,如果不是的话,会进入LoadByMMC函数:

image.png

该函数的作用主要是把当前DLL复制到ProgramData下,然后运行批处理,通过劫持mmc,绕过UAC加载DLL:

/c REG ADD "HKCU\\Software\\Classes\\CLSID\\{D5AB5662-131D-453D-88C8-9BBA87502ADE}\\InprocServer32" /ve /t REG_EXP AND_SZ /d "%s\\zlib1.dll" /f & 

REG ADD "HKCU\\Environment" /v "COR_PROFILER" /t REG_SZ /d "{D5AB5662-131D-453D-88C8-9BBA87502ADE}" /f & 

REG ADD "HKCU\\Environment" /v "COR_ENABLE_PROFILING" /t REG_SZ /d "1" /f & 

REG ADD "HKCU\\Environment" /v "COR_PROFILER_PATH" /t REG_SZ /d "%s\\zlib1.dll" /f & 

mmc gpedit.msc

image.png

把操作系统版本和进程列表通过HTTP POST的方式发送到解密后的URL:

image.png

image.png

image.png

URL的解密算法,如下:

image.png

待解密的数据,和之前发过的报告的前面的标志是一样的:OCCUR和OCCID

image.png

解密后的域名:

image.png

检验网络返回数据的合法性,还和以前发的报告的样本的算法是相同的:

image.png

解密成DLL后,把DLL里面的URL配置信息修改成当前的url,如图:

image.png

寻找REFUR和REFID 这2个字段,按照同样的加密算法,加密并写回去:

image.png

然后在内存中加载执行恶意代码:

image.png

该恶意代码和之前代码的相同处:

1.解密URL的代码一样;

2.判断网络回来数据的合法性的地方一样。

不同处:

1.动态修改加载的DLL的上线URL和ID;

2.ByPASS uac的方法在DLL里。

另外,360威胁情报中心还关联到一个新的DarkHotel使用的劫持Windows操作系统模块的后门mstfe.dll(MD5: 5ce7342400cce1eff6dc70c9bfba965b),并发现新的C2:

hxxp://documentsafeinfo.com/mohamed/salah.php

hxxp://779999977.com/mohamed/salah.php

image.png

image.png

ID为dr.john-1:

image.png

总结

360威胁情报中心对DarkHotel APT团伙的攻击活动一直保持着持续跟踪,从本次事件可以看出,该攻击团伙在近年中保持着相当高的活跃度,为了达成攻击目的甚至会不惜使用0day漏洞进行攻击。另一方面,以Office文档作为0day攻击载体依然是当前最为流行的攻击方式,而通过微软Office来利用第三方模块0day漏洞的攻击面已经成为黑客研究的热点。

目前,基于360威胁情报中心的威胁情报数据的全线产品,包括360威胁情报平台(TIP)、天眼高级威胁检测系统、360 NGSOC等,都已经支持对此APT攻击团伙最新攻击活动的检测。

IOC

URL
http://documentsafeinfo.com/mohamed/salah.php
http://779999977.com/mohamed/salah.php
http://windows-updater.net/stack/ov.php

参考

[1].http://blogs.360.cn/blog/cve-2018-8174-en/

[2].http://blogs.360.cn/blog/from-a-patched-itw-0day-to-remote-code-execution-part-i-from-patch-to-new-0day/

[3].https://blog.trendmicro.com/trendlabs-security-intelligence/use-after-free-uaf-vulnerability-cve-2018-8373-in-vbscript-engine-affects-internet-explorer-to-run-shellcode/

[4].https://ti.360.net/blog/articles/analysis-of-darkhotel/

原文链接:

https://ti.360.net/blog/articles/analyzing-attack-of-cve-2018-8373-and-darkhotel/

*本文作者360天眼实验室,转载请注明来自FreeBuf.COM

# 0day # windows漏洞 # DarkHotel
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录