分享

网络间谍组织“海莲花”打造全新MacOS后门程序

 E安全 2020-09-01

更多全球网络安全资讯尽在E安全官网www.easyaq.com


E安全7月1日讯,最近,国外安全公司Palo Alto Networks在其云分析平台当中发现了一种最新版本的Mac OS后门程序,该后门程序由网络间谍组织“海莲花”(OceanLotus,也称为APT32,该组织自2012年4月起针对中国政府的海事机构、海域建设部门、科研院所和航运企业,展开了精密组织的网络攻击)所开发利用,这很可能是迄今为止所见到过的最为先进的Mac OS后门程序。以下为E安全译制的Palo Alto Networks的分析报告。

网络间谍组织“海莲花”最新版本的Mac OS后门程序主要用于攻击越南国内的受害目标,而且在距离首次被发现近一年后的今天,大多数反病毒检测仍然无法发现这款后门。而且后门的活跃度似乎相当惊人。在分析过程当中,我们仍然能够与2017年6月初建立的C&C(远程命令和控制服务器)进行直接通信。

虽然此次发现的版本似乎与2015年5月曝光的海莲花样本存在相似之处,但新版本确实利用这两年时间完成了一系列改进。这些改进具体包括利用诱饵文档、不再使用命令行工具、强大的字符串编码机制、具备加密功能的定制化二进制协议流量以及一套模块化后门。

感染向量

这款新的海莲花后门通过zip格式文件进行传播。尽管尚无直接证据可证明其初始感染向量,但我们认为可能性最高的途径是借助电子邮件附件作为载体。一旦用户解压该zip文件,即会看到一个包含有微软Word文档图标的文件目录。该文件实际上属于一个应用程序包,其中包含可执行代码(见图一)。在用户双击该所谓的Word文档之后,木马执行后将启动Word并显示一份假冒的诱饵文档。

该恶意软件利用此诱饵文档掩盖恶意软件的执行。这种技术在Windows平台上的各类恶意软件中可谓屡见不鲜,但在Mac OS平台当中却相当罕见。为了实现这种误导,该恶意软件作者需要欺骗操作系统,即将这个拥有.docx后缀名称的文件夹视为应用程序包。从传统角度来看,不少Mac OS恶意软件已经能够成功冒充合法的应用安装程序——例如Adobe Flash,而海莲花在其早期版本中也采用过这种打包方式。

图一:上下文菜单与文件列表

一旦该应用程序包启动,其就会打开包内Resources文件夹中一个名为.CFUserEncoding的隐藏文件——此文件属于受密码保护的Word文档(见图二)。另外,其还会将此文件复制到可执行路径,而后对原有应用程序包进行替换。如此一来,受害目标不会察觉到任何异状,毕竟预想当中的Word文档已经顺利打开。在本案例中,该Word文件的名称为“Noi dung chi tiet.docx”,这一表达正是越南语中的“Details(细节信息)”之意。

图二:诱饵文档提示输入密码以打开该文件

驻留机制

相较于该后门的早期版本,新版本的驻留机制基本保持不变。新版本会创建一个Launch Agent,其在受害目标主机启动时开始运行——这一点不同于原有版本在用户登录时方开始运行的方式。另外,新版本后门会根据运行应用程序之用户的具体UID将自身以不同文件名复制到不同位置。

对于未进行系统引导的用户,该后门则提取由getpwuid()返回的MD5哈希结构,并将该哈希拆分成〈前8位哈希值字符〉-〈16位哈希值字符〉以及〈后8位哈希值字符〉的形式。这些经过拆分的MD5哈希值会在前面被加上“0000-”,而后作为~/Library/OpenSSL/ 下的一个目录用于存储该可执行文件(详见图三)。当该用户进行系统引导时,该可执行文件即会被存储在系统的/Library/TimeMachine/bin/mtmfs系统级库目录当中。

值得一提的是,该可执行文件以及plist位置从表面上看与其它合法应用程序无异。

图三:根据用户UID生成的plist与可执行文件名称及位置

