原文链接:Reptile Malware Targeting Linux Systems
译者:知道创宇404实验室翻译组
Reptile 是一个针对Linux系统的开源内核模块rootki(其可在 GitHub 上获取)。Reptile 可隐藏自身及其他恶意软件,主要针对目标为:文件、进程和网络通信等。Reptile的隐藏功能不仅包括它自己的内核模块,还包括文件、目录、文件内容、进程和网络流量。
与其他通常只提供隐藏功能的 Reptile恶意软件不同,Reptile 可以提供了一个反向shell,允许威胁参与者轻松控制系统。端口敲门是Reptile 支持的最显著的特性,当打开恶意软件时受感染系统的特定端口会进入到备用状态。威胁者会向系统发送Magic Packet,而接收到的数据包也会作为与C&C服务器建立连接的基础。
该方法类似早期Avast在报告中提到的Syslogk,但主要的区别在于Syslogk是基于另一个Adore-Ng的开源Linux内核rootkit而开发的。但两者间的相似点在于:被Magic Packet 触发之前在受感染的系统中会处于待机状态,且会使用定制的 inySHell (即Rekoobe)作为攻击的后门。
在GitHub上开放源代码后,Reptile一直被用于攻击中。Mandiant最新报告证实一个位于中国的威胁组织在利用Fortinet产品中的零日漏洞持续进行的攻击过程中攻击中使用了Reptile 。此外,ExaTrack在分析Mélofée恶意软件的报告中也发现了Reptile rootkit。ExaTrack将此归因于位于该事件时中国的Winnti攻击组织行为。
本文我们将简要分析Reptile的基本结构和功能,并整理出它被用于攻击韩国公司的事件概述。最后,我们将根据恶意软件的安装路径或伪装的目录名,总结与Mélofée恶意软件案例的相似之处。
1 爬虫分析
1.1 Reptile 结构分析
1.1.1 威胁行为者系统分析
除支持安装在受感染系统上的恶意软件,Reptile还支持威胁行为者使用的工具。侦听器是一个命令行工具,通过给定侦听端口及运行密码。它等待反向shell的连接,该连接会在受感染的系统上执行。根据选项的不同,Reptile可以在安装后建立指定地址的反向shell连接。这种情况下,运行在C&C服务器上的侦听器接收此连接并向威胁者提供shell。
即使未指定威胁者的C&C服务器,其也可以使用端口敲门方式将特定数据包传输到受感染的系统,从而触发反向shell。这个行为主要通过一个Packet的命令行工具实现,该工具接受反向shell连接地址和端口敲门方法中使用的协议等参数。侦听器和数据包可以手动使用,也可以通过提供接口的客户端使用。
1.1.2 受影响的系统
如果未指定安装路径,则默认安装在“/reptile/”目录下,文件名分别为“reptile”、“reptile_shell”和“reptile_cmd”。“reptile”加载程序负责解密和加载在文件中进行加密的reptile rootkit内核模块,也就是说Reptile rootkit不是只作为内核模块文件直接存在的。相反,它是由加载程序通过解密安装的。
如果指定了在安装过程中尝试直接连接到C&C服务器的选项,该命令则将分配给/reptile/reptile_start脚本文件。Reptile恶意软件通过加载内核模块执行上述脚本文件来操作反向shell。此外,如果通端口敲门方法接收到该地址,还可以执行反向shell并发送解密后的C&C服务器地址。
1.2 恶意爬虫软件分析
在/reptile/目录中创建的Reptile不是一个内核模块,而是一个用户模式应用程序。当加载程序被执行时,它会解密包含在数据段中的Reptile 内核模块,然后使用init_module()函数将其加载到内存中。此外,用于加密和解密的算法也将在解密Magic Packet时使用。同时在构建过程中也会随机生成键值,而这也会导致生成的每个文件会有不同的值。
1.2.1 隐蔽特征分析
Reptile使用KHOOK的Linux内核函数挂钩引擎来挂钩内核函数。如:它挂钩 ip_rcv()内核函数来使用端口敲门方法,以此监控收到的数据包。
当向rootkit发送命令时,Reptile使用reptile_cmd向爬虫内核模块发送ioctl。为了监视这个ioctl,inet_ioctl()内核函数被挂起。在发送给ioctl的数据中,cmd表示命令号。与进程隐藏命令一样,如果需要额外的数据(如PID),则使用控制结构的argv变量来传输数据。在命令下发过程中,AUTH和HTUA是随机值。爬虫监视ioctl,并在找到匹配项时执行相应的操作。

