针对 Linux 系统的恶意爬虫软件分析
2023-8-10 16:47:0 Author: paper.seebug.org(查看原文) 阅读量:26 收藏

原文链接:Reptile Malware Targeting Linux Systems
译者:知道创宇404实验室翻译组

爬虫是一个针对Linux系统的开源内核模块rootki(其可在 GitHub 上获取)。爬虫可隐藏自身及其他恶意软件,主要针对目标为:文件、进程和网络通信等。Reptile的隐藏功能不仅包括它自己的内核模块,还包括文件、目录、文件内容、进程和网络流量。

与其他通常只提供隐藏功能的爬虫恶意软件不同,爬虫可以提供了一个反向shell,允许威胁参与者轻松控制系统。端口敲门是爬虫所支持的最显著的特性,当打开恶意软件时受感染系统的特定端口会进入到备用状态。威胁者会向系统发送Magic Packet,而接收到的数据包也会作为与C&C服务器建立连接的基础。

该方法类似早期Avast在报告中提到的Syslogk,但主要的区别在于Syslogk是基于另一个Adore-Ng的开源Linux内核rootkit而开发的。但两者间的相似点在于:被Magic Packet 触发之前在受感染的系统中会处于待机状态,且会使用定制的 inySHell (即Rekoobe)作为攻击的后门。

在GitHub上开放源代码后,爬虫一直被用于攻击中。Mandiant最新报告证实一个位于中国的威胁组织在利用Fortinet产品中的零日漏洞持续进行的攻击过程中攻击中使用了爬虫。此外,ExaTrack在分析Mélofée恶意软件的报告中也发现了Reptile rootkit。ExaTrack将此归因于位于该事件时中国的Winnti攻击组织行为。

本文我们将简要分析爬虫的基本结构和功能,并整理出它被用于攻击韩国公司的事件概述。最后,我们将根据恶意软件的安装路径或伪装的目录名,总结与Mélofée恶意软件案例的相似之处。

1.1 爬虫结构分析

图1:爬虫的运行结构

1.1.1 威胁行为者系统分析

除支持安装在受感染系统上的恶意软件,爬虫还支持威胁行为者使用的工具。侦听器是一个命令行工具,通过给定侦听端口及运行密码。它等待反向shell的连接,该连接会在受感染的系统上执行。根据选项的不同,爬虫可以在安装后建立指定地址的反向shell连接。这种情况下,运行在C&C服务器上的侦听器接收此连接并向威胁者提供shell。

即使未指定威胁者的C&C服务器,其也可以使用端口敲门方式将特定数据包传输到受感染的系统,从而触发反向shell。这个行为主要通过一个Packet的命令行工具实现,该工具接受反向shell连接地址和端口敲门方法中使用的协议等参数。侦听器和数据包可以手动使用,也可以通过提供接口的客户端使用。

1.1.2 受影响的系统

如果未指定安装路径,则默认安装在“/reptile/”目录下,文件名分别为“reptile”、“reptile_shell”和“reptile_cmd”。“reptile”加载程序负责解密和加载在文件中进行加密的reptile rootkit内核模块,也就是说Reptile rootkit不是只作为内核模块文件直接存在的。相反,它是由加载程序通过解密安装的。

图2:安装目录

reptile_cmd负责向Reptile rootkit传输命令,通过指定并执行要隐藏的目标作为参数来与rootkit通信。反向shell恶意软件 reptile_shell接收命令行参数,并由Reptile rootkit进行执行。

如果指定了在安装过程中尝试直接连接到C&C服务器的选项,该命令则将分配给/reptile/reptile_start脚本文件。恶意爬虫软件通过加载内核模块执行上述脚本文件来操作反向shell。此外,如果通端口敲门方法接收到该地址,还可以执行反向shell并发送解密后的C&C服务器地址。

1.2 恶意爬虫软件分析

在/reptile/目录中创建的爬虫不是一个内核模块,而是一个用户模式应用程序。当加载程序被执行时,它会解密包含在数据段中的爬虫内核模块,然后使用init_module()函数将其加载到内存中。此外,用于加密和解密的算法也将在解密Magic Packet时使用。同时在构建过程中也会随机生成键值,而这也会导致生成的每个文件会有不同的值。

图3:爬虫中使用的加密功能

加载的爬虫是一个内核模块,主要通过kmatryoshka开源工具进行打包。kmatryoshka是一个基于Linux内核模块的打包器,负责解密以加密形式存在的原始内核模块。然后它利用sys_init_module()函数来进行加载。因此,原始的Reptile爬虫以打包的形式存在于用户模式和内核模式中。

图4:kmatryoshka 程序

1.2.1 隐蔽特征分析

爬虫使用KHOOK的Linux内核函数挂钩引擎来挂钩内核函数。如:它挂钩 ip_rcv()内核函数来使用端口敲门方法,以此监控收到的数据包。

