微软对Linux平台XorDdos恶意软件的分析(上) - 嘶吼 RoarTalk – 回归最本质的信息安全,互联网安全新媒体,4hou.com

微软对Linux平台XorDdos恶意软件的分析(上)

luochicun 技术 2022-05-24 11:55:00
收藏

导语:使用僵尸网络执行DDoS攻击可能会造成重大破坏,例如微软在2021年8月缓解的2.4TbpsDDoS攻击。由于多种原因,DDoS攻击本身可能会带来很大的问题,但此类攻击也可以用作掩护隐藏进一步的恶意活动。

在过去的六个月里,微软的研究人员发现一种名为XorDdos的Linux木马的活动增加了254%。XorDdos是由MalwareMustDie研究团队于2014年首次发现的,其名称来源于其在Linux终端和服务器上的拒绝服务相关活动,以及其在通信中使用基于XOR的加密。

存在于linux的操作系统的XorDdos恶意软件越来越多,而linux操作系统通常部署在云基础设施和物联网设备上。通过破坏物联网和其他联网设备,XorDdos积累了可用于执行分布式拒绝服务(DDoS)攻击的僵尸网络。使用僵尸网络执行DDoS攻击可能会造成重大破坏,例如微软在2021年8月缓解的2.4TbpsDDoS攻击。由于多种原因,DDoS攻击本身可能会带来很大的问题,但此类攻击也可以用作掩护隐藏进一步的恶意活动,例如部署恶意软件和渗透目标系统。

僵尸网络也可以被用来危害其他设备,XorDdos以使用SecureShell(SSH)暴力攻击来获得对目标设备的远程控制而闻名。SSH是IT基础设施中最常见的协议之一,它可以在不安全的网络上进行加密通信以实现远程系统管理,使其成为攻击者的首选工具。一旦XorDdos识别出有效的SSH凭证,它就使用根权限运行一个脚本,该脚本将下载XorDdos并将其安装到目标设备上。

XorDdos使用规避和持久性机制,使其操作保持稳健和隐秘。它的规避能力包括混淆恶意软件的活动、规避基于规则的检测机制和基于哈希的恶意文件查找,以及使用反取证技术来破坏基于进程树的分析。研究人员在最近的活动中观察到,XorDdos通过用空字节覆盖敏感文件来隐藏恶意活动以防止分析。它还包括支持不同Linux发行版的各种持久性机制。

1.png

XorDdos恶意软件的典型攻击载体

XorDdos还被用来传递其他危险的威胁。研究人员发现,最先被XorDdos感染的设备后来又被其他恶意软件感染,比如Tsunami后门,该后门进一步部署了XMRig挖矿程序。虽然研究人员没有观察到XorDdos直接安装和传播像Tsunami这样的二级有效负载,但该木马有可能被用作后续活动的载体。

MicrosoftDefenderforEndpoint通过检测和修复木马在其整个攻击链中的多阶段模块化攻击以及终端上的任何潜在后续活动来防止XorDdos。在本文中,研究人员将详细分析XorDdos,以帮助防御者了解其技术并保护他们的网络免受这种隐秘恶意软件的攻击。

初始访问

XorDdos主要通过SSH暴力进行传播。它使用一个恶意的shell脚本在数千个服务器上尝试各种根凭据组合,直到在目标Linux设备上找到匹配项。因此,研究人员在成功感染恶意软件的设备上看到许多失败的登录尝试:

2.png

在受XorDdos影响的设备上尝试登录失败

研究人员的分析确定了XorDdos的两种初始访问方法。第一种方法是将恶意ELF文件复制到临时文件存储/dev/shm中,然后运行它。/dev/shm中写入的文件会在系统重启时被删除,从而在取证分析过程中隐藏感染源。

第二种方法涉及运行一个bash脚本,该脚本通过命令行执行以下活动:

1、迭代以下文件夹以找到一个可写目录:

/bin
/home
/root
/tmp
/usr
/etc

2、如果已找到可写目录,则将工作目录更改为已找到的可写目录。

3、使用curl命令从远程位置下载ELF文件有效负载hxxp://Ipv4PII_777789ffaa5b68638cdaea8ecfa10b24b326ed7d/1[.]txt并将文件保存为ygljglkjgfg0。

4、将文件模式改为“可执行”。

5、运行ELF文件负载。

6、移动和重命名Wget二进制文件,以规避恶意使用Wget二进制文件所触发的基于规则的检测。在这种情况下,它将Wget二进制文件重命名为good,并将文件移动到以下位置:

mv/usr/bin/wget/usr/bin/good
mv/bin/wget/bin/good

7、尝试第二次下载ELF文件有效负载,现在只使用filegood而不是Wget二进制文件。

8、运行ELF文件后,使用反取证技术通过用换行符覆盖以下敏感文件的内容来隐藏其过去的活动:

3.png


初始访问使用的远程bash脚本命令

无论使用哪种初始访问方法,结果都是一样的:运行恶意ELF文件,即XorDdos恶意软件。接下来,我们将深入研究XorDdos有效负载。

XorDdos有效负载分析

本文研究分析的XorDdos有效负载是一个32位ELF文件,没有被用过,这意味着它包含调试符号,详细说明了恶意软件的每个活动的专用代码。与丢弃这些符号的被污染过的二进制文件相比,包含调试符号使调试和反向工程非污染二进制文件更容易。在这种情况下,未污染的二进制文件包括以下与符号表条目关联的源代码文件名,它们是ELF文件中.strtab部分的一部分:

