关键词
Redis、恶意软件、漏洞利用
Aqua Nautilus 发现了针对 Redis 服务器新的基于 Go 的恶意软件。该攻击是在易受CVE-2022-0543攻击的 Redis 蜜罐中捕获的。调查揭示了用 Golang 编写的恶意软件旨在以 Redis 服务器为目标,允许攻击服务器控制受感染的机器。因此,该恶意软件的名称为Redigo。这篇文章研究攻击者如何利用此 Redis 漏洞来运行新的恶意软件。此外,本篇文章还审查了攻击过程并推荐防止未来攻击的方法。
Redis(远程字典服务器)是一个开源的内存数据库和缓存。它于 2009 年首次发布,作为实时应用程序的解决方案,需要一种比关系数据库处理速度更快的方式向客户交付数据。它允许在短响应时间内获取和传递数据,每秒允许数百万个请求。Redis 通过使用缓存将频繁访问的数据存储在内存中来确保响应能力。
图 1:Redigo 恶意软件的攻击流程
初始访问:
攻击者使用扫描器或僵尸网络在端口 6379 上搜索暴露在互联网上的 Redis 服务器。连接到 Redis 服务器后,攻击者能够运行 Redis 命令,如下所示:
(1).INFO 命令——此命令允许攻击者接收有关 Redis 服务器的信息。这样攻击者会知晓哪个服务器的版本容易受到 CVE-2022-0543 的攻击(正如本文之前提到的,蜜罐是故意利用这个漏洞构建的)。这为攻击者提供了他们能够利用该漏洞所需的信息,并允许他们开始准备利用它。
(2).SLAVEOF 命令——这允许攻击者创建攻击服务器的副本。此操作稍后将帮助他们下载允许利用该漏洞的共享对象。
(3).REPLCONF 命令——此命令用于配置从主服务器(攻击服务器)到刚刚创建的副本的连接。
(4).PSYNC 命令——新副本运行此命令并从主服务器启动复制流。此连接使副本保持更新,并允许主服务器发送命令流。被定义为主服务器的攻击服务器使用此连接将共享库 exp_lin.so 下载到副本的磁盘。此外,此连接可以被攻击者用作后门,在连接期间发生中断的情况下,副本将重新连接并尝试获取在断开连接期间丢失的命令流的一部分。
(5).MODULE LOAD 命令——这允许在运行时从第 4 阶段下载的动态库中加载模块。该库允许利用该漏洞并在以后运行任意命令。
图 2:捕获的 Redis 命令在易受攻击的 Redis 服务器和攻击服务器之间的通信
执行:
图 3:捕获的恶意命令通信
发现:
攻击者熟悉并了解他们攻击的系统,在本例中是 Redis 服务器。随着攻击的进展,这些信息对他们很有价值。正如我们之前在初始访问中所描述的那样,攻击者将使用 Redis 命令 INFO返回有关服务器的机器信息和统计信息,包括有关服务器、内存和 CPU 的详细信息。此数据可帮助攻击者了解目标资源。并且在利用该漏洞逃出Lua沙箱后,在宿主机上运行lscpu命令获取CPU信息。
命令与控制:
投放的恶意软件模仿 Redis 服务器通信,使攻击者能够隐藏目标主机与 C2 服务器之间的通信。下载恶意软件后,主机的角色发生了变化——易受攻击的 Redis 服务器变成了客户端,而攻击服务器现在是 Redis 服务器。这种角色变换使得攻击者可以切换彼此之间的 C2 连接关系,因为攻击服务器的响应将用作未来对易受攻击的 Redis 服务器的攻击的命令。它通过端口 6379 模拟合法的 Redis 集群通信。这有助于它逃避网络传感器检测器。通过对实际通信的分析得知该恶意软件被攻击者用来以主从关系控制Redis服务器。
影响:
因为限制了蜜罐中的攻击持续时间,因此很难断定是否看到了攻击影响的全部范围。基于类似的攻击可以推测,当攻击者将目标主机添加到大型僵尸网络时,通常意味着被入侵的服务器将参与针对目标应用程序的分布式拒绝服务 (DDoS) 活动并影响其业务。另一种可能的情况是在目标主机上运行加密矿工。此外,由于这是一个数据库,攻击者可以利用主机窃取数据或机密,并在环境中获得进一步的立足点。在任何情况下,每种情况都会对受感染服务器的资源产生影响,该服务器现在用作增选系统的一部分,以解决资源密集型问题,这些问题可能会影响其对日常使用其服务的用户的可用性。
针对该恶意软件的调查从两个角度进行——网络分析和恶意软件分析。Redigo 恶意软件是从对 Redis 容器发起攻击的同一台服务器下载的。在 Shodan 引擎中搜索 IP 地址发现服务器有一个开放的 Redis 端口——6379。
图 4:Shodan 中攻击服务器的详细信息
图 5:易受攻击的 Redis 与攻击服务器之间的对话
红色行代表我们的服务器生成的出站通信,而蓝色行代表攻击服务器生成的入站通信。在其中一个命令中,可以看到易受攻击的 Redis 服务器尝试使用 AUTH 命令对当前连接进行身份验证。此外,还有 PING-PONG 命令——易受攻击的 Redis 发送 PING 命令,攻击服务器返回 PONG。这在测试连接是否仍然存在时很有用。
图 6:Redigo 恶意软件功能
上面的函数演示了恶意软件用来控制其服务器(被攻击的 Redis 服务器)的命令的不同实现。可以看到,一些功能是专门写入 Redis 服务器的,这可能意味着攻击者希望通过调整构建针对 Redis 服务器的攻击。
图 7:Redigo 恶意软件的 VirusTotal 扫描
从下面基于 eBPF 的 Aqua Lightning Enforcer 的屏幕截图中可以看出,第一个事件警报是检测到共享对象加载和删除。通常不应该在运行 Redis 服务器时看到这些类型的事件。这是通过 Redis 通信传递的 .so 文件 (exp_lin.so)。接下来,可以看到下载了一个新的可执行文件,这是二进制文件 redis-1.2-SNAPSHOT,它是 Redigo 恶意软件。
图 8:Aqua 平台事件屏幕中的检测视图
图 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 通信。
为了应对这些类型的威胁,建议遵循以下准则:
未知威胁和零日漏洞将继续存在。 即使做的每件事都正确也无法始终保护计算机运行时环境免受此类攻击。因此需要监视运行时环境。运行时监控是一种基本实践,可帮助快速缓解问题并最大程度地减少中断。 监视过程还适用于可能发生可疑活动(例如,下载恶意二进制文件)的运行时环境。
强化环境以防止运行不需要的 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 |
参考链接:https://blog.aquasec.com/redigo-redis-backdoor-malware
编辑|逄思渊
审校|何双泽、金矢