介绍
自2022年起,我们一直在追踪亚太地区发生的多起针对性攻击事件,这些攻击都利用了同一种ELF后门技术。多数安全厂商将此后门误判为Gh0st RAT或Rekoobe等已知恶意软件的变种。然而,我们深入挖掘后发现了一个惊人的事实:这个后门并非现有恶意软件的简单变种,而是一个全新的种类。我们有理由相信,它可能正被一些使用中文的团体用于进行间谍活动或网络犯罪。我们将这种之前未被记录在案的新型恶意软件命名为“Noodl RAT”。
Noodle RAT
Noodle RAT,亦称为 ANGRYREBEL 或 Nood RAT,是一种相对简单的后门(backdoor)恶意软件,已确认存在针对 Windows (Win.NOODLERAT) 和 Linux (Linux.NOODLERAT) 系统的版本。以下是关于这款恶意软件的简要历史时间线。
图 1. Noodle RAT 时间线 |
我们在 VirusTotal 发现了一些早期版本的 Noodle RAT 命令与控制(C&C)服务器的踪迹;Windows 版本的 Noodle RAT(Win.NOODLERAT)v1.0.0 于 2016 年 7 月编译,Linux 版本的(Linux.NOODLERAT)v1.0.1 分别在 2016 年 12 月和 2017 年 4 月编译。
尽管 Noodle RAT 存在已久,但直到最近才得到正确的分类。自 2018 年以来,有多份报告描述了涉及 Noodle RAT 的攻击,但当时这个 ELF 后门被错误地归类为不同的恶意软件家族。例如,NCC Group 在 2018 年发布了一份 Iron Tiger 使用的 Gh0st RAT 变种的报告。Talos 也发布了一份 2018 年 Rocke(也就是 Iron Cybercrime Group)使用的 ELF 后门的报告。Sophos 描述了 2018 年 Cloud Snooper 活动中使用的 Gh0st RAT 变种的 Linux 版本。Positive Technology Security 在 2019 年报告了 Calypso APT 使用的 Calypso RAT。经过我们的分析,这些报告中提到的 ELF 后门实际上是 Noodle RAT。
此外,我们的监测数据还发现了自 2020 年以来,使用 Noodle RAT 针对泰国、印度、日本、马来西亚和台湾的间谍活动。这段简短的历史表明 Noodle RAT 已在多个团体间传播,并被用于间谍活动和网络犯罪。
在接下来的部分,我们将讨论 Noodle RAT 的 Windows 和 Linux 版本的详细信息。
Win.NOODLERAT
Win.NOODLERAT 是一种内存中的模块化后门(modular backdoor),以 shellcode 形式存在,最初由 NCC 集团和 Positive Technology Security 所报告。根据其他供应商的报告以及我们的观察,Win.NOODLERAT 似乎被 Iron Tiger、Calypso APT 以及一些未知的团体用于间谍活动。这个后门的内置功能相对简单。
- 下载和上传文件
- 运行额外的内存模块
- 作为 TCP 代理
我们的调查确认,由于 Win.NOODLERAT 是以 shellcode形式编写的,它必须通过专用的加载程序来执行,而 MULTIDROP 和 MICROLOAD 正是被用于此目的的工具。
图 2. Win.NOODLERAT 与威胁组织的关系 |
安装
MULTIDROP,这是一种我们在2019年观察到用于针对泰国的间谍活动中的恶意软件投放器,其功能与Positive Technology Security所描述的投放器完全一致。
与此相反,MICROLOAD,它在2019年至2021年间针对印度的间谍活动中被我们观察到,具有不同的设计特点。MICROLOAD是被一个合法的Microsoft应用程序Oleview.exe(通常用于查看COM对象)加载的。它还负责解密位于注册表项HKCR\Microsoft.System.UpdateColl\UpdateAgent
中的加密有效载荷,使用的是RC4加密算法,并将解密后的恶意代码(即shellcode)注入到系统服务宿主程序svchost.exe中。
恶意代码的第一阶段只是一个解码stub,其功能是解码随后的XOR编码数据。初始化完成后,核心的有效载荷和配置信息会在内存中进行解码。
图3. Win.NOODLERAT的初始化程序 |
C&C 通讯
在谈到命令与控制通信时,Win.NOODLERAT 支持 TCP、SSL 和 HTTP 这些协议。其通信过程全部通过 RC4 加密算法和一个自定义算法来加密,这个自定义算法利用了 XOR(异或)和 AND(与)指令。这个算法已经被 Positive Technology Security 详细记录,并且因为它在 Win.NOODLERAT 与 Linux.NOODLERAT 的比较研究中具有重要性,所以值得我们再次深入研究。
加密的数据包由两部分组成:头部和有效载荷。
图 4. 数据包的伪结构 |
在发送数据时,数据包的头部部分会通过以下步骤进行加密:
- 初始化数据包头部的字段,包括命令标识符 cmd_id、负载长度 payload_len 和常量值 const_val。
- 生成3个随机的32位整数值(DWORD)。
- 将负载数据的长度与一个随机的32位值相结合,生成 RC4 加密算法所需的部分密钥。
- 使用一个预设的密钥,通过异或操作对第三步生成的值进行编码。
- 将第三步和第四步生成的数值转换成十六进制形式的字符串,并将这两个字符串拼接起来。
- 使用第五步生成的密钥,通过 RC4 加密算法对数据包头部的前24个字节进行加密(不包括 header_key)。
图 5. 标头部分的加密算法 |
对于数据包的有效载荷部分,加密过程如下:
- 从数据包头部区域复制命令标识符(cmd_id)和常量值(cont_val)的32位整数值。
- 使用异或(XOR)和与(AND)逻辑运算对第一步得到的每个32位整数进行编码处理。
- 将第二步中处理后的数值转换成十六进制格式的字符串,并将这些字符串串联起来。
- 利用第三步生成的字符串作为密钥,通过 RC4 加密算法对有效载荷数据进行加密。
图 6. 有效负载部分的加密算法 |
后门命令
在进行分析的过程中,我们发现了多种 Win.NOODLERAT 恶意软件变种,它们对应着不同的命令标识符。在 C&C 服务器成功认证后,根据接收到的命令标识符,我们将这些变种分为两大类:0x03A2 类型和 0x132A 类型。这些后门功能通过主命令标识符和可选的子命令标识符的组合来实现。表 1 展示了这些后门命令的列表:
Actions | Type 0x03A2 | Type 0x132A | ||
---|---|---|---|---|
Major-ID | Sub-ID | Major-ID | Sub-ID | |
认证成功 | 0x03A2 | - | 0x132A | - |
命令结束的消息 | 0x0AC3 | - | 0x1AC3 | - |
初始化模块元数据 | 0x194C | - | 0x294C | - |
接收模块数据 | 0x1AF2 | - | 0x2AC8 | - |
无管道的模块启动 | 0x1397 | - | 0x230E | - |
删除模块元数据 | 0x1D50 | - | 0x2D06 | - |
上传文件到C&C服务器 | 0x390A | 0x35C3 & 0x35C4 & 0x3013 | 0x590A | 0x55C3 & 0x55C4 & 0x5013 |
递归列出目录 | 0x390A | 0x35C5 | 0x590A | 0x55C5 |
从C&C服务器下载文件 | 0x390A | 0x35C7 & 0x35C8 & 0x35C9 & 0x3013 | 0x590A | 0x55C7 & 0x55C8 & 0x55C9 & 0x5013 |
将给定数据写入管道 | 0x2099 | 0x2186 | 0x3099 | 0x3167 |
将 0x32E0 写入管道 | 0x2099 | 0x220E | 0x3099 | 0x32E0 |
将 0x38AF 写入管道 | 0x2099 | 0x28FA | 0x3099 | 0x38AF |
将模块数据发送到另一个模块 | 0x2099 | 0x2741 | 0x3099 | 0x3716 |
与0x3099相同 | 0x2099 | 0x2A0B | 0x3099 | 0x3A0B |
启动 TCP 服务器将数据包代理到 C&C 服务器 | 0x2099 | 0x2CBD | 0x3099 | 0x3CD0 |
删除自身 | N/A | 0x1C1C | - |
表1 Win.NOODLERAT后门命令
第一种,类型 0x03A2,具备了除了自毁之外的大部分功能。Win.NOODLERAT 的这一变种曾被Iron Tiger及其他未知组织用于间谍活动,这表明该版本可能是多个组织共享的版本。
第二种,类型 0x132A,具备全部功能。只有Calypso APT这一APT组织使用过Win.NOODLERAT 的这一变种。因此,它很可能是一个独有的版本。
比较有趣的是,在对比命令 ID 时,我们注意到它们之间存在相似之处。比如,上传文件到命令与控制服务器的命令 ID 分别为 0x390A 和 0x590A;这种相似性可能暗示了版本迭代的关系,但目前还没有充分的证据来支持这一结论。
Linux.NOODLERAT
Linux.NOODLERAT 是 Noodle RAT 木马的一个 ELF 格式版本,其设计有所区别。这种后门程序已经被多个组织出于不同目的所利用,比如 Rocke为了经济利益,以及 Cloud Snooper 间谍活动和另一个未知组织进行间谍活动。由于设计上的差异,它的后门功能也有所区别:
- 反向shell
- 下载和上传文件
- 调度执行
- socks隧道
安装
通常情况下,Linux.NOODLERAT 作为一种恶意软件,是作为针对对外开放应用程序漏洞利用的一部分来部署的。部署后,这个后门程序会复制自身到 /tmp/CCCCCCCC
目录,并通过对参数数组argv
的覆盖来实施进程名欺骗。接着,它利用硬编码的密钥 r0st@#$
通过 RC4 加密算法解密内嵌的配置信息。解密后的配置信息格式如下方图表所示;根据这些配置,Linux.NOODLERAT 将连接到指定的命令与控制服务器。
图8. Linux.NOODLERAT C&C通信概述 |
在命令处理阶段,加密算法采用了 RC4 加密和 XOR 与 AND 位指令的组合,这一点与 Win.NOODLERAT 类似,尽管它们使用的硬编码密钥和 API 接口存在差异,如下面的图表所示:
图 9. 标头部分的加密算法 |
图 10. 有效负载部分的加密算法 |
当收到后门命令时,将启动反向 shell 会话。由于此会话中的加密算法(正如我们稍后将描述的)与现有恶意软件中的加密算法完全相同,因此我们将尽可能简单地解释身份验证机制:
- 它从命令与控制服务器接收一段 40 字节的数据,该数据被平均分为两个各 20 字节的区块。每个区块都与一个预设的字符串结合,进而计算其 SHA1 哈希值。计算得到的 HMAC_SHA1 值将作为 AES 加密算法的密钥和初始化向量,用于数据的加密解密以及完整性校验。
- 它从命令与控制服务器接收另外 16 字节的数据,并利用生成的 AES 密钥材料对这些数据进行解密。
- 它对解密后的数据进行验证,确保其与预设的质询字节相匹配,以此来确认命令与控制服务器的真实性。
图11. Linux.NOODLERAT的认证机制 |
后门命令
与Win.NOODLERAT一样,我们根据实现的后门命令ID发现Linux.NOODLERAT也有两个类型:类型0x03A2和类型0x23F8。
Actions | Type 0x03A2 | Type 0x23F8 | ||
---|---|---|---|---|
Major-ID | Sub-ID + arg (optional) | Major-ID | Sub-ID + arg (optional) | |
授权成功 | 0x03A2 | - | 0x23F8 | - |
启动后门程序 | 0x2099 | - | 0x4799 | - |
启动反向 shell 会话 | 0x1 | 0x2186 | 0x1 | 0x5186 |
显示根目录中的文件和目录列表 | 0x2 | 0x2186 + 0x1 | 0x2 | 0x5186 + 0x1 |
显示特定目录中的文件和目录列表 | 0x2 | 0x2186 + 0x2 | 0x2 | 0x5186 + 0x2 |
重命名文件 | 0x2 | 0x2186 + 0x3 | 0x2 | 0x5186 + 0x3 |
删除文件 | 0x2 | 0x2186 + 0x4 | 0x2 | 0x5186 + 0x4 |
上传文件到 C&C 服务器 | 0x3 | 0x35C3 & 0x35C4 & 0x3013 | 0x3 | 0x35C3 & 0x35C4 & 0x3013 |
递归列出目录 | 0x3 | 0x35C5 | 0x3 | 0x35C5 |
从 C&C 服务器下载文件 | 0x3 | 0x35C7 & 0x35CB & 0x35CC & 0x3013 | 0x3 | 0x35C7 & 0x35CB & 0x35CC & 0x3013 |
创建新目录 | 0x3 | 0x35C8 & 0x35C9 & 0x35CA & 0x35CD | 0x3 | 0x35C8 & 0x35C9 & 0x35CA & 0x35CD |
启动 SOCKS 隧道 | 0x4 | - | 0x4 | - |
启动 SOCKS 隧道 | 0x5 | - | 0x5 | - |
显示当前日期时间 | 0x6 | 0x2186 + 0x1 | N/A | 0x5186 + 0x1 |
下载文件为 /usr/include/sdfwex.h 或 /tmp/.llock | 0x6 | 0x2186 + 0x2 | N/A | 0x5186 + 0x2 |
表2 Linux.NOODLERAT后门命令
对于标有N/A的,这些命令的功能已经实现,但由于不支持这些命令的Major-ID,因此无法跳转。
与 Win.NOODLERAT 相比,Linux.NOODLERAT 的大多数后门命令都有所不同,除了在 0x03A2 类型中用于响应成功授权的命令。同样,Linux.NOODLERAT 在执行某些特定命令时需要指定参数。在比较 0x03A2 类型和 0x23F8 类型的命令时,两种变体都展现出了相似的命令子 ID,比如 0x03A2 中的 0x2186 与 0x23F8 中的 0x5186。这可能表明它们之间存在版本迭代的关系。在归因分析方面,0x03A2 类型的恶意软件曾被 Rocke 组织、Cloud Snooper 活动以及其他未知团体使用,这暗示该类型可能是多个组织共享的版本。然而,要将 0x23F8 类型明确归因于特定的组织,还需要更多的信息和上下文。
Win.NOODLERAT 和 Linux.NOODLERAT 之间的相似之处
正如我们之前提到的,Linux.NOODLERAT 与 Win.NOODLERAT 在命令与控制通信机制中使用了相似的代码基础。除此之外,这两种恶意软件变种还有其他一些共同点。其中之一就是后门命令。正如之前所述,无论是 Win.NOODLERAT 还是 Linux.NOODLERAT,在获得命令与控制服务器的授权后,都预期会接收到特定的命令代码 “0x3A2”。
图 12.Linux.NOODLERAT 和 Win.NOODLERAT 的相同后门命令 |
另一个重叠是配置格式。 Win.NOODLERAT 和 Linux.NOODLERAT 使用的配置数据格式基本相同,但 Win.NOODLERAT 中的网络密钥部分除外。
图 13. 使用类似配置格式的 Win.NOODLERAT 和 Linux.NOODLERAT |
新变种还是旧遗留?
到目前为止,我们已经分析了两种支持不同操作系统的已知后门,这表明它们可能属于一个新的恶意软件家族——Noodle RAT。然而,一些安全厂商提出,Noodle RAT 可能是 Gh0st RAT 或 Rekoobe 等现有恶意软件的变种。这一观点引出了一个问题:Noodle RAT 真的能被视为一种全新的恶意软件吗?为了解答这个问题,我们需要重新审视 Gh0st RAT 和 Rekoobe。
Gh0st RAT 最初是由中国的安全团队 C. Rufus 开发的。2008 年的一次泄露事件导致 Gh0st RAT 的源代码被公之于众。因此,如今有众多 Gh0st RAT 的变种被不同的网络威胁行为者所利用。
Noodle RAT 与 Gh0st RAT 存在一些联系。比如,根据 NCC 在 2018 年的报告,Win.NOODLERAT 使用的插件与 Gh0st RAT 所使用的相同。此外,Noodle RAT 实现了一种与 Gh0st RAT 的某些变种(如 Gh0stCringe、HiddenGh0st 和 Gh0stTimes)所使用的类似的数据包加密算法,这些变种通常采用结合 XOR 指令和其他指令的自定义算法,正如 Noodle RAT 所做的那样。
然而,除了插件之外,Noodle RAT 和 Gh0st RAT 的其余代码并没有明显的相似之处,这让我们得出结论:尽管插件被重新使用,但后门本身则是完全不同的。
图 14. Gh0st RAT 变体和 Noodle RAT 之间的算法比较 |
与此相反,Rekoobe 是一个基于 Tiny SHell(简称 tsh)的后门程序,其源代码可以在 GitHub 上公开获取。这个后门已经被用于多年的针对 Linux/Unix 系统的攻击活动中。多个供应商发布的报告已经详细描述了这个后门。Dr.Web 在 2015 年发布了首份报告,而 Intezer 在 2018 年报告了 Rekoobe 的另一个版本。为了避免混淆,我们将按照 Dr.Web 的说法将该版本称为 “v2015”,按照 Intezer 的说法将另一个版本称为 “v2018”。
Rekoobe 已经被多个行为者采用并持续更新。正如 Dr.Web 的报告所指出的,APT31 威胁组织使用了 Rekoobe v2015。这个版本通过增加一个魔术值来修改命令与控制协议,并改变了其从外部文件而不是从参数加载配置数据的策略。根据我们的观察,Rekoobe v2018 已经被多个团体使用。这个版本将命令与控制协议恢复到了原始状态,但再次改变了策略,将配置数据嵌入到二进制文件本身中。它还增加了一个新的特性,通过覆盖 “argv” 来伪装进程名。
在比较 Rekoobe 和 Noodle RAT 时,人们可能会发现 Linux.NOODLERAT 代码的某些部分与 Rekoobe v2018 相同,特别是反向 shell 和进程名伪装的部分,如图中所示:
图 15. Linux.NOODLERAT(左)和 Rekoobe/Tiny SHell(右)的反向 shell 上的握手 |
图 16. Linux.NOODLERAT(左)和 Rekoobe v2018(右)的欺骗进程名称 |
Linux.NOODLERAT 中的反向 shell 会话代码与 Tiny SHell 的代码完全相同,这使我们推测 Noodle RAT 的开发者可能直接从 GitHub 上复制了 Tiny SHell 的这部分代码。另一方面,通过覆盖 “argv” 来伪装进程名的方法是 Rekoobe v2018 特有的技术,在 Tiny SHell 和 Rekoobe v2015 中并没有这样的实现。这暗示了 Noodle RAT 的开发者可能获取了 Rekoobe v2018 的源代码。
然而,考虑到 Linux.NOODLERAT 的其余代码与 Rekoobe 或 Tiny SHell 的所有版本都显著不同,我们可以得出结论,Linux.NOODLERAT 应该被视为一个独立的恶意软件家族。
Noodle RAT 的服务器端
在2019年NCC Group的报告中,他们披露了Win.NOODLERAT的控制面板之一,名为“Noodlesv1.0.0”,这可能意味着它是为Win.NOODLERAT版本1.0.0设计的。我们最近还在VirusTotal上发现了Linux.NOODLERAT控制面板和构建器的新版本。
控制面板
我们发现的控制面板被命名为“NoodLinux v1.0.1”。与之前发现的控制面板一样,它需要密码才能打开。对于先前版本,密码是当前的年份和月份(例如,“202405”),但在这个版本中,密码被直接嵌入到了控制面板的代码中,即“hello!@#”。
图 17. Linux.NOODLERAT v1.0.1 控制面板 |
此版本的控制面板支持 TCP 和 HTTP 的 C&C 协议,并监听指定端口。我们使用 Linux.NOODLERAT 示例对其进行了测试,并确认它可以成功运行。
构建器
我们发现了 Linux.NOODLERAT 构建器的两个版本:v1.0.1 和 v1.0.2。该构建器可帮助使用用户定义的自定义配置构建 Linux.NOODLERAT。
图 18. Linux.NOODLERAT v1.0.1 和 v1.0.2 的构建器 |
有趣的是,这些服务器端组件是随 .doc 形式的发行说明一起提交的。它的文件名是简体中文的“更新说明”,翻译过来就是发行说明或更新说明。此外,ini 文件的名称为中文“副本”。
图 19. 上传的包含发布文档 |
发布说明采用简体中文编写,涵盖了测试结果、所做的改进、修复的问题以及更新的内容。这暗示着,如同正规的软件企业,这款恶意软件背后存在着开发团队和用户群体。
图 20. 中文文档 |
结论
我们对Windows和Linux平台上的Noodle RAT进行了深入分析,揭示了它与Gh0st RAT和Rekoobe等已知恶意软件的相似性和共通之处,并推测Noodle RAT可能在中文使用者群体中被共享或出售。此外,我们还揭露了Noodle RAT的控制面板和构建工具,这暗示了一个恶意软件生态系统的存在。
多年来,Noodle RAT一直被错误地分类和低估了其威胁。我们希望这篇博客文章能够帮助人们更准确地评估与Noodle RAT相关的安全事件。
我们已经确认,2024年有若干Noodle RAT样本被上传到了Virus Total,这表明该恶意软件很可能仍在被使用。鉴于近年来对面向公众的应用程序的攻击日益增多,针对Linux/Unix系统的恶意软件对攻击者而言变得越来越关键。这可能意味着Noodle RAT对于网络威胁行为者来说,仍然是一个具有吸引力的攻击工具。