首页
社区
课程
招聘
[翻译]来自海莲花(OceanLotus)打造的全新基于macOS后门
发表于: 2017-7-11 00:04 6052

[翻译]来自海莲花(OceanLotus)打造的全新基于macOS后门

2017-7-11 00:04
6052

介绍

最近在我们WildFire云分析平台上发现了一个新版本的“海莲花(OceanLotus)”后门,这可能是我们在macOS更新日志中比较新的后门。这次迭代的目标是一些在越南的感染用户,同时也修复了低级的AV检测问题,这个问题自从第一次发现,到现在将近有一年了。如果忽略非正式的几次更新,这个系统的使用情况还是很活跃的, 在我们分析的时候也就是20176月份上旬,我们可以直接通过发送命令连接和控制服务器。

 虽然这个看起来和20155月份发现的海莲花(OceanLotus)的一个例子很相似,但从那时起已经有了各种各样的改进。一些改进包括病毒文件的使用,去除使用命令行工具,完善的字符串编码机制,使用加密的自定义二进制协议通信量,还有一个模块化的后门。

感染途径

新的海莲花后门是渗透在一个zip文件中。虽然我们没有直接的原始感染路径证据,但我们推测它很可能通过电子邮件附件。一旦用户提取了ZIP文件,就会看到一个目录,其中包含一个带有微软Word文档图标的文件。该文件实际上是一个应用程序包,其中包含可执行代码。(参见图1)。一旦用户双击据称的Word文档,特洛伊木马程序就会执行,然后启动Word来显示一个诱饵文档。

该恶意软件使用诱饵文件,以帮助掩盖恶意软件的执行。这种技术是基于Windows恶意软件的一种普通方法,但很少在MacOS使用。为了达到这层混淆,恶意软件作者不得不欺骗操作系统相信文件夹是一个应用程序包而忽略扫描这个docx扩展文件。通常,MacOS的恶意软件会模仿合法应用的安装程序如Adobe Flash,这就是如何将OceanLotus的旧版本打包。

 

Figure 1

一旦应用程序包被加载,其就会打开包内Resources文件夹中一个名为.CFUserEncoding的隐藏文件。这是一个有密码保护的Word文档(见图2)。它还将该文件复制到可执行路径,并在驻留机制设置之后替换了应用程序包。这将导致受害者相信没有什么不妥,因为他们认为他们正在打开一个word文档,然后这个Word文档就打开了。在这种情况下,该Word文件的名称为“Noi dung chi tiet.docx”,这一表达正是越南语中的“Details(细节信息)”之意。

Figure 2

驻留机制

与这个后门的前一版本相比,这种驻留机制基本保持不变。这个版本创建一个Launch Agent,在受害者主机启动时运行,而早期版本的执行,是当用户登录时。另外,新版本后门会根据运行应用程序之用户的具体UID将自身以不同文件名复制到不同位置。

 

对于登陆的用户不是超级用户,该后门会采集由 getpwuid()函数返回的MD5哈希值结构,将这个哈希值拆分成 < 8 位哈希值>-<接下来16 位哈希值>-<最后8位哈希值>.。这些分段的MD5哈希值在前面会附上“0000-“ ,然后作为在~/Library/OpenSSL/ 下的一个目录来保存可执行文件(详见图三)。如果登陆的是超级用户,该可执行文件即会被存储在系统系统级的库目录中:/Library/TimeMachine/bin/mtmfs

 

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

 

UID

plist Location

Executable Location

0

/Library/LaunchDaemons/com.apple.mtmfsd.plist

/Library/TimeMachine/bin/mtmfs

> 0

~/Library/LaunchAgents/com.apple.openssl.plist

~/Library/OpenSSL/0000-<segmented   MD5 hash>/servicessl

Figure 3

 

一旦这个恶意软件设置成驻留机制,它就会从可执行路径下删除源应用程序包,只留下诱饵文件,然后从新的路径下将自身作为一个服务加载。

去除命令行工具

