新型跨平台后门ACBackdoor介绍

Change Web安全 2019年11月24日发布
Favorite收藏

导语:本文对ACBackdoor多平台恶意软件进行了技术分析,经过对Windows实例的进一步分析,我们发现ACBackdoor的作者缺乏编写Windows恶意软件的经验。

介绍

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

 2019 11 11 233010 1257x213 scrot

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

 2019 11 11 233023 1260x212 scrot

图2.ACBackdoor Windows变种的VirusTotal检测率

本文将对ACBackdoor做技术分析,区分其两类变种实现上的差异。最终的调查结果表明,该恶意软件背后的团队先前具有针对Linux系统的经验,并且正在通过将ACBackdoor移植到Windows来扩大其覆盖范围。

技术分析

Linux二进制文件是一个静态链接的ELF文件,而Windows二进制文件是一个动态链接的PE文件。就整体功能而言,两类变种在本质上都是相同的,只是实现上有细微差别。它们都用相同的协议来与同一C2服务器通信,但是交付载体不同:

 2019 11 12 000451 807x440 scrot

图3.VirusTotal上描绘了样本之间的联系

我们在罗马尼亚的一台服务器上找到了Linux实例,但对于用于部署Linux实例的交付载体没有进一步的了解。

后来@nao_sec发现,Windows样本是通过Fallout Exploit Kit交付的,攻击者目前正在利用此工具包和恶意广告来传播Windows恶意软件。

后门分析

Windows变体并不代表设计上复杂。相反,Linux变体在用于复制相同功能的实现细节方面表现得更为复杂。

我们首先注意到编译的Windows二进制文件是使用MinGW编译器生成的。

 2019 11 12 110915 702x99 scrot

图4.在ACBackdoor Windows样本中标识的MinGW字符串

主要函数没有被混淆,逻辑上看起来很简单。在Windows变体中,可以看到函数开头如何解码某些字符串。

 2019 11 12 111229 712x581 scrot

图5.Windows样本主要函数

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

 2019 11 12 112102 603x541 scrot

图6.ACBackdoor Linux实例主要函数

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

 pasted image 0 14

图7.ACBackdoor Linux和Windows样本之间的代码结构相似性

收集这些信息后,恶意软件将连接这些字段,添加字符串“0.5”(可能表示某种版本ID),然后用MD5 哈希算法加密字符串。

 pasted image 0 13

图8.从两个ACBackdoor样本中收集的受损主机信息

序列化受害者信息后,恶意软件将应用一些持久性机制。Windows实例将初始化注册表项以便在系统启动时执行恶意软件,它使用了Windows恶意软件中最常用的注册表项之一:HKCUSOFTWAREMicrosoftWindowsCurrentVersionRun;Linux实例将设置各种符号链接,并为该恶意软件添加一个initrd脚本,使其也可以在系统启动时运行。

这个注册表项的使用表明了创作者的经验不足,因为他使用了不太传统的持久性技术来编写更复杂的Windows恶意软件。

 pasted image 0 10图9.ACBackdoor示例的持久性实现

根据选择的名称来标记这个恶意软件的持久性实例,我们可以看到Windows实例试图将自己伪装成Microsoft的反间谍工具(MsMpEng.exe),而Linux实例试图将自己伪装成Ubuntu的发布更新工具(update-notifier)。

然后Linux实例将通过fork/setsid系统调用设置一个独立的会话,以创建一个独立的进程。它将使用prlimit/close系统调用来关闭不必要的文件描述符,然后将其进程名重命名为内核线程的名称,尤其是“[kworker/u8:7-ev]”。

如果在受感染的Linux系统上运行ps命令,我们将在看到以下进程名称:

2019 11 12 121326 879x76 scrot

图10. ACBackdoor Linux实例执行的进程重命名

与C2通信

两类都采用HTTPS协议与相同C2服务器通信。恶意软件将使用先前收集的受害者信息作为初始数据包发送到C2,客户端似乎没有在TLS握手时验证证书的真实性,因此通信很容易受到MITM攻击。

恶意软件会为HTTP请求创建标头,其中包含一些自定义标头,标头嵌入了特定信息以供服务器收集。下图是来自受感染Linux主机的截取的初始TLS剥离数据包中显示了这些标头:

 2019 11 12 123233 693x276 scrot

图11.拦截的TLS剥离的HTTPS数据包

在不同的标头中,我们可以突出显示“ Access-Control”和“ X-Access”标头,它们是非常规的HTTP标头。Access-Control包含命令类型的base64编码的字符串,在本例中类型为“ info”,即发送到C2的初步数据包;X-Access包含一个MD5哈希,用作对所包含有效负载的完整性检查。如上文所述,此MD5哈希是先前在收集受害者信息之后生成的。

有效负载采用base64编码,并且包含所有受感染主机信息的字符串。

然后恶意软件等待初始包响应,以便执行命令。

ACBackdoor总共支持四个命令:info,run,execute和update。

 pasted image 0 12

图12.命令处理控制流程图

如前所述,info命令实际上是客户端和C2之间的第一接触点;run命令用于运行任意的shell命令;execute命令能够在受感染的主机中执行给定的二进制文件;而update命令则更新客户端本身。

在Windows和linux版本之间,这些命令的实现方式有所不同。但有些细节可能表明,作者编写Linux恶意软件的经验要更多,这点可以通过execute命令的实现观察到。

在Windows实例中,此命令是通过CreateFile和CreateProcess Win32 API函数实现的;在Linux中,使用的是memfd_create、fork和execveat系统调用的组合: pasted image 0 11图13.Execute命令实现

乍一看,这些Execute命令的实现在功能上似乎并没有太大不同,但Linux实例实现提供了执行无文件代码的方法。

这些特定的细节以及上面的分析使我们得出结论,ACBackdoor的作者更愿意在Linux系统上操作,而他们目前可能正在Windows中进行实验,以便之后将恶意软件移植到这个系统中。

结论

本文对ACBackdoor多平台恶意软件进行了技术分析,经过对Windows实例的进一步分析,我们发现ACBackdoor的作者缺乏编写Windows恶意软件的经验。

除了具有较低的检测率外,Linux版本在逻辑上总体上与Windows变体相似。Linux植入程序的编写明显优于Windows植入程序,突出了持久性机制的实现,以及不同的后门命令和Windows版本中没有的其他特性,如独立进程创建和进程重命名。

但这个后门中没有记录可归属的信息,所以有可能是某个已知的威胁组织正在拓展它的工具集。

此外,这进一步证明Linux变种的检测率始终低于Windows。

本文翻译自:https://www.intezer.com/blog-acbackdoor-analysis-of-a-new-multiplatform-backdoor/​如若转载,请注明原文地址: https://www.4hou.com/web/21679.html
点赞 2
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论