近日研究人员发现了一个新型 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-335kB
Debain 系统中的漏洞利用
上图显示了该漏洞如何被武器化利用的。首先通过 /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.7kB
P2P 节点更新
其中,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.6kB
PowerShell 命令
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 规模增长的速度。