关于这个后门,我们首先注意到它缺少可疑的字符串,这些字符串通常会表明恶意软件在受害者主机的目的。大多数MacOS的恶意软件,会有些地方用system()exec()函数来运行其他脚本。在这种情况下,这些没有明显存在调用这些函数,也没有命令行工具字符串,可以轻松地传达应用程序的恶意意图。这说明相比其他攻击者通常只会复制和粘贴来自网络的脚本,这个后门的作者对macOS 平台会有更加深层次的了解。

这种字符串的缺失加大逆向分析技术的难度,会让该恶意软件看起来不那么可疑,尤其是对于基础的静态分析。

字符串解码

由于在明文上几乎没有明显的可疑之处,于是我们转向考虑作者使用编码或者混淆字符串的可能性。

这个后门的字符串解码方式是从前一版本升级来的,其中字符串是以“Variable”作为键进行XOR编码。字符串解码方式现在由bit位移和XOR操作组成,“Variable”键取决于所编码字符串的长度。如果变量XOR的键计算结果是0,则使用“XOR”默认的键0x1B。图4显示了解码函数的Python实现。

Figure 4

 

在解码字符串(参见图5)之后,我们可以观察到恶意软件如何建立永久机制,调查受害者的计算机,并将这些信息发回服务器。在这一点上,这个恶意软件包含后门所实现的功能仍然不明显。

Figure 5

自定义的二进制协议和加密数据包

负责此恶意软件的攻击者似乎花费了大量的精力来开发自己的自定义通信协议。他们并不是简单地使用现成的Web服务器来实现他们的命令和控制服务器,这和常规的手法不同。相反,他们创建了自己的命令和控制机制。

后门使用TCP端口443上的自定义二进制协议,这是一个众所周知的端口,由于它在HTTPS连接中的使用,它不太可能被传统防火墙阻止。如图六所示的数据包利用bit位移(见图七)与XOR配合0x1B键共同进行编码。在执行XOR运算之前,位总是向左移动3次。这是从以前的版本的包只有XOR配合0x1B键编码的改进。

 

 Figure 6

 Figure 7

解码安装包后,我们可以看到不同字段的断点。图8显示客户端向服务器发送的初始数据包。除了“magic”字节、数据长度和通信类型之外,数据包相对比较空。

Figure 8

 

根据从服务器发回来的命令,数据包可能会大于0x52个字节。超过0x52个字节部分的数据会用zlib进行压缩,然后,在CBC模式下用AES加密,同时带有空的初始化向量(IV)和密钥填充的32个字节从服务器发送出来。

我们捕捉到从服务器发出来的实时流量,我们观察到从服务器发出来的秘钥是一次性的。这就意味着每一次同服务器建立新的会话都会得到不同的秘钥来加密发送回来的数据。相比于旧版本,这是一次标志性的改进,旧版本只用单字节密钥对XOR编码进行加密。

在对从服务器接收到的数据包解码之后,后门会去验证某些字段,如“magic”字节,并确保接收到的数据的长度不超过一定值。在整个程序执行过程中,它还检查和处理可能生成的任何错误。

C&C通信

C&C服务器通信的顺序如下“

1.     客户机要向服务器发起一次会话,会发送一个命令段为0x2170272的数据包

2.     服务器会响应一个带有一次性秘钥和一个命令的数据包。

3.     客户端检查接收到的数据包是否有效。

4.     客户端执行服务器发送的命令,响应一个zlib压缩和AES加密的乱序结果然后发送回服务器。

不像以前的版本,海莲花(oceanlotus)的命令可以很容易地从它的字符串收集到,作者函数与常数打乱。我们解码了以下可用命令,如图9所示。

命令

命令描述

0x2170272

初始化

0x5CCA727

???

0x2E25992

从服务器接收文件

0x2CD9070

在文件/路径下获取相关信息

0x12B3629

删除文件/路径

0x138E3E6

???

0x25D5082

从一个动态库内执行一个函数

0x25360EA

发送文件到服务器

0x17B1CC4

???

0x18320E0

发送附有水印的受害者和电脑信息


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 1
支持
分享
打赏 + 5.00雪花
打赏次数 1 雪花 + 5.00
 
赞赏  CCkicker   +5.00 2017/07/14
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//