当向rootkit发送命令时,爬虫使用reptile_cmd向爬虫内核模块发送ioctl。为了监视这个ioctl,inet_ioctl()内核函数被挂起。在发送给ioctl的数据中,cmd表示命令号。与进程隐藏命令一样,如果需要额外的数据(如PID),则使用控制结构的argv变量来传输数据。在命令下发过程中,AUTH和HTUA是随机值。爬虫监视ioctl,并在找到匹配项时执行相应的操作。

图5:ioctl 的传输

表1:cmd 命令

除了隐藏和端口敲门功能之外,爬虫还提供了一个功能:可以使用root命令为当前用户提供root权限。它还通过Udev支持持久性。下面的规则文件是在/lib/udev/rules.d/目录中创建的,复制的路径被指定为确保即使在重新引导后也能执行。

图6:已创建udev规则文件

1 文件和目录隐藏

爬虫恶意软件可以根据“hide”和“show”命令隐藏或显示文件和目录。隐藏目标是在生成过程中包含指定字符串的路径。为此,它挂钩了多个内核函数,包括 fillonedir()、filldir()和filldir64()。如果隐藏目标的字符串出现在路径名中,挂钩函数返回“ENOENT”,即“没有这样的文件或目录”错误。

图7:隐藏文件和目录

2 自我隐藏

“hide”和“show”命令不仅支持文件和目录的隐藏,还支持爬虫内核模块本身的隐藏。当接收到“hide”命令时,当前模块将从模块列表中删除。因此,使用lsmod命令将不会显示当前安装的Reptile内核模块。

3 过程隐藏

当 PID 与“隐藏”或“显示”命令一起给出时,PID 的进程被隐藏。进程隐藏主要有四种方法,一个是挂钩find_task_by_vpid() 函数为隐藏目标的进程返回NULL,另一个是挂钩 vfs_statx() 函数返回“ EINVAL ”(无效参数)错误。此外,find_task_by_vpid() 函数用于系统调用,如 getsid()和getpgid()。

此外,挂钩next_tgid()可以跳过隐藏目标的进程,使其在/proc/列表中不可见。最后,sys kill和x64_sys_kill系统调用,并返回一个“ESRCH”(No such process)错误。除此之外,load_elf_binary()函数是挂钩的,路径为reptile_shell的进程是隐藏的。

4 TCP/UDP隐藏

如果将“conn”命令和隐藏目标的 IP 地址作为参数传输,则可以隐藏TCP/UDP网络通信。tcp4_seq_show() 和udp4_seq_show() 函数则会进行挂钩。

5 文件内容隐藏

爬虫提供了一个文件篡改功能,其允许文件内容被隐藏。当在构建过程中的标签(如下所示)被添加到文件内容中时,这些标签之间的字符串将被隐藏。默认情况下,可以使用标签“#”和“#”。激活该特性的命令是“文件篡改”,它涉及到挂钩vfs_read()函数。

1.2.2 端口敲门

恶意爬虫软件支持端口敲门技术。在被安装到受感染的系统上后,它不会立即连接到C&C服务器,而是打开某个端口并等待,直到威胁者向系统发送Magic Packet后开始运行。通过Magic Packet接收的数据包含C&C服务器地址,基于此,反向shell连接到C&C服务器。

在爬虫的defconfig文件中,有一些基本的配置。默认情况下,MAGIC_VALUE设置为“hax0r”,PASSWORD设置为“s3cr3t”,SRCPORT设置为“666”。

图8:取消配置文件

受感染系统上的爬虫程序rootkit挂钩内核功能,并监控通过TCP、UDP和ICMP协议传入的数据包。如果收到TCP或UDP数据包,首先检查源端口。上面配置文件中指定的“666”端口是目标端口。

图9:SRCPOR扫描

威胁者可以使用客户端将Magic Packet传输到受感染的系统。他们可以选择TCP、UDP或ICMP协议中的一个作为端口敲门技术的一部分。接着必须在上面创建爬虫过程中指定受感染系统的IP地址和配置数据集,包括MAGIC_VALUE、PASSWORD和SRCPORT。之后,执行run命令时,Packet加密数据将其传输到受感染的系统中。

图10:使用端口敲门shell

端口666上侦听的Reptile通过该端口接收到一个数据包,接着会扫描收到的数据包中的数据,以检查值“hax0r”(该值由MAGIC_VALUE和TOKEN指定)。接着Reptile会对数据包进行解密,并获得C&C服务器的地址和端口号。然后使用这些值作为参数来执行reptile_shell(这是一个反向shell)。

图11:MAGIC_VALUE 扫描

1.3 反向shell