/lib/udev/rules.d/
目录中创建的,复制的路径被指定为确保即使在重新引导后也能执行。
1 文件和目录隐藏
Reptile恶意软件可以根据“hide”和“show”命令隐藏或显示文件和目录。隐藏目标是在生成过程中包含指定字符串的路径。为此,它挂钩了多个内核函数,包括 fillonedir()、filldir()和filldir64()。如果隐藏目标的字符串出现在路径名中,挂钩函数返回“ENOENT”,即“没有这样的文件或目录”错误。
2 自我隐藏
“hide”和“show”命令不仅支持文件和目录的隐藏,还支持Reptile内核模块本身的隐藏。当接收到“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 文件内容隐藏
Reptile提供了一个文件篡改功能,其允许文件内容被隐藏。当在构建过程中的标签(如下所示)被添加到文件内容中时,这些标签之间的字符串将被隐藏。默认情况下,可以使用标签“#”和“#”。激活该特性的命令是“文件篡改”,它涉及到挂钩vfs_read()函数。
1.2.2 端口敲门
Reptile恶意软件支持端口敲门技术。在被安装到受感染的系统上后,它不会立即连接到C&C服务器,而是打开某个端口并等待,直到威胁者向系统发送Magic Packet后开始运行。通过Magic Packet接收的数据包含C&C服务器地址,基于此,反向shell连接到C&C服务器。
在Reptile的defconfig文件中,有一些基本的配置。默认情况下,MAGIC_VALUE设置为“hax0r”,PASSWORD设置为“s3cr3t”,SRCPORT设置为“666”。
1.3 反向shell
Reptile恶意软件执行的反向shell基于接收到的地址连接到C&C服务器,并提供shell访问。接着使用参数“s3cr3t”执行反向shell,该参数在配置数据中指定为PASSWORD,其口令用主要作用在C&C服务器上侦听器通信的会话密钥。
反向shell是一个命令行工具,基于所提供的参数进行操作,主要通过两种不同的方式执行。第一种方法是上面介绍的端口敲打技术。第二种方法涉及在Reptile rootkit内核模块的安装过程中执行。
与 TinySHell 相比,Reptile的反向shell显示出惊人的相似性,大部分代码以及支持的命令都是相同的。特别是使用HMAC SHA1算法和AES-128密钥来加密C&C服务器的通信数据和在通信过程中用于完整性验证的数据也是相同的。
2 攻击事件
2.1 病毒总数搜索
由于它是一个开源恶意软件,因此随着时间的推移,它已经被各种各样的威胁者所利用。即使排除掉最近Mandiant报道的中国威胁组织对Fortinet产品的零日漏洞攻击案例后,仍可观察到VirusTotal平台上Reptile恶意软件内容的定期上传。
虽然不确定它们是否被用于实际的攻击,但在过去几年中,有大量的Reptile恶意软件被定期上传到VirusTotal。在本节中,从这些爬虫部分样本中提取配置数据并进行分类。在检查内核模块的ver magic时,明显看到它们中的大多数专门针对RHEL或CentOS Linux,其主要用于攻击或测试目的。
2.2 韩国的攻击案例
Reptile 曾被用来攻击韩国企业。最初的渗透方法仍未确定,但经过检查Reptile恶意虫软件、反向shell、Cmd和启动脚本都包含在内,从而可以确定基本配置。
在这个特殊的攻击案例中,除了爬虫之外,攻击者还利用了一个名为ISH的基于cmp的shell。ISH是一种恶意软件,它使用ICMP协议为威胁者提供shell。通常,反向shell或绑定shell使用TCP或HTTP等协议,但据推测威胁者选择ISH主要是用来逃避由这些通信协议引起的网络检测。
2.2.1 REPTILE 分析
该恶意软件被安装在“/etc/intel_audio/”目录中,威胁者使用 “intel_audio” 而不是“Reptile作为他们的关键字。
接下来,在检查rc.local自动运行脚本时,很明显,在标签“#”和“#”之间存在一个确保持久性的命令,这些标签已经被标记为隐藏文件篡改功能。值得注意的一点是,威胁者以内核模块的形式使用Reptile,而不是加载程序。因此,他们通过手动输入insmod命令来加载“/etc/Intel _ audio/Intel _ audio . ko”命令。
提取的爬虫包含各种硬编码的配置数据。例如,在reptile_init()函数中,启动脚本文件的路径名“/etc/Intel _ audio/Intel _ audio _ start”被识别。一个显著的特征是,威胁者将MAGIC_VALUE和PASSWORD字符串设置为与glibc相关的字符串,以将其伪装成普通程序。

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相同。

3 与 Mélofée 的相似之处
ExaTrack 对最近以Linux服务器为目标的恶意软件进行了分析,并将其命名为 Mélofée。根据攻击中使用的恶意软件和基础设施,他们确定了与 Winnti (APT41) 威胁组织的联系,该组织在中国开展活动。
威胁者在他们的攻击过程中也使用了Reptile恶意软件,一个显著的特点是爬虫安装在路径名“/etc/Intel _ audio/Intel _ audio . ko”中。作为参考,路径“/etc/Intel _ audio/Intel _ audio . ko”与之前提到的针对韩国公司的Linux 服务器攻击案例中Reptile rootkit的安装路径相同。
攻击过程中Reptile恶意软件的使用、安装路径相同,主要通过“insmod”命令而不是Reptile提供的常规方法直接安装内核模块,是这两种攻击案例之间的共同点。
4 结论
Reptile是一个Linux内核模式rootkit 恶意软件,它为文件、目录、进程和网络通信提供隐藏功能。由于是开源的,Reptile很容易被各种威胁者利用,这导致了大量攻击案例被发现。考虑到rootkits的性质,它们经常与其他恶意软件结合使用。然而,Reptile本身也提供了一个反向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
转自:https://paper.seebug.org/3004/