导语:一种新型的MacOS后门程序正被黑客组织“海莲花”所使用,而其攻击目标是那些安装有Perl语言编程软件的Mac用户。

Targeted-attacks-200x200.jpg

前言

趋势科技于上周三(4月4号)宣称,一种新型的MacOS后门程序(目前趋势科技已将其定义为OSX_OCEANLOTUS.D )正被黑客组织“海莲花”所使用,而其攻击目标是那些安装有Perl语言编程软件的Mac用户。

传播过程分析

海莲花(OceanLotus,又名Cobalt Kitty、SeaLotus、APT-C-00和APT 32)是高度组织化的、专业化的境外国家级黑客组织。自2012年4月起针对中国政府的海事机构、海域建设部门、科研院所和航运企业,展开了精密组织的网络攻击,很明显这是一个有国外政府支持的APT(高级持续性威胁)行动。

趋势科技的研究人员认为,这个全新macOS后门是“海莲花”所使用的最新的攻击工具。

MacOS后门是在一个恶意的Word文档中发现的,可能是通过电子邮件发送的。这意味着,新的MacOS后门程序是通过钓鱼电子邮件中的恶意Word文档进行传播的。恶意Word文档会伪装成文件名为“2018-PHIẾU  GHI  DANH  THAM  DỰ  TĨNH  HỘI HMDC 2018.doc”的文档,翻译过来也就是“2018年HMDC大会登记表”,而HMDC是一个在越南宣传民族独立和民主的组织。

1.jpg

恶意文档攻击时的截图

在收件人打开该文档时,它会建议收件人启用该文档的宏。而这个恶意宏则采用了十进制ASCII代码来逐个字符地进行混淆,以逃避各种杀毒软件的检测。这种字符串的混淆加大逆向分析技术的难度,会让该恶意软件看起来不那么可疑,如下图所示。

2.jpg

文档混淆后的代码片段

在逆向分析之后,研究人员可以看到恶意有效载荷是用Perl编程语言编写的。它从会从Word文档中提取theme0.xml文件,theme0.xml文件是一个带有0xFEEDFACE签名的Mach-O 32位可执行文件,用于作为OSX_OCEANLOTUS.D后门程序的滴管组件(dropper),不过theme0.xml在执行之前会被解压到 /tmp/system/word/theme/syslogd。

3.jpg

逆向分析之后的Perl有效载荷

滴管组件分析

滴管组件用于将后门安装到受感染的系统中,并建立其持久性攻击机制。

4.jpg

滴管组件的主要功能

滴管组件中的所有字符串以及后门本身都使用了硬编码的RSA256密钥进行加密。其中,加密字符串以两种形式存在:使用RSA256加密的字符串,以及混合使用自定义base64编码和RSA256加密的字符串。

5.jpg

硬编码的RSA256密钥会显示前20个字符

使用setStartup()方法运行后,滴管组件会首先检查它是否以ROOT权限运行。因为只有这样,GET_PROCESSPATH和GET_PROCESSNAME方法才会对硬编码路径和进程名称进行解密,并安装最终的后门程序。所以总结起来就是:

· 对于有ROOT权限运行的设备来说:

1.硬编码路径是 /Library/CoreMediaIO/Plug-Ins/FCP-DAL/iOSScreenCapture.plugin/Contents/Resources/;

2.进程名称是screenassistantd

· 对于没有以ROOT权限运行的设备来说:

1.硬编码路径是 ~/Library/Spelling/;

2.进程名称是spellagentd;

随后,在实现了Loader::installLoader方法后,恶意软件就会读取硬编码的64位Mach-O可执行文件(magic value 0xFEEDFACF),并写入之前确定的路径和文件。

6.jpg

滴管组件安装后门后,会将其属性设置为“隐藏”,并设置一个随机文件日期和时间

如上所示,当滴管组件安装后门程序时,它会将其属性设置为“hidden(隐藏)” ,并使用touch命令将文件创建日期和时间设置为随机值,touch命令为 touch –t YYMMDDMM “/path/filename” > /dev/null,此时访问权限将被更改为0x1ed = 755,这等于u=rwx,go=rx。

Figure_7_magic_value.jpg

Mach-O可执行文件的随机值0xFEEDFACF(64位)

用GET_LAUNCHNAME和GET_LABELNAME方法将为root用户(com.apple.screen.assistantd.plist)和普通用户(com.apple.spell.agent.plist)返回属性列表“.plist”的硬编码名称。

然后,滴管组件将在/Library/LaunchDaemons/或~/Library/LaunchAgents/文件夹中创建持久文件。当操作系统启动时,RunAtLoad将命令launchd来运行守护进程,而KeepAlive将命令启动以使进程无限期地运行。这个持久性文件也被设置为隐藏着随机生成的文件日期和时间。

Figure_8_property_list.jpg

具有持久性设置的属性列表

/launchctl load /Library/LaunchDaemons/filename.plist或 /dev/nul or launchctl load ~/Library/LaunchAgents/ filename.plist > /dev/nul 将命令操作系统在登录时启动已删除的后门文件。在该过程结束时,滴管组件会自行删除该过程。

后门分析

后门程序包含两个主要函数infoClient和runHandle,这两个函数所实现的功能是不同的,infoClient负责收集用户的设备系统信息,并将这些信息提交给命令和控制(C&C)服务器以及接收额外的C&C通信信息,而runHandle则负责后门功能。

Figure_9_backdoor_main_function.jpg

后门的主要功能

infoClient在HandlePP类中填充的变量:

