导语:本报告中出现的IOC(Indicators of Compromise,威胁指标),进一步包括涉及到相关攻击事件的样本文件MD5等哈希值、域名、IP、URL、邮箱等威胁情报信息,由于其相关信息的敏感性和特殊性,所以在本报告中暂不对外披露,在报告中呈现的相
APT-C-06组织在全球范围内首例使用“双杀”0day漏洞(CVE-2018-8174)发起的APT攻击分析及溯源。
披露申明
本报告中出现的IOC(Indicators of Compromise,威胁指标),进一步包括涉及到相关攻击事件的样本文件MD5等哈希值、域名、IP、URL、邮箱等威胁情报信息,由于其相关信息的敏感性和特殊性,所以在本报告中暂不对外披露,在报告中呈现的相关内容(文字、图片等)均通过打码隐藏处理。
若您对本报告的内容感兴趣,需要了解报告相关细节或相关IOC,可与360追日团队通过电子邮件进行联系,另外我们目前只提供电子邮件联系方式:[email protected],敬请谅解!
第一章 概述
日前,360核心安全事业部高级威胁应对团队在全球范围内率先监控到了一例使用0day漏洞的APT攻击,捕获到了全球首例利用浏览器0day漏洞的新型Office文档攻击,我们将该漏洞命名为“双杀”漏洞。该漏洞影响最新版本的IE浏览器及使用了IE内核的应用程序。用户在浏览网页或打开Office文档时都可能中招,最终被黑客植入后门木马完全控制电脑。对此,我们及时向微软分享了该0day漏洞的相关细节,并第一时间对该APT攻击进行了分析和追踪溯源,确认其与APT-C-06组织存在关联。
2018年4月18日,在监控发现该攻击活动后,360核心安全事业部高级威胁应对团队在当天就与微软积极沟通,将相关细节信息提交到微软。微软在4月20日早上确认此漏洞,并于5月8号发布了官方安全补丁,对该0day漏洞进行了修复,并将其命名为CVE-2018-8174。在漏洞得到妥善解决后,我们于5月9日发布本篇报告,对攻击活动和0day漏洞进一步的技术披露。
第二章 中国受影响情况
根据我们监测到的数据来看,此次利用“双杀”0day漏洞发动的攻击影响地区主要集中在一些外贸产业活跃的重点省份,受害目标主要是一些外贸企业单位和相关机构。
第三章 攻击流程分析
此次捕获到的APT攻击相关的诱饵文档为犹太小语种的意第绪语[1]内容,文档通过CVE-2017-0199的OLE autolink漏洞利用方式嵌入恶意网页,所有的漏洞利用代码和恶意荷载都通过远程的服务器加载。
图1
中招用户点击打开诱饵文档后,首先word进程将访问远程的IE vbscript 0day(CVE-2018-8174)网页,漏洞触发后将执行Shellcode,然后再发起多个请求从远程的服务器获取payload数据解密执行。
图2
Payload在执行的过程中word进程会在本地释放3个DLL后门程序,通过powershell命令和rundll32命令分别执行安装后门程序,后门的执行过程使用了公开的UAC绕过技术,并利用了文件隐写技术和内存反射加载的方式来避免流量监测和实现无文件落地加载。
图3 Payload执行流程
攻击的主要过程如下图所示:
图4 攻击整体执行流程
第四章 漏洞分析
1.漏洞修复进程
2018年4月18日,360核心安全事业部高级威胁应对团队监控发现到高危0day漏洞,该漏洞影响最新版本的IE浏览器及使用IE内核的应用程序,且已被发现用于有蓄谋有计划的APT攻击。当天,360核心安全事业部高级威胁应对团队立即与微软积极沟通,将漏洞细节信息提交到微软。微软在4月20日早上确认此漏洞,并于5月8号发布了官方安全补丁,对该0day漏洞进行了修复,将其命名为CVE-2018-8174。
CVE-2018-8174是 Windows VBScript Engine 代码执行漏洞。由于VBScript脚本执行引擎(vbscript.dll)存在代码执行漏洞,攻击者可以将恶意的VBScript嵌入到Office文件或者网站中,一旦用户不小心点击,远程攻击者可以获取当前用户权限执行脚本中的恶意代码。
2.漏洞原理分析
通过静态分析漏洞利用样本,我们发现样本充斥着大量的混淆,所以首先对样本做了去混淆和标识符重命名。
根据我们捕获到漏洞利用样本制作的POC,可以较为直观的分析出漏洞的原理。POC如下:
图5
具体的流程是这样的:
1)先创建了cla1实例赋值给b,再给b赋值0,因为此时b引用技术为1导致cla1的Class_Terminate函数被调用。
2)在Class_Terminate函数中再次将b赋值给c,再将0赋值给b来平衡引用计数。
3)Class_Terminate返回后,b对象指向的内存将会被释放,这样就得到了一个指向被释放对象b内存数据的指针c。
4)如果再次使用其他对象占位这块被释放的内存,那么将导致典型的UAF或者Type Confusion问题。
3.漏洞利用分析
该0 day漏洞利用多次UAF来完成类型混淆,通过伪造数组对象完成任意地址读写,最终通过构造对象后释放来获取代码执行。代码执行并没有使用传统的ROP或者GodMod,而是通过脚本布局Shellcode来稳定利用。
伪造数组达到任意写目的
通过UAF制造2个类的mem成员指向的偏移相差0x0c字节,通过对2个对象mem成员读的写操作伪造一个0x7fffffff大小的数组。
图6
图7
伪造的数组大致情况是:一维数组,元素有7fffffff个,每个元素占用1字节,元素内存地址为0。所以该数组可访问的内存空间为0x00000000到0x7ffffffff*1。因此通过该数组可以任意地址读写。但是在lIlIIl在存放的时候,存放的类型是string类型,故只需要将该数据类型将会被修改为0x200C,即VT_VARIANT|VT_ARRAY,数组类型,即可达到目的。
读取指定参数的内存数据
图8
图9
攻击代码中,主要使用上面的函数来读取参数所指定的内存地址的数据。利用思路是在VBS中数据类型为bstr类型,通过vb中lenb(bstr xx)返回字符串地址前4个字节的内容(即bstr类型size域内容)的特性,获取指定内存读能力。
就是上面的代码所示,假如传进来的参数为addr(0x11223344),首先该数值加4,为0x11223348,然后设置variant类型为8(string类型)。然后调用len函数,发现是BSTR类型,vbscript会认为其向前4字节即0x11223344就是存放长度的地址内存。因此执行len函数,实际上就返回了制定参数内存地址的值。
获取关键DLL基值
1、攻击者通过以下方式泄露CScriptEntryPoint对象的虚函数表地址,该地址属于Vbscript.dll。
图10
2、通过以下方式获取vbscript.dll基地址。
图11
3、由于vbscript.dll导入了msvcrt.dll,因此通过遍历vbscript.dll导入表获取msvcrt.dll基地址, msvcrt.dll又引入了kernelbase.dll、ntdll.dll,最后获取了NtContinue、VirtualProtect函数地址。
图12
绕过DEP执行shellcode
1、利用任意读写的手段修改某个VAR的type类型为0x4d,再赋值为0让虚拟机执行VAR::Clear函数。
图13
2、通过精心控制使代码执行ntdll!ZwContinue函数,第一次参数CONTEXT结构体也是攻击者精心构造的。
图14
3、ZwContinue的第一个参数是指向CONTEXT结构体的指针,CONTEXT结构体如下图所示,可以计算出EIP和ESP在CONTEXT中的偏移。
图15
4、实际运行时CONTEXT中的Eip和Esp的值以及攻击者的意图如下图所示
图16
第五章 Powershell荷载分析
诱饵文档DOC文件被执行之后会启动Powershell命令来执行下阶段的载荷。
图17
首先,Powershell 会对传入的参数名称进行模糊匹配,并且是不区分大小写的。
然后,对混淆的命令执行解密。
图18
接下来,脚本使用特殊的User-Agent 访问URL页面请求下一步的载荷并且执行。
图19
被请求的载荷文件的大小约为199K,代码片段如下。
图20
图21
通过搜索,我们发现这份代码是由invoke-ReflectivePEInjection.ps1[2]修改而来的。代码中的buffer_x86和buffer_x64是同样的功能的不同版本的dll文件,文件的导出模块名:ReverseMet.dll。
DLL文件从配置中解密ip地址,端口和休眠时间信息,解密算法xor 0xA4之后再减去 0x34,代码如下。
图22
解密配置文件从ip地址***.***.**.28端口1021获取下一步的载荷并且执行,连接上tcp端口之后先获取4个字节做大小来申请一块内存,并把后续获取的写入在新的线程中执行获取的shellcode载荷。
图23
由于样本CC服务器的端口已经关闭,所以我们未能获取到下一步的载荷进行分析。
第六章 UAC绕过荷载分析
诱饵文档DOC文件除了使用powershell加载荷载以外,还使用rundll32.exe在本地执行了另一套后门程序。其利用的后门程序有几个值得注意的特点:程序使用了COM接口进行文件Copy操作,实现UAC绕过,并使用了两次系统DLL劫持,利用了cliconfg.exe与SearchProtocolHost.exe的缺省DLL,实现白利用;最后在组件下发过程中,利用了文件隐写技术和内存反射加载的方式来避免流量监测和实现无文件落地加载。
图24
1.Retro(复古)后门执行分析
本次攻击使用的后门程序实际为APT-C-06组织已知的Retro(复古)系列后门,下面来具体分析一下该后门程序的执行流程。
首先通过rundll32执行伪装为zlib库函数的DLL,执行后门安装函数uncompress2和uncompress3。
其使用COM接口进行UAC绕过,将自身DLL拷贝到System32路径下实现DLL劫持,其劫持的目标为cliconfg.exe与SearchProtocolHost.exe。
图25
通过COM接口将AppData目录下的DLL文件copy到System32目录下,命名为msfte.dll和NTWDBLIB.dll。
图26
随后将文件NTWDBLIB.dll拷贝到System目录下,并执行系统自带的cliconfig实现DLL劫持,加载NTWDBLIB.dll。
图27
NTWDBLIB.dll的作用为重启系统服务WSearch,进而实现msfte.dll的启动。
图28
图29
随后脚本会在TEMP目录下生成MO4TH2H0.bat文件并执行,内容为删除系统目录下的NTWDBLIB.DLL和自身BAT。
图30
图31
msfte.dll为最终的后门程序,其导出伪装为zlib,核心导出函数为AccessDebugTracer和AccessRetailTracer。其主要功能为与CC通信,进一步下载执行后续的DLL程序。
图32
与之前分析的样本类似,其同样采用了图片隐写传输和内存反射加载的方式实现
其解密的CC通讯信息如下:
图33
请求的格式为:
hxxp://CC_Address /s7/config.php ?p=M&inst=7917&name=
其中参数p为当前进程权限,有M与H两类,inst参数为当前安装id,name为解密获得的CC_name,本次为pphp。
图34
下载后进行解密,该过程与之前发现的图片隐写传输格式完全一致。
本次的解密流程如下图所示:
图35
之前捕获的测试样本解密流程如下图所示:
图36
对于测试请求对应的CC URL,由于我们在分析的过程中并没有获取到对应图片,所以CC疑似已经失效。
Retro在执行的过程中,伪装了假的SSH和假的zlib,意图达到迷惑和干扰用户和分析人员的目的。Retro这种攻击方法从2016年开始至今一直在使用。
2.Retro(复古)后门演进历史
在APT-C-06组织早期的APT行动中使用的后门程序是Lucker,这是一套自主开发定制的模块化木马程序,该套木马功能强大,具备键盘记录、录音、截屏、文件截取和U盘操作功能等,Lucker后门的名称来源于此类木马的PDB路径,该后门的大量功能函数使用了LK缩写。
图37、38
在中后期至今我们发现了它的演进和不同类型的两套后门程序,我们以提取自程序中的PDB路径将其分别命名为Retro和Collector。Retro后门作为Lucker后门的演进版本,活跃于2016年初至今的系列攻击活动。该名称来源于此类木马的pdb路径带有标示Retro,并且在最初的安装程序中也带有Retro字样。
图39
表 Retro相关样本PDB路径
从相关的PDB路径可以发现其反射DLL注入技术的演进,该系列后门存在着大量的变种。
图40
第七章 归属关联分析
1. 解密算法
通过分析此次捕获到的样本,我们发现样本在执行过程中所使用的解密算法,与已披露的APT-C-06组织所使用的解密算法相同。
本次攻击所使用的样本的解密算法如下:
图41
APT-C-06组织的所使用的解密算法:
图42
进一步,我们在相关样本的64位版本上也发现了相同的解密算法。
2.PDB路径
本次攻击中所使用的样本,其PDB路径中含有“Retro”,这是Retro木马的特征。
3.中招用户
我们在追溯中招用户的过程中,发现在某一受害机器上存在大量与APT-C-06组织相关的同源样本。按时间顺序来看这些样本的话,可以清楚地看到相关恶意程序的进化演变过程。该受害用户从2015年起就一直受到APT-C-06组织不间断的攻击,最初的样本可以关联到DarkHotel,后被Lurker木马攻击,最近又被利用“双杀”0day漏洞(CVE-2018-8174)的恶意程序攻击。
第八章 总结
APT-C-06组织是一个长期活跃的境外APT组织,其主要目标为中国和其他国家。攻击活动主要目的是窃取敏感数据信息进行网络间谍攻击,其中DarkHotel的活动可以视为APT-C-06组织一系列攻击活动之一。
在针对中国地区的攻击中,该组织主要针对政府、科研领域进行攻击,且非常专注于某特定领域,相关攻击行动最早可以追溯到2007年,至今还非常活跃。从我们掌握的证据来看该组织有可能是由境外政府支持的黑客团体或情报机构。
该组织针对中国的攻击时间已经长达10年之久,攻击使用的漏洞和后门技术在不断演进中。根据我们2017年捕获到的数据来看,该组织对我国的攻击主要集中在某些外贸产业活跃的重点省份,主要对外贸易相关的机构和关联机构为攻击目标,进一步窃取相关的机密数据,对目标进行长期的监控。
在十数年的网络攻击活动中,该组织多次利用0day漏洞发动攻击,且使用的恶意代码非常复杂,相关功能模块达到数十种,涉及恶意代码数量超过200个。2018年4月,360核心安全事业部高级威胁应对团队在全球范围内率先监控到了该组织使用0day漏洞的APT攻击,进而发现了全球首例利用浏览器0day漏洞的新型Office文档攻击。
360核心安全事业部高级威胁应对团队在捕获到这一使用0day漏洞的APT攻击后,第一时间向微软进行了信息共享并披露了该漏洞细节。在5月8日微软官方安全补丁发布后,我们发布本文对此次攻击事件进行了详实的披露与分析。
附录 部分IOC
参考
https://portal.msrc.microsoft.com/en-us/security-guidance/advisory/CVE-2018-8174
[1] 结论来自谷歌翻译的自动识别
[2] https://github.com/EmpireProject/Empire/blob/master/data/module_source/code_execution/Invoke-ReflectivePEInjection.ps1