恶意爬虫软件执行的反向shell基于接收到的地址连接到C&C服务器,并提供shell访问。接着使用参数“s3cr3t”执行反向shell,该参数在配置数据中指定为PASSWORD,其口令用主要作用在C&C服务器上侦听器通信的会话密钥。

反向shell是一个命令行工具,基于所提供的参数进行操作,主要通过两种不同的方式执行。第一种方法是上面介绍的端口敲打技术。第二种方法涉及在Reptile rootkit内核模块的安装过程中执行。

图12:reptile_shell 的论元结构

安装完成后,恶意爬虫软件会在初始化过程中执行名为reptile_start的启动脚本。其中以包含许多命令,值得注意的命令是执行反向shell的命令。

图13:make进程和创建的爬虫启动脚本文件

爬虫的反向shell基于TinySHell(一个开源的Linux后门)产生的。Rekoobe是一个基于 TinySHell 的后门恶意软件。此外,根据Avast的报告:Syslogk rootkit还支持由 Magic Packet 触发的端口敲门方法。它还利用TinySHell 的定制版本 Rekoobe 作为后门。基于这些相似性,可以推测 Syslogk 威胁者可能在其恶意软件中采用了爬虫的结构。

与 TinySHell 相比,爬虫的反向shell显示出惊人的相似性,大部分代码以及支持的命令都是相同的。特别是使用HMAC SHA1算法和AES-128密钥来加密C&C服务器的通信数据和在通信过程中用于完整性验证的数据也是相同的。

图14:make进程和创建的爬虫启动脚本文件

具体来说,爬虫反向shell除了支持文件下载/上传和命令执行之外,还支持延迟命令。此外,它还包含一个内置功能,可以通过ioctl向恶意爬虫软件发送隐藏命令,有效地隐藏与C&C服务器的通信。

2 攻击事件

2.1 病毒总数搜索

由于它是一个开源恶意软件,因此随着时间的推移,它已经被各种各样的威胁者所利用。即使排除掉最近Mandiant报道的中国威胁组织对Fortinet产品的零日漏洞攻击案例后,仍可观察到VirusTotal平台上恶意爬虫软件内容的定期上传。

虽然不确定它们是否被用于实际的攻击,但在过去几年中,有大量的恶意爬虫软件被定期上传到VirusTotal。在本节中,从这些爬虫部分样本中提取配置数据并进行分类。在检查内核模块的ver magic时,明显看到它们中的大多数专门针对RHEL或CentOS Linux,其主要用于攻击或测试目的。

表2:爬虫类rootkits上传到VirusTotal

2.2 韩国的攻击案例

Reptile 曾被用来攻击韩国企业。最初的渗透方法仍未确定,但经过检查恶意爬虫软件、反向shell、Cmd和启动脚本都包含在内,从而可以确定基本配置。

在这个特殊的攻击案例中,除了爬虫之外,攻击者还利用了一个名为ISH的基于cmp的shell。ISH是一种恶意软件,它使用ICMP协议为威胁者提供shell。通常,反向shell或绑定shell使用TCP或HTTP等协议,但据推测威胁者选择ISH主要是用来逃避由这些通信协议引起的网络检测。

2.2.1 REPTILE 分析

该恶意软件被安装在“/etc/intel_audio/”目录中,威胁者使用 “intel_audio” 而不是“Reptile作为他们的关键字。

图15:intel音频启动脚本

此外,intel_audio_start文件中没有任何命令行来执行反向shell,这表明反向shell很可能是通过端口敲门方法使用的,或者是绑定的shell ISH。除此之外,攻击者还激活了文件篡改功能。

接下来,在检查rc.local自动运行脚本时,很明显,在标签“#”和“#”之间存在一个确保持久性的命令,这些标签已经被标记为隐藏文件篡改功能。值得注意的一点是,威胁者以内核模块的形式使用Reptile,而不是加载程序。因此,他们通过手动输入insmod命令来加载“/etc/Intel _ audio/Intel _ audio . ko”命令。

图16:rc.local中的自动运行脚本

Intel_audio.Ko 是一个内核模块,被加载打包之前先用进行kmatryoshka打包。在检查内核模块“3.10.0-514.el7”。x86_64的vermagic后,推测出受感染的系统可能是Red Hat或基于CentOS的Linux系统。

提取的爬虫包含各种硬编码的配置数据。例如,在reptile_init()函数中,启动脚本文件的路径名“/etc/Intel _ audio/Intel _ audio _ start”被识别。一个显著的特征是,威胁者将MAGIC_VALUE和PASSWORD字符串设置为与glibc相关的字符串,以将其伪装成普通程序。

图17:reptile 初始化()函数

表3:韩国攻击事件中使用的reptile配置数据
2.2.2 ICMP shell 分析