Figure_10_variable_list.jpg

属于HandlePP类的变量列表

clientID是来自环境变量的MD5哈希,而strClientID是clientID的十六进制表示。下面的所有字符串都是通过AES256和base64编码加密的。HandlePP::getClientID方法使用的是以下环境变量:

Figure_11_serial_number.jpg

序列号

Figure_12_hardware.jpg

硬件UUID

Figure_13_MAC_address.jpg

MAC地址

Figure_14_random_UUID.jpg

随机生成的UUID

对于初始信息包来说,后门也会收集以下信息。

Figure_15_OS_version.jpg

操作系统版本

运行getpwuid ->pw_name, scutil – – -get ComputerName, uname – m将分别提供以下返回值:

1.Mac OSX 10.12;

2.System Administrator;

3.<owner’s name>’s iMac;

4.x86_64;

所有这些数据在发送到C&C服务器之前都会被加密和加密,详细过程如下所述。

1.扰码

扰码就是作有规律的随机化处理后的信码,类解析器的方法有多种,每个变量类型的解析方法各不同,比如 Parser::inBytes, Parser::inByte, Parser::inString以及 Parser::inInt.。

Figure_16_Parser.jpg

Parser :: inBytes方法

如果clientID等于下面的字节序列B4 B4 B1 47 BC 5282873 1F 1A 01 6B FA 72 C0 73,那么这个扰码的版本就是使用第三个参数(0x10)计算的,它被当做一个DWORD来处理。每4个字节都与它异或,如下面的例子所示。

Figure_17_Parser2.jpg

Figure_17_Parser2_1.jpg

Parser :: inByte方法

当扰码一个字节时,扰码器首先确定字节值是奇数还是偶数。如果该值是奇数,则将字节加上一个随机生成的字节添加到数组中。如果该值是偶数的情况,首先添加随机生成的字节,然后添加字节。在上面的例子中,第三个参数是'1'= 0x31,这是一个奇数。这意味着它将字节'1'和一个随机生成的字节添加到最终的扰码阵列。

Figure_18_Parser3.jpg

Parser :: inString方法

当扰码字符串时,扰码器会产生一个5字节长的序列。首先,它生成一个随机字节,然后是3个零字节,1个随机字节,最后是一个字节长度的字符串。假设研究人员要打乱字符串' Mac OSX 10.12。则它的长度是13 = 0x0d,两个随机字节是0xf3和0x92。最后的5字节序列看起来就像F3 00 00 92 0D,而原来的字符串则与5字节序列异或。

Figure_19_scrambling.jpg

扰码Mac OSX 10.12

2.加密

加密的字节序列会被传递给Packet::Packet类的构造函数中,该类会创建一个随机的AES256密钥,并使用这个密钥对缓冲区进行加密。

3.对加密密钥编码

为了使C&C服务器能够解密加密数据,随机生成的AES256密钥必须连同加密数据一起包含在数据包中。然而,这个密钥也是通过异或操作XOR 0x13进行扰码的,随后对每个字节应用ROL 6操作。

Figure_20_scrambling_AES.jpg

在输出数据包中对AES256密钥进行扰码的函数

以下是在扰码和加密过程中的一些屏幕截图:

Figure_21_highlighted_bytes_computer_info.jpg

灰色部分的字节表示已加密的计算机信息

Figure_22_random_AES.jpg

随机生成AES256密钥

Figure_23_scrambled_key.jpg

扰码的AES256密钥(0xC1异或0x13 = 0xD2,0xD2 ROL 6 = 0xB4等)

Figure_24_info_encrypted.jpg

用AES256密钥加密的计算机信息

Figure_25_final_payload.jpg

发送到C&C服务器的最终有效载荷的屏幕截图,扰码的AES256密钥标记为绿色,而加密的计算机信息标记为红色,其他字节只是随机生成的字节

当后门收到来自C&C服务器的响应时,最终的有效载荷需要以类似的方式通过解密和扰码来进行解码。Packet::getData 负责解密接收到的载荷,而Converter::outString 负责对结果进行解扰。

来自C&C服务器的接收数据包括以下信息:

1.HandlePP::urlRequest (/appleauth/static/cssj/N252394295/widget/auth/app.css);

2.HandlePP::keyDecrypt;

3.STRINGDATA::BROWSER_SESSION_ID (m_pixel_ratio);

4.STRINGDATA::RESOURCE_ID;

这些数据稍后将在C&C通信中被用到,如下面的Wireshark截图所示。

Figure_26_C2_communication.jpg

交换系统数据包信息后与C&C服务器的通信过程

与此同时,负责后门功能的runHandle将使用以下后门命令调用requestServer方法(每个命令都有一个字节长的代码,并由Packet::getCommand提取):

Figure_27_GetCommand.jpg

getCommand方法

下图显示了几个可能的命令代码中的两个示例,这两个示例,都创建一个线程,每个线程负责下载和执行文件,或者在终端中运行一个命令行程序。

Figure_28_commands_used.jpg

用于下载和执行的命令,以及在终端中运行一个命令

Figure_29_commands_used2.jpg

用于上传和下载文件的命令

Figure_30_table-768x239.jpg

支持的命令及其各自的代码

总结

虽然针对Mac设备的恶意攻击并不像其他系统那样常见,但这一新的MacOS后门的发现可能是通过网络钓鱼邮件发送的,这意味着每个用户都可能通过网络钓鱼的方式被攻击。

IoCs

360截图16440816717962.jpg

源链接

Hacking more

...