一旦该恶意软件的驻留机制设置完成,其即会从可执行文件路径内删除原本的应用程序包而只留下诱饵文档,并立足新位置将自身作为服务进行启动。

取消命令行工具

关于此后门的最新版本,我们首先发现的特征在于其缺少其它恶意软件通常会在受害目标主机上用于提供上下文信息的可疑文本。在大多数Mac OS恶意软件当中,调用system()或exec()函数可以运行其他脚本。但在本案例当中,我们没有发现任何此类调用或者其它可轻松判断应用程序恶意意图的命令行工具字符串。与大量从互联网中获取并粘贴现成脚本的其他攻击者相比,这款后门程序的作者显然对于Mac OS平台拥有更为深入的理解。

这种字符串的缺失可能属于一种反分析技术,旨在令该恶意软件看起来更为正常,特别是能够很好地避免被静态分析所发现。

字符串解码

由于明文中似乎并不存在明显可疑的字符串,因此我们转而考虑后门作者使用字符串编码或者混淆机制的可能性。

此后门中的字符串解码方式对原有版本进行了升级,其中字符串进行XOR编码,同时利用“Variable”一词作为键。该字符串的解码过程由bit位移与XOR运算共同组成,其中Variable键取决于需要进行编码处理的字符串长度。如果变量XOR键的计算结果为0,则使用0x1B这一默认XOR键。图四所示即为该解码功能的Python实现方案。

图四:此恶意软件字符串解码功能的Python实现方案

在对字符串进行解码之后(详见图五),我们即可了解该恶意软件如何实现持久驻留、调查受害目标计算机,并将相关信息发送回C&C服务器。到这里,该恶意软件中所包含的后门功能仍未得到明确体现。

图五:解码字符串列表

定制化二进制协议与加密流量

就目前来看,编写此恶意软件的作者似乎投入了大量精力以开发自己的定制化通信协议。他们并没有简单使用现成的Web服务器充当其C&C服务器,这显然与常见作法有所区别。相反,他们构建起仅属于自己的C&C机制。

此后门在TCP端口443上采用一项定制化二进制协议——由于该端口使用HTTPS连接,因此传统防火墙一般不会将其屏蔽。如图六所示的数据包利用bit位移(见图七)与XOR配合0x1B键共同进行编码。在执行XOR运算之前,这些bit总是向左旋转三次。相较于原本仅利用0x1B键进行XOR编码的作法,新版本对于数据包的处理显然经过了改进。

图六:由客户端发送至服务器的初始数据包

图七:用于对网络数据包进行编码/解码的bit位移功能

在对数据包进行解码之后,我们即可看到其中的具体字段。图八所示为客户端发送至服务器的初始数据包。除了“magic”字节,我们还可以发现数据长度与通信类型。

图八:由客户端发送至服务器的初始数据包(已解码)

取决于服务器所发出的具体命令响应,数据包的大小可能超过0x52字节。超出0x52字节的数据会进行zlib压缩,而后利用AES以CBC模式进行加密——其中使用一个null初始化向量(简称IV),而由服务器发出的密钥则被填充为32字节。

我们从服务器处捕获到实时流量,并发现由服务器发出的加密密钥往往属于临时性密钥。这意味着每个接入服务器的新会话都会被赋予一个不同密钥,用以对该会话当中的往来数据进行加密。与仅利用单字节密钥对XOR编码进行加密的以往版本相比,这种作法无疑是一大显著改进。

在对由服务器发出的数据包进行解码之后,该后门会验证“magic”字节等特定字段,同时确保所接收到数据的长度不会超过特定值。在该程序的整个执行过程中,其还会检查并处理一切可能发生的错误。

C&C通信

命令与控制服务器通信顺序具体如下:

1. 客户端通过在命令字段内配合0x2170272发送数据包以初始化接入服务器的会话。

2. 服务器随后会返回一条临时加密密钥与一条命令。

3. 客户端会检查该接收自服务器的数据包是否有效。

4. 客户端执行由服务器发出的命令,对结果进行zlib压缩与AES加密,而后将其发送回服务器端。

与可轻松从字符串当中捕获具体命令的海莲花后门以往版本不同,该程序的作者利用常量值对各函数进行了混淆。我们对以下可用命令进行了解码,具体如图九所示。

