Rust 编写的 P2P 蠕虫:P2PInfect
2023-8-2 22:57:20 Author: www.freebuf.com(查看原文) 阅读量:30 收藏

近日研究人员发现了一个新型 P2P 蠕虫,将其命名为 P2PInfect。该蠕虫采用 Rust 语言编写,以 Redis 服务为攻击目标。研究人员在超过三十万个对外暴露的 Redis 中发现了 934 个可能受到该蠕虫影响的实例。

P2PInfect 利用 Lua 沙盒逃逸漏洞 CVE-2022-0543 进行攻击,该漏洞 CVSS 评分为 10 分。P2PInfect 可能是攻击者利用该漏洞攻击最典型的一个例子。研究人员认为,P2PInfect 只是攻击者进行潜在攻击的第一阶段。尽管样本有命名为 miner 的,但并未发现实际的挖矿行为。

P2P 蠕虫

研究人员在 2023 年 7 月 11 日发现了第一个 P2PInfect 样本。命名为 P2PInfect 是由于攻击者的目录中反复出现该词汇,如下所示。

image.png-205.5kB项目路径结构

所有发现的 P2PInfect 样本都是 Rust 开发的,这使得攻击者可以跨平台感染 Linux 与 Windows 系统上的 Redis 实例(请注意,Redis 并不正式支持 Windows 操作系统)。

该蠕虫利用 Lua 沙盒逃逸漏洞 CVE-2022-0543 对 Redis 进行攻击。尽管最初该漏洞被 Muhstik 僵尸网络所使用,但 P2PInfect 与 Muhstik 并无关系。

感染成功后,失陷主机会与 P2P 网络进行通信。在节点间传递各种恶意样本文件,并且对外扫描 Redis 服务。

传统利用定时任务入侵 Redis 的方式,在容器下并不可行。而 P2PInfect 使用了 CVE-2022-0543 漏洞,尽可能覆盖更多场景。

CVE-2022-0543

P2PInfect 主要依靠 Lua 沙盒逃逸漏洞(CVE-2022-0543) 针对 Redis 服务进行攻击。Redis 是一个被攻击者经常利用的服务,TeamTNT、WatchDog 与 Kinsing、8220 等团伙都会针对 Redis 进行攻击。

CVE-2022-0543 是 Lua 库存在的漏洞,影响 Debian Linux 包管理器安装的 Redis。所以,只有 Debian 系操作系统的 Redis 用户会受到影响。由于限定了操作系统与 Redis 组件才能攻击,P2PInfect 的利用方式十分复杂。如下所示:

image.png-335kBDebain 系统中的漏洞利用

上图显示了该漏洞如何被武器化利用的。首先通过 /dev/tcp 网络请求利用 60100 端口连接到 C&C 服务器。端口 60100 是 P2PInfect 用于维护与 C&C 服务器通信的端口之一。恶意代码通过 GET 请求获取名为 linux 的核心样本文件。

网络通信

P2PInfect 使用 P2P 网络进行恶意软件分发,失陷主机会与 P2P 网络建立连接并下载恶意样本。如下所示,通过 GET /linux 请求核心样本:

image.png-526.6kB下载样本文件

Linux 平台下与 Windows 平台下的 P2PIfect 样本都以相同的方式进行通信。下载的多个恶意样本如下所示:

image.png-120.4kB恶意样本列表

核心样本执行完成,将会开始扫描其他主机。主要扫描的是对外暴露的 Redis 服务,也对 SSH 服务进行了扫描。

节点通信

Dropper 使用 TLS 1.3 与已知节点列表中的其他 P2P 节点进行通信。失陷主机向 P2P 网络发送包含已知节点的 JSON 请求时,C&C 基础设施就会更新。节点更新如下所示:

image.png-119.7kBP2P 节点更新

其中,XXXX 为当前节点 IP 或者新发现的节点 IP。

扫描行为

失陷主机会对外扫描 SSH 服务,P2PInfect 会在随机网络范围内进行扫描:

image.png-543.3kB扫描 SSH 服务

除了 SSH 服务,Redis 服务也在扫描的范围内:

image.png-536.5kB扫描 Redis 服务

P2PInfect 的其他特征

收集到的 P2PInfect 样本有些是 UPX 加壳的,后续阶段的其他恶意样本则没有经过 UPX 加壳。

第一个 Dropper 运行后,解密配置信息获取有关 P2P 网络其他节点的信息。其 P2P 通信端口是可变的,这对检查技术的缓解是十分有效的。

image.png-51kB可变端口情况

研究人员发现所有样本都是 Rust 开发的,其中有部分符号反映了恶意软件开发者的项目结构。例如,Windows 执行主要代码中泄露了项目名称以及攻击者使用的文件目录。

image.png-285.2kB样本代码

还发现了攻击者使用的 PowerShell 脚本,旨在维护失陷主机与 P2P 网络间的通信。该脚本利用 encode 命令混淆建立通信的代码。

image.png-85.6kBPowerShell 命令

PowerShell 命令执行首先会修改系统防火墙,阻止对 Redis 服务的访问。随后,脚本打开一个端口让攻击者可以访问。这是一种持久化方法,维持攻击者对失陷主机的访问。

image.png-523.8kB脚本代码

解码后的 PowerShell 代码中,可见对防火墙进行了如下修改:

  • 对等端口为 60102(可变端口)
  • Redis 的 6379 端口只能连接 C&C 服务器的 IP
  • 防火墙规则名为 Microsoft Sync

监控进程

在 Windows 中感染时,一个名为 Monitor 的进程吸引了分析人员的注意。Monitor 进程主要维持 P2PInfect 进程在失陷主机上的运行。该进程主要通过 C:\Users\username\AppData\Local\Temp\cmd.exe 获取系统运行的进程:

image.png-262.7kB进程树

启动 cmd.exe 后,P2PInfect 就会通过 P2P 网络下载最新的样本文件,并随机命名到同一原始文件夹中。然后,样本将删除加密配置文件。

image.png-22.9kB随机文件命名

下载最新版本的 P2PInfect 样本后,随即启动扫描行为。最初的 Dropper 会尝试将自身删除:

image.png-37.8kB删除文件

结论

P2PInfect 蠕虫是很成熟的,运用了多种现代开发技巧。Rust 语言的使用也为攻击者提供了更大的灵活性,蠕虫可以跨系统快速传播。

分析人员经过统计,发现其 P2P 节点的数量在快速增长。尚且没有明确的数字确认 P2PInfect 规模增长的速度。

IOC

35.183.81[.]182
66.154.127[.]38
66.154.127[.]39
8.218.44[.]75
97.107.96[.]14
88601359222a47671ea6f010a670a35347214d8592bceaf9d2e8d1b303fe26d7
b1fab9d92a29ca7e8c0b0c4c45f759adf69b7387da9aebb1d1e90ea9ab7de76c
68eaccf15a96fdc9a4961daffec5e42878b5924c3c72d6e7d7a9b143ba2bbfa9
89be7d1d2526c22f127c9351c0b9eafccd811e617939e029b757db66dadc8f93

参考来源

Unit42


文章来源: https://www.freebuf.com/articles/network/373708.html
如有侵权请联系:admin#unsafe.sh