导语:Palo Alto的研究人员发现黑客组织RANCOR使用两种新的恶意软件家族(PINTINTEE和DDKONG),主要针对新加坡和柬埔寨展开攻击。
在2017年和2018年中,Unit 42一直在跟踪和观察一个针对性很强的攻击(针对东南亚),这是基于我们对KHRAT Trojan的研究。基于证据,这些攻击是由同一组织的攻击者利用以前未知的恶意软件家族进行的。此外,这些攻击对其使用的恶意软件的分发以及所选目标具有高度针对性。基于这些因素,Unit 42认为,这些攻击背后的攻击者正在进行间谍活动。
我们相信这个组织之前是未知的,因此我们称之为RANCOR。Rancor组织的攻击使用了两个主要的恶意软件家族,我们将在本博客的后面深入描述命名为DDKONG和PLAINTEE的恶意软件家族。DDKONG在整个行动中都会使用,而PLAINTEE是这些攻击者工具包的新增加部分。Unit 42已确定Rancor针对这些国家(包括但不限于):
· 新加坡
· 柬埔寨
我们确认了这些攻击以鱼叉式钓鱼信息的诱饵文件开始,但没有观察到实际信息。这些诱饵主要包含政治新闻和公共新闻。基于此,我们认为Rancor攻击者是针对政治实体的。此外,这些诱饵文档托管在合法网站上,其中包括属于柬埔寨政府的网站,并且还有一次是在Facebook。
攻击中使用的恶意软件和基础架构分为两个不同的集群,我们将其标记为A和B,这些集群相关联是因为使用了PLAINTEE恶意软件和几个“softer”的链接。
一、攻击的相关性
基于之前对KHRAT Trojan的研究,我们一直在监控KHRAT的C2C域名。2018年2月,几个KHRAT关联的域名开始解析到IP地址89.46.222 [.] 97。我们把这个IP作为调查的中心。
检查来自PassiveTotal 的被动DNS(pDNS)记录,揭示了几个与此IP相关的域名,这些域名模仿热门技术公司。在与此IP地址相关的恶意软件样本中找到其中一个域名为facebook-apps [.] com。
下表描述了与此IP地址直接相关的两个恶意软件样本:
进一步挖掘,发现我们后来命名为PLAINTEE的恶意软件家族看起来相当独特,在数据集中只有6个样本。
除了一个样本(c35609822e6239934606a99cb3dbc925f4768f0b0654d6a2adc35eca473c505d)之外,我们能够通过他们使用的基础设施将所有PLAINTEE样本关联在一起。图1中的图表显示了我们在调查期间确定的样本、域名、IP地址和电子邮件地址(更多详细信息,请参阅Appendix B),集群A和集B之间存在明显分隔,两者的基础架构没有重叠。
图1:两个活动集群中PLAINTEE样本的分布图
对这两个集群的调查进一步表明,他们都参与了针对东南亚机构的攻击。基于使用相对独特的PLAINTEE恶意软件,恶意软件在每个群集中使用相同的文件路径以及针对类似的目标,我们已将这些攻击归入RANCOR名下。
二、分发与加载机制
对于很多样本,我们无法确定它们是如何分发给受害者的;然而,在三种情况下,我们能够找到用于分发木马的文件,我们发现这些文件值得进一步调查,并在下面简要讨论。
Cluster A
Case 1:通过文档属性宏分发 – a789a282e0d65a050cccae66c56632245af1c8a589ace2ca5ca79572289fd483
在研究中,我们发现至少有一起针对一家公司的攻击,利用带有嵌入式宏的Microsoft Office Excel文档来启动恶意软件。有趣的是,分发的文档借用了2017年底被Sofacy使用的一种技术,该技术将主要恶意代码嵌入到文档的EXIF元数据属性中。
通过这样做,宏本身的主要内容(图2)可以保持相对简单,并且恶意代码占用很小的空间可以帮助避开基于宏的自动检测机制。
图2:宏的全部内容
在本例中,Company字段包含攻击者希望运行的原始命令,下载并执行恶意软件的下一阶段:
Cluster B
Case 2:通过HTA Loader分发 – 1dc5966572e94afc2fbcf8e93e3382eef4e4d7b5bc02f24069c403a28fa6a458
在这种情况下,攻击者将HTML应用程序文件(.hta)作为电子邮件附件发送给目标。打开执行时,HTA文件的关键组件会从远程URL下载并执行后续的恶意软件,并加载外部托管的诱饵图像(图3)。
图3:执行.HTA文件时加载的诱饵图像
图3中的诱饵图像强烈表明攻击者正在对柬埔寨的一个政治实体进行攻击。柬埔寨救国党是一个有政治动机的反对党。
Case 3:通过DLL加载程序分发 – 0bb20a9570a9b1e3a72203951268ffe83af6dcae7342a790fe195a2ef109d855
在分析过程中发现了三种独特的DLL加载器。Loader非常简单,只需一个导出的功能,并负责执行单个命令。一个示例命令如下:
在上述命令中,恶意软件正在下载执行payload,并将其配置为持久执行。在其中两个示例中,恶意软件还会下载并打开托管在合法网站上受到感染的诱饵PDF文档。在这些案例中看到的诱饵文件与柬埔寨新闻文章有关,下面的图4显示了一个例子。
图4:downloader提供的诱饵1.pdf
上面的诱饵讨论了柬埔寨最近发生的针对政党支持者的事件,这与图3中观察到的诱饵文件类似。
值得注意的是,第三个DLL涉及到从政府网站下载诱饵文件。这个网站之前曾用于针对柬埔寨公民的KHRa行动。
另外,三个DLL加载程序中的两个被发现托管在这个相同的受感染网站上,这意味着它可能在2018年初再次受到控制。这两个DLL加载程序的文件名如下所示:
· Activity Schedule.pdf
· អ្នកនយោបាយក្បត់លើក្បត (Translated from Khmer: Politicians betrayed on the betrayal)
三、恶意软件概述
在我们能够识别所使用的最终payload的所有情况下,都使用DDKONG或PLAINTEE恶意软件家族。我们观察到2017年2月至今一直使用DDKONG,而PLAINTEE是更新的版本,已知最早的样本于2017年10月观测到。目前尚不清楚DDKONG是否仅由一名还是多名攻击者使用。
在本节中,我们将介绍这些恶意软件家族的功能和操作。
1、DDKONG
在下面的分析,我们使用了如下文件:
表1:全面分析DDKONG样本
该恶意软件有以下三个导出函数:
· ServiceMain
· Rundll32Call
· DllEntryPoint
ServiceMain导出函数指示该DLL将作为服务加载。如果这个函数被成功加载,它将通过调用Rundll32.exe最终产生一个新的Rundll32Call导出实例。
Rundll32Call导出函数首先创建一个名为“RunOnce”的命名事件。此事件确保在指定时间只执行一个DDKong实例。如果这是当时正在运行唯一的DDKong实例,则恶意软件会继续。如果不是,它就会终止。这可以确保在指定的时间只执行一个DDKong实例。
DDKong使用0xC3的单字节异或密钥来解码嵌入式配置。解码后,配置包含下面的图5中显示的数据。
图5:突出显示的解码配置
在配置解码和解析后,DDKONG继续通过原始TCP连接向配置中的远程服务器发送信标。数据包有一个长度为32的头部和一个可选的有效载荷。在信标中,没有提供有效载荷,因此,这个分组的长度被设置为零。
图6:发送到远程C2的DDKONG信标
发送信标后,恶意软件需要0x4或0x6的响应命令。这两个响应都会指示恶意软件下载并加载远程插件。在0x4的情况下,指示恶意软件加载导出的'InitAction'函数。如果指定0x6,则会指示恶意软件加载导出的“KernelDllCmdAction”函数。在下载插件之前,恶意软件会下载一个与嵌入式配置连接并在运行时最终提供给插件的缓冲区。运行时此缓冲区的一个示例如下所示:
00000000: 43 3A 5C 55 73 65 72 73 5C 4D 53 5C 44 65 73 6B C:\Users\MS\Desk 00000010: 74 6F 70 5C 52 53 2D 41 54 54 20 56 33 5C 50 6C top\RS-ATT V3\Pl 00000020: 75 67 69 6E 42 69 6E 00 00 00 00 00 00 00 00 00 uginBin………uginBin……… [TRUNCATED] 00000100: 00 00 00 00 43 3A 5C 55 73 65 72 73 5C 4D 53 5C ….C:\Users\MS\ 00000110: 44 65 73 6B 74 6F 70 5C 52 53 2D 41 54 54 20 56 Desktop\RS-ATT V 00000120: 33 5C 5A 43 6F 6E 66 69 67 00 00 00 00 00 00 00 3\ZConfig…….ZConfig……. [TRUNCATED] 00000200: 00 00 00 00 00 00 00 00 00 40 00 00 F0 97 B5 01 ………@……
正如我们在上面所看到的,这个缓冲区中包含了两个完整的文件路径,使我们能够深入了解原始恶意软件家族的名称以及作者。收集此缓冲区后,恶意软件将下载该插件并加载相应的函数。在运行时期间,识别出以下插件:
表2:在运行时为DDKong样本下载的插件
这个插件为攻击者提供了在受害者机器上列出文件和下载/上传文件的功能。
2、PLAINTEE
总的来说,我们已经能够找到6个PLAINTEE样本,根据分析,它只能被RANCOR攻击者使用。PLAINTEE的特殊之处在于它使用自定义UDP协议进行网络通信。我们使用下面的示例样本进行分析:
表3:完整分析PLAINTEE样本
此样本有三个导出函数:
· Add
· Sub
· DllEntryPoint
该DLL在最初加载时使用名为“Add”的导出函数。当执行该函数时,PLAINTEE在新进程中执行以下命令以添加持久性:
接下来,恶意软件调用“Sub”函数,该函数产生一个名为“microsoftfuckedupb”的互斥体,以确保在给定时间只有一个实例正在运行。另外,PLAINTEE通过调用CoCreateGuid()创建一个唯一的GUID,作为受害者的标识符。然后,恶意软件继续收集有关受感染机器的常规系统枚举数据,并进入一个循环,在该循环中它将解码嵌入的配置blob并向C2服务器发送初始信标。
配置blob使用简单的单字节XOR方案进行编码。字符串的第一个字节被用作XOR密钥来依次解码剩余的数据。
解码这个blob会得到以下信息,也可以在原始二进制文件中找到:
表4:存储在恶意软件中的配置
之后,恶意软件通过自定义UDP协议使用信标配置端口。网络流量采用类似的方式进行编码,第一个字节为随机值,然后通过XOR解码数据包的其余部分。图7显示了解码后的信标的一个例子。
图7: PLAINTEE信标
表5给出了该信标的结构。
表5: PLAINTEE的信标结构
这个信标不断发出,直到从C2服务器获得有效的响应(没有设置睡眠定时器)。在初始信标之后,其他请求之间会有两秒的延迟。此响应的返回命令为0x66660002,并包含发送到C2服务器的相同GUID。一旦收到此响应,恶意软件会产生几个新线程,并带有不同的Command参数,其总体目标是加载并执行从C2服务器接收的新插件。
在对WildFire中的PLAINTEE进行文件分析期间,我们观察到攻击者在运行时为该样本下载并执行插件。获取到的插件如下所示:
表6:在Wildfire中观察到的PLAINTEE插件
PLAINTEE下载的插件是一个具有'shell'或'file'导出函数的DLL。该插件使用与PLAINTEE相同的网络协议,因此我们能够简单地解码发送的其他命令。观察到以下命令:
· tasklist
· ipconfig /all
攻击者间隔33秒执行这两个命令。由于自动命令的执行速度通常更快,这表明它们可能是由攻击者手动发送的。
四、总结
RANCOR行动代表了针对东南亚地区持续有针对性的攻击趋势。在许多情况下,出于政治动机的诱饵被用来吸引受害者点击,并随后加载之前没有记录在案的恶意软件家族。这些家族利用自定义网络通信来加载和执行攻击者托管的各种插件。值得注意的是,PLAINTEE恶意软件使用自定义UDP协议,这很罕见,在构建未知恶意软件的启发式检测时可以考虑这点。Palo Alto Networks将继续监视这些攻击者者、恶意软件以及基础设施。
可能有助于防止这些攻击的其他缓解措施包括:
· 在环境中更改“.hta”文件的默认处理程序,以便它们不能直接执行。
附录A – PLAINTEE的老版本
PLAINTEE的老版本可以通过在运行时创建的独特互斥来识别。至今已确定至少有三种PLAINTEE变体,但是,以下两个样本独具特色:
附录B