crtstuff.c
autorun.c
crc32.c
encrypt.c
execpacket.c
buildnet.c
hide.c
http.c
kill.c
main.c
proc.c
socket.c
tcp.c
thread.c
findip.c
dns.c

上面的源代码文件名列表表明二进制文件是用C/c++编程的,并且它的代码是模块化的。

反检测能力

XorDdos包含具有逃避检测的特定功能模块,详细信息如下。

守护进程(Daemon process) 

守护进程是一个在后台运行而不是在用户控制下的进程,它与控制终端分离,仅在系统关闭时终止。与某些Linux恶意软件系列类似,XorDdos木马使用守护进程(如下详述)来破坏基于进程树的分析。守护进程(Daemon)是一类在后台长期运行的特殊进程,一般在系统引导时开始启动,一直运行到系统关闭。守护进程一般用于提供某种服务,比如log打印守护进程syslogd,任务规划守护进程crond,实现Dbus总线功能的dbus守护进程等。

1、恶意软件调用子程序daemon(__nochdir,__noclose)将自己设置为后台守护进程,该进程在内部调用fork()和setsid()。fork()API创建一个与调用进程具有相同进程组ID的新子进程。

2、成功调用fork()API后,父进程通过返回“EXIT_SUCCESS(0)”停止。目的是保证子进程不是组进程的leader,这是setsid()API调用成功的前提。然后它调用setsid()将自己与控制终端分离。

3、如果调用第一个参数__nochdir的值等于“0”,则守护程序子例程还具有将目录更改为根目录(“/”)的规定。守护进程将目录更改为根分区(“/”)的原因之一是因为从挂载的文件系统运行进程会阻止卸载,除非进程停止。

4、它将第二个参数__noclose传递为“0”,以将标准输入、标准输出和标准错误重定向到/dev/null。它通过在/dev/null的文件描述符上调用dup2来做到这一点。

5、恶意软件调用多个信号API以忽略来自控制终端的可能信号,并在终端会话断开时将当前进程与标准流和挂断信号(SIGHUP)分离。执行这种规避信号抑制有助于阻止标准库尝试写入标准输出或标准错误或尝试从标准输入读取的影响,这可能会阻止恶意软件的子进程。APIsignal()将信号符号的处置设置为处理程序,它是SIG_IGN、SIG_DFL或程序员定义的信号处理程序的地址。在本例中,第二个参数被设置为"SIG_IGN=1",它忽略了与signum对应的信号。

6.png

忽略与终端相关操作相关的信号

基于XOR的加密

顾名思义,XorDdos使用基于xor的加密来混淆数据。它调用dec_conf函数来使用XOR秘钥“BB2FA36AAA9541F0”对编码字符串进行解码。下表显示了在恶意软件的各个模块中用于执行其活动的混淆数据的解码值。

7.png

进程名称欺骗

当一个进程启动时,参数作为以null结尾的字符串提供给它的main函数,其中第一个参数始终是进程映像路径。为了欺骗其进程名称,XorDdos在运行时将所有参数缓冲区清零,并使用虚假命令行(例如catresolv.conf)覆盖它的第一个包含图像路径的参数缓冲区。

8.png

通过修改与参数向量关联的内存来实现进程名称欺骗

9.png

'ps-aef'的输出包含一个"catresolv.conf"条目

内核rootkit

一些XorDdos示例安装内核rootkit。rootkit是一个内核模块,通过修改操作系统数据结构来隐藏恶意代码的存在。XorDdos内核rootkit通常具有以下功能:

提供根访问;

隐藏内核模块;

隐藏恶意软件的进程;

隐藏恶意软件的网络连接和端口;

根据在rootkit中发现的调试符号,XorDdos的rootkit代码很可能受到了名为rooty的开源项目的启发。下表描述了rootkit中的符号及其相应的功能:

10.png

进程和端口隐藏

该恶意软件试图使用其内核rootkit组件隐藏其进程和端口。隐藏进程有助于恶意软件规避基于规则的检测。

/proc文件系统包含与所有正在运行的进程相关的信息。用户模式的进程可以通过读取/proc目录来获取任何与进程相关的信息,该目录包含系统中每个正在运行的进程的子目录,例如:

/proc/7728——包含与进程ID(PID)7728相关的信息;

/proc/698——包含PID698相关信息;

运行strace-eopenps命令检查/proc/$pid上的open调用的踪迹,以获取ps命令中正在运行的进程的信息。

11.png

如果恶意软件隐藏了$pid特定目录,它可以隐藏从用户模式获取相应进程。

在本例中,恶意软件可以通过发送带有附加信息的输入和输出控制(IOCTL)调用来与其rootkit组件/proc/rs_dev进行通信,以采取适当的措施。IOCTL是用户模式服务和内核设备驱动程序之间通信的一种方式。该恶意软件使用数字“0x9748712”从系统中的其他IOCTL调用中唯一识别其IOCTL调用。

除了这个数字,它还传递一个整数数组。数组中的第一个条目对应于命令,第二个条目存储要操作的值,例如$pid。

12.png

本文翻译自:https://www.microsoft.com/security/blog/2022/05/19/rise-in-xorddos-a-deeper-look-at-the-stealthy-ddos-malware-targeting-linux-devices/如若转载,请注明原文地址
  • 分享至
取消

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

扫码支持

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

发表评论