关键词

Redis、恶意软件、漏洞利用

1. 概述


Aqua Nautilus 发现了针对 Redis 服务器新的基于 Go 的恶意软件。该攻击是在易受CVE-2022-0543攻击的 Redis 蜜罐中捕获的。调查揭示了用 Golang 编写的恶意软件旨在以 Redis 服务器为目标,允许攻击服务器控制受感染的机器。因此,该恶意软件的名称为Redigo。这篇文章研究攻击者如何利用此 Redis 漏洞来运行新的恶意软件。此外,本篇文章还审查了攻击过程并推荐防止未来攻击的方法。

2.什么是 Redis? 


Redis(远程字典服务器)是一个开源的内存数据库和缓存。它于 2009 年首次发布,作为实时应用程序的解决方案,需要一种比关系数据库处理速度更快的方式向客户交付数据。它允许在短响应时间内获取和传递数据,每秒允许数百万个请求。Redis 通过使用缓存将频繁访问的数据存储在内存中来确保响应能力。

3. CVE-2022-0543


Redis 架构包含两个主要进程——Redis 客户端和 Redis 服务器。Redis 服务器构成了架构中的主要部分,它负责将数据存储在内存中并处理管理过程。服务器还包含 Lua 脚本引擎,允许用户直接在服务器上上传和执行 Lua 脚本。这种能力使得通过脚本读取和写入数据的过程非常高效。引擎在沙箱中,在 Redis 运行机器上限制客户端运行任意代码的同时,可以方便地使用 Redis API 与 Redis 客户端进行交互。然而,在 2022 年,Lua 脚本引擎中发现了一个漏洞。在一些 Debian 软件包中,Lua 库提供了一个动态库。当 Redis 服务器加载 Lua 库时,它会加载一个包变量。该包位于Lua 沙箱中,用于调用任何 Lua 库。这导致了 Lua 沙箱逃逸,允许攻击者执行任意命令。

图 1:Redigo 恶意软件的攻击流程

4. 攻击过程


初始访问:

攻击者使用扫描器或僵尸网络在端口 6379 上搜索暴露在互联网上的 Redis 服务器。连接到 Redis 服务器后,攻击者能够运行 Redis 命令,如下所示:

(1).INFO 命令——此命令允许攻击者接收有关 Redis 服务器的信息。这样攻击者会知晓哪个服务器的版本容易受到 CVE-2022-0543 的攻击(正如本文之前提到的,蜜罐是故意利用这个漏洞构建的)。这为攻击者提供了他们能够利用该漏洞所需的信息,并允许他们开始准备利用它。

(2).SLAVEOF 命令——这允许攻击者创建攻击服务器的副本。此操作稍后将帮助他们下载允许利用该漏洞的共享对象。

(3).REPLCONF 命令——此命令用于配置从主服务器(攻击服务器)到刚刚创建的副本的连接。

(4).PSYNC 命令——新副本运行此命令并从主服务器启动复制流。此连接使副本保持更新,并允许主服务器发送命令流。被定义为主服务器的攻击服务器使用此连接将共享库 exp_lin.so 下载到副本的磁盘。此外,此连接可以被攻击者用作后门,在连接期间发生中断的情况下,副本将重新连接并尝试获取在断开连接期间丢失的命令流的一部分。

(5).MODULE LOAD 命令——这允许在运行时从第 4 阶段下载的动态库中加载模块。该库允许利用该漏洞并在以后运行任意命令。

(6).SLAVEOF NO ONE 命令——这将关闭复制并将易受攻击的 Redis 服务器转换为主服务器。

图 2:捕获的 Redis 命令在易受攻击的 Redis 服务器和攻击服务器之间的通信

执行:

攻击者加载的库文件 exp_lin.so 执行故意留在蜜罐中的漏洞利用代码。该文件包含命令 system.exec 的实现,它允许攻击者执行任意命令并发起攻击。第一次使用该命令是为了接收有关 CPU 体系结构的信息。该命令的第二次使用是从攻击服务器 Redigo 下载新发现的恶意软件。下载恶意软件文件后,攻击者提升文件的执行权限,并执行它(恶意软件调查见下文)。

图 3:捕获的恶意命令通信

发现:

攻击者熟悉并了解他们攻击的系统,在本例中是 Redis 服务器。随着攻击的进展,这些信息对他们很有价值。正如我们之前在初始访问中所描述的那样,攻击者将使用 Redis 命令 INFO返回有关服务器的机器信息和统计信息,包括有关服务器、内存和 CPU 的详细信息。此数据可帮助攻击者了解目标资源。并且在利用该漏洞逃出Lua沙箱后,在宿主机上运行lscpu命令获取CPU信息。

命令与控制:

投放的恶意软件模仿 Redis 服务器通信,使攻击者能够隐藏目标主机与 C2 服务器之间的通信。下载恶意软件后,主机的角色发生了变化——易受攻击的 Redis 服务器变成了客户端,而攻击服务器现在是 Redis 服务器。这种角色变换使得攻击者可以切换彼此之间的 C2 连接关系,因为攻击服务器的响应将用作未来对易受攻击的 Redis 服务器的攻击的命令。它通过端口 6379 模拟合法的 Redis 集群通信。这有助于它逃避网络传感器检测器。通过对实际通信的分析得知该恶意软件被攻击者用来以主从关系控制Redis服务器。

影响:

因为限制了蜜罐中的攻击持续时间,因此很难断定是否看到了攻击影响的全部范围。基于类似的攻击可以推测,当攻击者将目标主机添加到大型僵尸网络时,通常意味着被入侵的服务器将参与针对目标应用程序的分布式拒绝服务 (DDoS) 活动并影响其业务。另一种可能的情况是在目标主机上运行加密矿工。此外,由于这是一个数据库,攻击者可以利用主机窃取数据或机密,并在环境中获得进一步的立足点。在任何情况下,每种情况都会对受感染服务器的资源产生影响,该服务器现在用作增选系统的一部分,以解决资源密集型问题,这些问题可能会影响其对日常使用其服务的用户的可用性。

5. 新发现的 Redigo 恶意软件


针对该恶意软件的调查从两个角度进行——网络分析和恶意软件分析。Redigo 恶意软件是从对 Redis 容器发起攻击的同一台服务器下载的。在 Shodan 引擎中搜索 IP 地址发现服务器有一个开放的 Redis 端口——6379。

图 4:Shodan 中攻击服务器的详细信息

此外,在执行恶意软件时,它会使用端口 6379与攻击服务器进行回联。攻击服务器的通联转向,增加了对 Redis 服务器与攻击服务器之间可能存在恶意通信的怀疑,事实证明这是真的, Redis 服务器变成一个从服务器,并在它们之间创建了命令和控制关系。正如在已经捕获的一个通信会话中看到的那样,在下载恶意软件后,能够证明通信如何试图在合法的 Redis 命令下隐藏自己:


图 5:易受攻击的 Redis 与攻击服务器之间的对话

红色行代表我们的服务器生成的出站通信,而蓝色行代表攻击服务器生成的入站通信。在其中一个命令中,可以看到易受攻击的 Redis 服务器尝试使用 AUTH 命令对当前连接进行身份验证。此外,还有 PING-PONG 命令——易受攻击的 Redis 发送 PING 命令,攻击服务器返回 PONG。这在测试连接是否仍然存在时很有用。

对该恶意软件的深入调查显示,该文件是用 go 编写的,并包含一些暴露其真实意图的有趣函数:


图 6:Redigo 恶意软件功能

上面的函数演示了恶意软件用来控制其服务器(被攻击的 Redis 服务器)的命令的不同实现。可以看到,一些功能是专门写入 Redis 服务器的,这可能意味着攻击者希望通过调整构建针对 Redis 服务器的攻击。

由于 Redigo 是一种新的 Redis 后门恶意软件,因此Virus Total 中的所有安全厂商都未检测到它:

图 7:Redigo 恶意软件的 VirusTotal 扫描

6. 追踪 Redigo 恶意软件



从下面基于 eBPF 的 Aqua Lightning Enforcer 的屏幕截图中可以看出,第一个事件警报是检测到共享对象加载和删除。通常不应该在运行 Redis 服务器时看到这些类型的事件。这是通过 Redis 通信传递的 .so 文件 (exp_lin.so)。接下来,可以看到下载了一个新的可执行文件,这是二进制文件 redis-1.2-SNAPSHOT,它是 Redigo 恶意软件。

图 8:Aqua 平台事件屏幕中的检测视图

接下来,观察到第二个负载和出站流量事件(socket_create 和 socket_connect)。

图 9:来自 Tracee 的日志

在上方可以看到使用 Aqua Tracee(Aqua 的开源运行时安全和 Linux 取证工具)时这些事件的样子。

Tracee 捕获了该恶意软件的活动(进程名称:redis-1.2-SNAPSHOT):

(1).security_socket_create:恶意软件创建一个套接字,这是一个通信端点。

(2).security_socket_connect:恶意软件使用端口 6379 在套接字上启动到对手服务器 (45.41.240.51) 的连接。

在之后进一步调查二进制文件后得出结论,它旨在将命令和控制通信伪装成合法的 Redis 通信。

6. 防范未来威胁


本文揭示了一种新的威胁,即首次出现的后门恶意软件。这些攻击者在构建僵尸网络时使用看似无害的 Redis 协议通信,然后将 Redis 服务器转换为从服务器以执行主服务器的命令。由于这些攻击者利用了服务器中的漏洞,攻击得以成功。

为了应对这些类型的威胁,建议遵循以下准则:

  • 未知威胁和零日漏洞将继续存在。 即使做的每件事都正确也无法始终保护计算机运行时环境免受此类攻击。因此需要监视运行时环境。运行时监控是一种基本实践,可帮助快速缓解问题并最大程度地减少中断。 监视过程还适用于可能发生可疑活动(例如,下载恶意二进制文件)的运行时环境。

  • 强化环境以防止运行不需要的 Redis 命令,例如 slaveof。

  • 扫描软件供应链。 可以使用 Chain-Bench 等开源工具,该工具旨在根据新的 CIS 软件供应链基准审核您的软件供应链堆栈的安全合规性。

  • 为开发人员、DevOps 和安全团队提供扫描漏洞和错误配置的工具。

附录 攻击指标


IP 45.41.240.51



File Name

Type

Md5

redis-1.2-SNAPSHOT

Binary

a755eeede56cbce460138464bf79cacd

exp_lin.so

Binary

c3b9216936e2ed95dcf7bb7976455859



END

参考链接:https://blog.aquasec.com/redigo-redis-backdoor-malware



编辑|逄思渊

审校|何双泽、金矢