新型跨平台后门ACBackdoor介绍

来源:岁月联盟 编辑:猪蛋儿 时间:2020-01-29

Intezer安全研究团队近日检测到了一类新型后门——ACBackdoor,它具有Linux和Windows两种变种,能提供shell命令的任意执行、任意二进制文件执行、持久性和更新功能。目前尚无法将ACBackdoor关联到任何已知的威胁组织。在VirusTotal上,对Linux变种的检测率为0,而Windows变种的检测率要相对高些,如下图所示。
 

图1.ACBackdoor Linux变种的VirusTotal检测率
 

图2.ACBackdoor Windows变种的VirusTotal检测率
本文将对ACBackdoor做技术分析,区分其两类变种实现上的差异。最终的调查结果表明,该恶意软件背后的团队先前具有针对Linux系统的经验,并且正在通过将ACBackdoor移植到Windows来扩大其覆盖范围。
技术分析
Linux二进制文件是一个静态链接的ELF文件,而Windows二进制文件是一个动态链接的PE文件。就整体功能而言,两类变种在本质上都是相同的,只是实现上有细微差别。它们都用相同的协议来与同一C2服务器通信,但是交付载体不同:
 

图3.VirusTotal上描绘了样本之间的联系
我们在罗马尼亚的一台服务器上找到了Linux实例,但对于用于部署Linux实例的交付载体没有进一步的了解。
后来@nao_sec发现,Windows样本是通过Fallout Exploit Kit交付的,攻击者目前正在利用此工具包和恶意广告来传播Windows恶意软件。
后门分析
Windows变体并不代表设计上复杂。相反,Linux变体在用于复制相同功能的实现细节方面表现得更为复杂。
我们首先注意到编译的Windows二进制文件是使用MinGW编译器生成的。
 

图4.在ACBackdoor Windows样本中标识的MinGW字符串
主要函数没有被混淆,逻辑上看起来很简单。在Windows变体中,可以看到函数开头如何解码某些字符串。
 

图5.Windows样本主要函数
我们可以在解密的字符串中看到特定于Linux的字符串,例如内核线程进程名称或属于Linux文件系统的路径。这些字符串在Linux样本中也使用了,此外在二进制文件之间没有任何其他交叉引用,这可能意味着当开发人员将代码从其Linux实现移植到其Windows版本时,他们懒得将其删除。
 

图6.ACBackdoor Linux实例主要函数
初始字符串解码后,恶意软件通过收集架构、系统和MAC地址信息来对受害者序列化。Windows变体收集这些信息的方式是通过调用相应的Windows API函数,例如IsWow64Process确定操作系统,GetAdaptersInfo来检索系统的MAC地址;而Linux变体则使用uname系统调用来检索体系结构和系统信息,此外还结合了socket / ioctl系统调用来检索MAC地址。
 

图7.ACBackdoor Linux和Windows样本之间的代码结构相似性
收集这些信息后,恶意软件将连接这些字段,添加字符串“0.5”(可能表示某种版本ID),然后用MD5 哈希算法加密字符串。
 

图8.从两个ACBackdoor样本中收集的受损主机信息
序列化受害者信息后,恶意软件将应用一些持久性机制。Windows实例将初始化注册表项以便在系统启动时执行恶意软件,它使用了Windows恶意软件中最常用的注册表项之一:HKCUSOFTWAREMicrosoftWindowsCurrentVersionRun;Linux实例将设置各种符号链接,并为该恶意软件添加一个initrd脚本,使其也可以在系统启动时运行。
这个注册表项的使用表明了创作者的经验不足,因为他使用了不太传统的持久性技术来编写更复杂的Windows恶意软件。
 

图9.ACBackdoor示例的持久性实现
根据选择的名称来标记这个恶意软件的持久性实例,我们可以看到Windows实例试图将自己伪装成Microsoft的反间谍工具(MsMpEng.exe),而Linux实例试图将自己伪装成Ubuntu的发布更新工具(update-notifier)。
然后Linux实例将通过fork/setsid系统调用设置一个独立的会话,以创建一个独立的进程。它将使用prlimit/close系统调用来关闭不必要的文件描述符,然后将其进程名重命名为内核线程的名称,尤其是“[kworker/u8:7-ev]”。
如果在受感染的Linux系统上运行ps命令,我们将在看到以下进程名称:

[1] [2]  下一页