图九:可用命令列表

命令0x2170272

当该后门被启动后,其会在/Library/Preferences/.files 或者~/Library/Preferences/.files 当中创建一个文件,具体取决于受害目标的用户ID。此文件(详见图十)包含一个时间戳以及与设备序列号相关联的受害目标名称,其随后会利用MD5进行两次散列处理。此结果随后会被复制至长度为0x110字节的缓冲区,并由AES以CBC模式利用一条空IV与一个“pth”键进行加密。加密后的结果将被保存在该文件当中。



时间戳 + MD5(MD5(<受害目标名称 + 设备序列号>))


在此文件创建完成之后,客户端会向服务器发送首个数据包,并在命令字段当中填入0x2170272。服务器使用同样的命令进行确认与响应,而客户端随后验证此文件是否已经确实创建完成。

图十: ~/Library/Preferences/.files下的解密内容

命令0x18320E0

在0x2170272命令发出后,服务器接下来利用临时性密钥发送命令0x18320E0。如图十一所示,客户端将收集全部数据,利用服务器提供的密钥对其进行加密,而后将结果发回。这里需要强调的是,此数据包所发送的为Base64字符串。该字符串在二进制文件内以静态形式存在且不会变更,这可能代表着其负责对活动或者版本标识进行标记。

图十一:由客户端发送至服务器的数据包内的解密内容

尽管没有在图十一中以高亮形式显示,但此数据包中确实包含有内核引导时间。C&C服务器可以利用内核引导时间来确定后门是否运行在沙箱环境当中。

命令0x25D5082、0x1B25503与0x1532E65

这些命令利用dlopen()加载一套动态库,同时包含一项函数指针以利用dlsym()在该共享库内实现执行。遗憾的是,我们尚不清楚各命令当中所使用的具体动态库或者函数,这是因为上述命令由服务器提供,而我们无法捕获到任何使用这些命令的通信内容。

不过,我们可以作出这样的假设:由于各函数的参数拥有同样的参数值,且各命令常量的开头部分非常相似(详见图十二),而此后门又具备一项用于接收文件的函数,因此这些函数很有可能对应着一套服务器上传至受害目标主机上的共享库。这意味着攻击者可以通过C&C服务器将更多模块直接上传至后门程序内以实现功能添加。

图十二:代码片段显示所加载的函数指针及其参数

总结

当前,大多数Mac OS恶意软件在复杂度方面相对较低,但攻击者们显然已经开始改进其入侵手段。复杂度与技术水平的不断提升很可能表明未来针对Mac OS设备的恶意软件将越来越多。考虑到此次海莲花后门程序的出现,加之此前Sofacy组织专为Mac OS系统推出的黑客工具集合,我们已经观察到多种专门针对Mac OS的入侵威胁方案。正因为如此,各类组织机构需要甚至必须以等同于Windows设备防御水平的安全实践与实施策略对自有Mac OS设备加以保护。

苹果公司已经更新了Mac OS保护系统以解决海莲花后门程序各类变种所带来的安全风险。

入侵迹象


哈希值

b33370167853330704945684c50ce0af6eb27838e1e3f88ea457d2c88a223d8b

Noi dung chi tiet.zip

b3cf3e3b52b4b899cd0814fc75698ea24f08ce18642665adcd3555a068b5c16d

Info.plist

07154b7a45937f2f5a2cda5b701504b179d0304fc653edb2d0672f54796c35f7

Noi dung chi tiet

82502191c9484b04d685374f9879a0066069c49b8acae7a04b01d38d07e8eca0

PkgInfo

f0c1b360c0b24b5450a79138650e6ee254afae6ce8f6c68da7d1f32f91582680

.CFUserEncoding

e84b5c5152d8edf1e814cc4b4975bfe4dc0063ef90294cc96b383f523042f783

info.icns

C&C服务器

call[.]raidstore[.]org

technology[.]Mac OSevents[.]com

press[.]infomapress[.]com

24h[.]centralstatus[.]net

93.115.38.178

Dropped Files

01

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多