在位于“/etc/Intel _ audio/gvfs-GD b-volume-monitor”的“rc.local”自动运行脚本中执行隐藏的文件是一个名为ISH的ICMP Shell。Ish由服务器模块ishd和客户端模块ISH组成。“gvfs-gdb-volume-monitor”文件作为ishd运行,由Reptile rootkit 执行并保持监听状态。据推测,当攻击者使用Ish建立连接时,会提供ICMP Shell。“gvfs-gdb-volume-monitor”中标识的命令行选项与ishd相同。

图18:ishd 的主程序

此外,当威胁者创建ishd恶意软件时,他们选择不按原样使用源代码。他们进行了修改将其伪装成一个正常的程序,这样可以避免文件检测。下图中,左侧显示的是原ishd源代码中标识的usage()函数,右侧显示的是“gvfs-gdb-volume-monitor”中的usage()函数。这使得恶意软件被视为正常程序,而不是绑定shell,因为它在执行时输出字符串“ICMP调试工具”,而没有任何特定参数。

图19:修改的输出字符串

ExaTrack 对最近以Linux服务器为目标的恶意软件进行了分析,并将其命名为 Mélofée。根据攻击中使用的恶意软件和基础设施,他们确定了与 Winnti (APT41) 威胁组织的联系,该组织在中国开展活动。

威胁者在他们的攻击过程中也使用了恶意爬虫软件,一个显著的特点是爬虫安装在路径名“/etc/Intel _ audio/Intel _ audio . ko”中。作为参考,路径“/etc/Intel _ audio/Intel _ audio . ko”与之前提到的针对韩国公司的Linux 服务器攻击案例中Reptile rootkit的安装路径相同。

攻击过程中恶意爬虫软件的使用、安装路径相同,主要通过“insmod”命令而不是Reptile提供的常规方法直接安装内核模块,是这两种攻击案例之间的共同点。

图20:由Mélofée创建的rc.modules文件

然而,也有不同之处。在Mélofée攻击案例中,使用的Reptile只激活了文件隐藏功能,隐藏路径被硬编码到两个位置:“intel_audio”和“rc.modules”。

图21:隐蔽目标的硬编码路径

由于韩国攻击事件中的可用信息有限,除了恶意软件之外,可以收集的信息有限。然而值得注意的是,关键字“intel_audio”虽然只是用来伪装成正常的内核模块路径,但它是一个不常见的字符串,这在两种攻击情况下都是一个显著的特征。

爬虫是一个Linux内核模式rootkit 恶意软件,它为文件、目录、进程和网络通信提供隐藏功能。由于是开源的,爬虫很容易被各种威胁者利用,这导致了大量攻击案例被发现。考虑到rootkits的性质,它们经常与其他恶意软件结合使用。然而,爬虫本身也提供了一个反向shell,这使得其更同意被威胁者挟持。

为了防止这种安全威胁,必须检查系统的攻击的配置并保持更新,以保护它们免受攻击。此外,V3应该更新到最新版本,这样可以防止恶意软件感染。

AhnLab的反恶意软件解决方案V3使用以下检测名称来检测和阻止这些恶意软件。

File Detection

– Trojan/Script.Config (2023.07.20.03)
– Rootkit/Linux.Reptile.644496 (2020.05.31.00)
– Trojan/Linux.Reptile.10416 (2020.05.31.00)
– Trojan/Linux.Rvshell.55784 (2020.05.31.00)
– Backdoor/Linux.Ishell.10576 (2020.05.31.00)
– Rootkit/Linux.Reptile.560980 (2023.07.18.00)
– Rootkit/Linux.Reptile.802168 (2023.07.18.00)
– Rootkit/Linux.Reptile.799432 (2023.07.18.00)
– Rootkit/Linux.Reptile.569740 (2023.07.18.00)

IOC
MD5

– 1957e405e7326bd2c91d20da1599d18e: Startup script (intel_audio_start)
– d1abb8c012cc8864dcc109b5a15003ac: Reptile Rootkit (intel_audio.ko)
– f8247453077dd6c5c1471edd01733d7f: Reptile Cmd (intel_audio_cmd)
– cb61b3624885deed6b2181b15db86f4d: Reptile Reverse Shell (intel_audio_reverse)
– c3c332627e68ce7673ca6f0d273b282e: ICMP Shell (gvfs-gdb-volume-monitor)
– 246c5bec21c0a87657786d5d9b53fe38: Reptile rootkit (rxp.ko)
– bb2a0bac5451f8acb229d17c97891eaf: Reptile rootkit (falc0n.ko)
– 977bb7fa58e6dfe80f4bea1a04900276: Reptile rootkit (N/A)
– 5b788feef374bbac8a572adaf1da3d38: Reptile rootkit (myshell.ko


Paper 本文由 Seebug Paper 发布,如需转载请注明来源。本文地址:https://paper.seebug.org/3004/


文章来源: https://paper.seebug.org/3004/
如有侵权请联系:admin#unsafe.sh