导语:一种新型的MacOS后门程序正被黑客组织“海莲花”所使用,而其攻击目标是那些安装有Perl语言编程软件的Mac用户。
前言
趋势科技于上周三(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是一个在越南宣传民族独立和民主的组织。
恶意文档攻击时的截图
在收件人打开该文档时,它会建议收件人启用该文档的宏。而这个恶意宏则采用了十进制ASCII代码来逐个字符地进行混淆,以逃避各种杀毒软件的检测。这种字符串的混淆加大逆向分析技术的难度,会让该恶意软件看起来不那么可疑,如下图所示。
文档混淆后的代码片段
在逆向分析之后,研究人员可以看到恶意有效载荷是用Perl编程语言编写的。它从会从Word文档中提取theme0.xml文件,theme0.xml文件是一个带有0xFEEDFACE签名的Mach-O 32位可执行文件,用于作为OSX_OCEANLOTUS.D后门程序的滴管组件(dropper),不过theme0.xml在执行之前会被解压到 /tmp/system/word/theme/syslogd。
逆向分析之后的Perl有效载荷
滴管组件分析
滴管组件用于将后门安装到受感染的系统中,并建立其持久性攻击机制。
滴管组件的主要功能
滴管组件中的所有字符串以及后门本身都使用了硬编码的RSA256密钥进行加密。其中,加密字符串以两种形式存在:使用RSA256加密的字符串,以及混合使用自定义base64编码和RSA256加密的字符串。
硬编码的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),并写入之前确定的路径和文件。
滴管组件安装后门后,会将其属性设置为“隐藏”,并设置一个随机文件日期和时间
如上所示,当滴管组件安装后门程序时,它会将其属性设置为“hidden(隐藏)” ,并使用touch命令将文件创建日期和时间设置为随机值,touch命令为 touch –t YYMMDDMM “/path/filename” > /dev/null,此时访问权限将被更改为0x1ed = 755,这等于u=rwx,go=rx。
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将命令启动以使进程无限期地运行。这个持久性文件也被设置为隐藏着随机生成的文件日期和时间。
具有持久性设置的属性列表
/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则负责后门功能。
后门的主要功能
infoClient在HandlePP类中填充的变量:
属于HandlePP类的变量列表
clientID是来自环境变量的MD5哈希,而strClientID是clientID的十六进制表示。下面的所有字符串都是通过AES256和base64编码加密的。HandlePP::getClientID方法使用的是以下环境变量:
序列号
硬件UUID
MAC地址
随机生成的UUID
对于初始信息包来说,后门也会收集以下信息。
操作系统版本
运行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.。
Parser :: inBytes方法
如果clientID等于下面的字节序列B4 B4 B1 47 BC 5282873 1F 1A 01 6B FA 72 C0 73,那么这个扰码的版本就是使用第三个参数(0x10)计算的,它被当做一个DWORD来处理。每4个字节都与它异或,如下面的例子所示。
Parser :: inByte方法
当扰码一个字节时,扰码器首先确定字节值是奇数还是偶数。如果该值是奇数,则将字节加上一个随机生成的字节添加到数组中。如果该值是偶数的情况,首先添加随机生成的字节,然后添加字节。在上面的例子中,第三个参数是'1'= 0x31,这是一个奇数。这意味着它将字节'1'和一个随机生成的字节添加到最终的扰码阵列。
Parser :: inString方法
当扰码字符串时,扰码器会产生一个5字节长的序列。首先,它生成一个随机字节,然后是3个零字节,1个随机字节,最后是一个字节长度的字符串。假设研究人员要打乱字符串' Mac OSX 10.12。则它的长度是13 = 0x0d,两个随机字节是0xf3和0x92。最后的5字节序列看起来就像F3 00 00 92 0D,而原来的字符串则与5字节序列异或。
扰码Mac OSX 10.12
2.加密
加密的字节序列会被传递给Packet::Packet类的构造函数中,该类会创建一个随机的AES256密钥,并使用这个密钥对缓冲区进行加密。
3.对加密密钥编码
为了使C&C服务器能够解密加密数据,随机生成的AES256密钥必须连同加密数据一起包含在数据包中。然而,这个密钥也是通过异或操作XOR 0x13进行扰码的,随后对每个字节应用ROL 6操作。
在输出数据包中对AES256密钥进行扰码的函数
以下是在扰码和加密过程中的一些屏幕截图:
灰色部分的字节表示已加密的计算机信息
随机生成AES256密钥
扰码的AES256密钥(0xC1异或0x13 = 0xD2,0xD2 ROL 6 = 0xB4等)
用AES256密钥加密的计算机信息
发送到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截图所示。
交换系统数据包信息后与C&C服务器的通信过程
与此同时,负责后门功能的runHandle将使用以下后门命令调用requestServer方法(每个命令都有一个字节长的代码,并由Packet::getCommand提取):
getCommand方法
下图显示了几个可能的命令代码中的两个示例,这两个示例,都创建一个线程,每个线程负责下载和执行文件,或者在终端中运行一个命令行程序。
用于下载和执行的命令,以及在终端中运行一个命令
用于上传和下载文件的命令
支持的命令及其各自的代码
总结
虽然针对Mac设备的恶意攻击并不像其他系统那样常见,但这一新的MacOS后门的发现可能是通过网络钓鱼邮件发送的,这意味着每个用户都可能通过网络钓鱼的方式被攻击。
IoCs