Reptile 是一个针对 Linux 系统的开源内核模块 Rootkit,可在 GitHub 上公开获取。Rootkit 是具有隐藏自身或其他恶意软件能力的恶意软件。它们主要针对文件、进程和网络通信进行隐藏。Reptile的隐藏能力不仅包括其自身的内核模块,还包括文件、目录、文件内容、进程和网络流量。
与其他通常仅提供隐藏功能的 Rootkit 恶意软件不同,Reptile 更进一步,提供反向 shell,使威胁行为者能够轻松控制系统。端口敲门是 Reptile 支持的最显着的功能。端口敲门是恶意软件在受感染系统上打开特定端口并进入待机状态的一种方法。当威胁行为者向系统发送 Magic Packet 时,收到的数据包将用作与 C&C 服务器建立连接的基础。
这个方法和Avast之前的报告中提到的Syslogk类似。一个关键的区别是 Syslogk 是基于另一个名为 Adore-Ng 的开源 Linux 内核 rootkit 开发的。然而,Syslogk 和 Reptile 支持的功能有相似之处,例如在被 Magic Packet 触发之前在受感染的系统中处于待命状态,并使用定制的 TinySHell(称为 Rekoobe)作为攻击的后门。
在 GitHub 上以开源方式公开发布后,Reptile 一直被用于攻击。例如,Mandiant 最近的一份报告证实,一个位于中国的威胁组织利用 Fortinet 产品中的零日漏洞利用 Reptile 进行持续攻击。此外,在 ExaTrack 分析 Mélofée 恶意软件的报告中,还发现了 Reptile rootkit。ExaTrack 将其归因于总部位于中国的 Winnti 攻击组织的活动。
在这篇文章中,我们将简要分析 Reptile 的基本结构和功能,然后汇编其用于针对韩国公司的攻击的真实实例。另外,值得注意的是,韩国的攻击案例中也使用了ICMP Shell。最后,我们根据恶意软件的安装路径或伪装目录名,总结出与Mélofée恶意软件案例的相似之处。
1.爬虫分析
1.1. 爬虫的结构
图1 Reptile的运行结构
1.1.1. 威胁行为者的系统
除了提供要在受感染系统上安装的恶意软件之外,Reptile 还支持威胁行为者使用的工具。Listener 是一个命令行工具,通过提供它必须侦听的端口及其密码来进行操作。它等待来自反向 shell 的连接,该连接将在受感染的系统上执行。根据选项的不同,Reptile 可以在安装后建立到指定地址的反向 shell 连接。在这种情况下,C&C 服务器上运行的侦听器接收此连接并向威胁参与者提供 shell。
即使未指定威胁行为者的C&C服务器,也可以使用端口敲门方法将特定数据包传输到受感染的系统以触发反向shell。这是通过名为 Packet 的命令行工具实现的,该工具接受反向 shell 将尝试连接的地址以及端口敲门方法中使用的协议等参数。Listener和Packet可以手动使用,也可以通过提供接口的客户端使用。
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 脚本文件。Reptile rootkit在加载内核模块后通过执行上述脚本文件来操作反向shell。此外,如果通过端口敲门方法收到地址,它还可以执行反向shell并传输解密的C&C服务器地址。
1.2. 爬虫Rootkit分析
/reptile/目录下创建的爬虫不是内核模块而是用户态应用程序。当加载程序执行时,它会解密数据部分中包含的 Reptile 内核模块,然后使用 init_module() 函数将其加载到内存中。另外,后面解密Magic Packet时也会用到加密和解密时使用的算法。键值是在构建过程中使用随机值生成的,导致每个生成的文件具有不同的值。
图3. Reptile中使用的加密函数
加载的 Reptile 是使用另一个名为 kmatryoshka 的开源工具打包的内核模块。kmatryoshka 是一个基于 Linux 内核模块的加壳器,负责解密以加密形式存在的原始内核模块。然后它利用 sys_init_module() 函数来加载它。因此,原始的 Reptile rootkit 以打包形式存在于用户模式和内核模式中。
图 4. kmatryoshka 例程
1.2.1. 隐蔽性特征分析
Reptile 使用名为 KHOOK 的 Linux 内核函数挂钩引擎来挂钩内核函数。例如,它挂钩 ip_rcv() 内核函数以使用端口敲门方法。通过这样做,它可以监视它接收到的数据包。
当向 rootkit 发送命令时,Reptile 使用 reptile_cmd,它将 ioctl 发送到 Reptile 内核模块。挂钩 inet_ioctl() 内核函数以监视此 ioctl。在发送给ioctl的数据中,cmd代表命令号。与进程隐藏命令一样,如果需要PID等附加数据,则使用控制结构的argv变量来传输数据。命令下发过程中,AUTH和HTUA为随机值。Reptile 监视 ioctl,并在找到匹配项时执行相应的操作。
图 5. ioctl 的传输
表 1. cmd 命令
除了隐藏和端口敲门功能外,Reptile还提供了一项功能,可以使用“root”命令来授予当前用户root权限。它还支持通过 Udev 进行持久化。在 /lib/udev/rules.d/ 目录中创建以下规则文件,并指定复制的路径以确保即使在重新启动后也能执行它。
图 6. 创建的 udev 规则文件
A.文件和目录隐藏
Reptile Rootkit 可以根据“hide”和“show”命令隐藏或显示文件和目录。要隐藏的目标是构建期间包含指定字符串的路径。为了实现这一点,它挂钩了多个内核函数,包括 fillonedir()、filldir() 和 filldir64()。如果隐藏目标的字符串出现在路径名中,则挂钩函数返回“ENOENT”,即“没有这样的文件或目录”错误。
图 7. 文件和目录的隐藏
B. 自我隐藏
“hide”和“show”命令不仅支持文件和目录的隐藏,还支持 Reptile 内核模块本身的隐藏。当接收到“隐藏”命令时,当前模块将从模块列表中删除。因此,使用 lsmod 命令将不会显示当前安装的 Reptile 内核模块。
C.进程隐藏
当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”(无此类进程)错误,导致无法终止。除此之外,load_elf_binary()函数被挂钩,并且具有reptile_shell路径的进程被隐藏。
D. TCP/UDP 隐藏
如果将“conn”命令和隐藏目标的IP 地址作为参数传送,则可以隐藏TCP/UDP 网络通信。tcp4_seq_show() 和 udp4_seq_show() 函数就是为此目的而挂钩的。
E. 文件内容隐藏
Reptile 提供了文件篡改功能,可以隐藏文件内容。当构建过程中指定的标签(如下所示)添加到文件内容时,这些标签之间的字符串将被隐藏。默认情况下,可以使用标签“#”和“#”。激活此功能的命令是“文件篡改”,它涉及挂钩 vfs_read() 函数。
1.2.2. 端口碰撞
Reptile rootkit 支持端口碰撞技术。安装在受感染系统上后,它不会立即连接到 C&C 服务器,而是打开某个端口并等待威胁参与者向系统发送 Magic Packet,然后开始运行。通过 Magic Packet 接收的数据包含 C&C 服务器地址。基于此,反向 shell 连接到 C&C 服务器。
在 Reptile 的 defconfig 文件中,有基本的配置。默认情况下,MAGIC_VALUE 设置为“hax0r”,PASSWORD 设置为“s3cr3t”,SRCPORT 设置为“666”。
图 8. 解除配置文件
受感染系统上的 Reptile rootkit 会挂钩内核功能并监视通过 TCP、UDP 和 ICMP 协议传入的数据包。如果收到 TCP 或 UDP 数据包,首先检查源端口。上述配置文件中指定的“666”端口是目标。
图 9. SRCPORT 扫描
威胁参与者可以使用客户端将 Magic Packet 传输到受感染的系统。为此,他们可以首先选择其中一种协议(TCP、UDP 或 ICMP)作为端口敲门技术的一部分。然后,他们必须在上述 Reptile 创建过程中指定受感染系统的 IP 地址和配置数据集,其中包括 MAGIC_VALUE、PASSWORD 和 SRCPORT。之后,当执行运行命令时,Packet会对数据进行加密并将其传输到受感染的系统。
图 10. 使用端口敲门的反向 shell
如果在端口 666 上侦听的 Reptile 通过此端口接收到数据包,它将扫描接收到的数据包中的数据以检查值“hax0r”,该值由 MAGIC_VALUE 和 TOKEN 指定。当进程到达此点时,Reptile 解密数据包并获取 C&C 服务器的地址和端口号。然后它使用这些值作为参数来执行reptile_shell,这是一个反向shell。
图 11. MAGIC_VALUE 的扫描
1.3. 反向外壳
Reptile rootkit执行的反向shell根据接收到的地址连接到C&C服务器并提供shell访问。此外,反向 shell 是使用参数“s3cr3t”执行的,该参数在配置数据中指定为 PASSWORD。此密码用作与 C&C 服务器上等待的侦听器进行通信的会话密钥。
反向 shell 是一个命令行工具,它根据提供的参数进行操作,并且根据条件可以以两种不同的方式执行。第一种方法是上面介绍的端口敲门技术。第二种方法是在Reptile rootkit内核模块的安装过程中执行。
图 12. reptile_shell 的参数结构
安装后,Reptile rootkit在初始化过程中会执行名为reptile_start的启动脚本。其中可能包含许多命令,其中值得注意的一个是执行反向 shell 的命令。
图 13. make 过程和创建的 reptile_start 脚本文件
Reptile的反向shell基于开源Linux后门TinySHell。Rekoobe 是一种基于 TinySHell 的后门恶意软件,已知主要由中国威胁组织使用。此外,根据Avast的报告,Syslogk rootkit还支持Magic Packet触发的Port Knocking方法。它还利用 TinySHell 的定制版本(称为 Rekoobe)作为后门。基于这些相似之处,推测 Syslogk 威胁参与者可能在其恶意软件中采用了 Reptile 结构。
与 TinySHell 相比,Reptile 的反向 shell 显示出显着的相似性,大部分代码以及支持的命令都是相同的。特别是,使用HMAC SHA1算法和AES-128密钥对与C&C服务器的通信数据进行加密,以及通信过程中用于完整性验证的数据也是相同的。
图 14. TinySHell(左)和 Reptile 反向 shell(右)例程之间的比较
具体来说,Reptile反向shell除了支持文件下载/上传和命令执行之外,还支持延迟命令。此外,它还包含一个内置功能,可以通过 ioctl 向 Reptile rootkit 发送隐藏命令,从而有效隐藏与 C&C 服务器的通信。
2.攻击案例
2.1. 病毒全面猎杀
由于 Reptile 是一种在 GitHub 上公开提供的开源恶意软件,因此随着时间的推移,它已被各种威胁行为者利用。即使排除近期Mandiant报道的中国威胁组织对Fortinet产品的零日漏洞攻击案例,VirusTotal平台上仍然可以观察到Reptile rootkit恶意软件的周期性上传。
虽然不确定它们是否被用于实际攻击,但过去几年中,大量 Reptile rootkit 已定期上传到 VirusTotal。在本节中,提取并分类了部分 Reptile 样本的配置数据。在检查内核模块的功能时,一个显着的特征是它们中的大多数专门针对 RHEL 或 CentOS Linux,无论是用于攻击还是测试目的。
表 2. 上传到 VirusTotal 的爬虫 Rootkit
2.2. 韩国袭击事件
过去针对韩国公司的攻击中曾使用过 Reptile。最初的渗透方式尚不清楚,但经检查,Reptile rootkit、反向shell、Cmd和启动脚本都包含在内,可以确定基本配置。
在这个特殊的攻击案例中,除了 Reptile 之外,威胁行为者还使用了一种名为 ISH 的基于 ICMP 的 shell。ISH 是一种恶意软件菌株,它使用 ICMP 协议为威胁行为者提供外壳。通常,反向 shell 或绑定 shell 使用 TCP 或 HTTP 等协议,但推测威胁行为者选择 ISH 来逃避这些通信协议引起的网络检测。
2.2.1. 爬虫分析
该恶意软件被认为安装在“/etc/intel_audio/”目录中,并且威胁行为者使用“intel_audio”作为关键字而不是“reptile”。
图 15. intel_audio_start 脚本
此外,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系统。
提取的 rootkit 包含各种硬编码的配置数据。例如,在reptile_init()函数中,识别出启动脚本文件的路径名“/etc/intel_audio/intel_audio_start”。一个显着的特征是,威胁行为者将 MAGIC_VALUE 和 PASSWORD 字符串设置为 glibc 相关字符串,以将其伪装成正常程序。
图 17. reptile_init() 函数
表3. 韩国攻击中使用的Reptile配置数据
2.2.2. ICMP SHELL分析
该文件执行并目标隐藏在“rc.local”自动运行脚本中,位于“/etc/intel_audio/gvfs-gdb-volume-monitor”,是一个称为 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.h”中的usage()函数。这允许恶意软件被视为正常程序而不是绑定 shell,因为它在没有任何特定参数的情况下执行时输出字符串“ICMP 调试工具”。
图 19. 修改后的输出字符串
3.与 Mélofée 的相似之处
ExaTrack 对最近针对 Linux 服务器的恶意软件菌株进行了分析,并将其命名为 Mélofée。根据攻击中使用的恶意软件和基础设施,他们确定了与来自中国的 Winnti (APT41) 威胁组织的联系。
攻击者在攻击过程中还使用了 Reptile rootkit,一个显着的特征是 rootkit 安装在路径名“/etc/intel_audio/intel_audio.ko”中。作为参考,路径“/etc/intel_audio/intel_audio.ko”与前面提到的针对韩国公司的Linux服务器攻击案例中的Reptile rootkit的安装路径相同。
攻击过程中使用了Reptile rootkit、安装路径相同以及通过“insmod”命令直接安装内核模块而不是Reptile提供的常规方法,是这两个攻击案例的共同点。
图 20. Mélofée 创建的 rc.modules 文件
然而,也存在差异。在 Mélofée 攻击案例中,所使用的 Reptile 仅激活了文件隐藏功能,并且隐藏路径被硬编码到两个位置:“intel_audio”和“rc.modules”。
图 21. 隐藏目标的硬编码路径
由于韩国攻击事件中的可用信息有限,除了恶意软件之外,可以收集的信息量也有限。然而,值得注意的是,关键字“intel_audio”虽然仅用于将自己伪装成正常的内核模块路径,但它是一个不常见的字符串,并且在这两种攻击案例中都作为一个显着特征脱颖而出。
4.结论
Reptile 是一种 Linux 内核模式 Rootkit 恶意软件,为文件、目录、进程和网络通信提供隐藏功能。由于开源,Reptile 很容易被各种威胁行为者利用,从而发现了大量的攻击案例。考虑到 Rootkit 的性质,它们通常与其他恶意软件结合使用。然而,Reptile 本身也提供了反向 shell,使得安装了 Reptile 的系统容易被威胁者劫持。
为了防止此类安全威胁,必须检查系统是否存在易受攻击的配置,并且相关系统必须始终保持最新状态以保护它们免受攻击。
文件检测
– 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://asec.ahnlab.com/en/55785/
图片来源网络侵权可联系删除