最近,出现了一种新的难以捉摸的严重威胁,自2021年9月以来,它一直在渗透并驻留在世界各地的服务器上。被称为HeadCrab的高级威胁利用最先进的技术自定义恶意软件方法,使无代理和传统防病毒解决方案无法检测到恶意软件,从而危及大量Redis服务器。HeadCrab僵尸网络已经控制了至少1,200台服务器。本报告将深入研究HeadCrab攻击的详细信息,研究其操作方式、用于逃避检测的技术以及组织可以采取的保护其系统的步骤。什么是Redis?Redis是一种开源内存数据结构存储,可用作数据库、缓存或消息代理。默认情况下,Redis服务器没有启用身份验证,并且设计为在安全、封闭的网络上运行,而不是暴露在Internet上。这使得可从Internet访问的默认Redis服务器容易受到未经授权的访问和命令执行。RedisCluster提供了一种运行Redis安装的方法,其中数据自动划分并存储在多个Redis节点上。在一个集群中,有一个主服务器和一个从服务器,可以方便地复制和同步数据。默认的Redis命令之一是SLAVEOF,它将服务器指定为集群中另一个Redis服务器的从属服务器。当服务器被定义为从服务器时,它将与主服务器同步,包括下载主服务器中存在的任何Redis模块。Redis模块是可执行的共享对象文件,可用于以各种方式增强服务器的功能。通过上传模块并通过Redis端口使用MODULELOAD命令将模块加载到服务器上。Redis模块使用RedisAPI执行与服务器管理和控制相关的各种任务,例如使用RedisModule_CreateCommandAPI定义自定义命令。近年来,Redis服务器已成为攻击者的目标,通常是通过错误配置和漏洞。随着Redis服务器越来越流行,攻击也越来越频繁。攻击流程这个故事始于对蜜罐的攻击,当时攻击者的目标是Redis服务器。该服务器最终使用SLAVEOF命令遭到破坏,将其设置为攻击者控制的另一台Redis服务器的从属服务器。Redis主服务器然后从从服务器启动同步,从服务器又将恶意Redis模块HeadCrab恶意软件下载到从服务器(蜜罐)。攻击者使用这种技术已经有一段时间了,它允许他们将恶意Redis模块加载到受影响的主机上。如下图所示,这些是从入站网络数据收集中获得的Redis命令日志。攻击者首先列出所有可用模块,将服务器配置为允许上传新模块,然后将模块下载到/tmp目录。将受害Redis服务器设置为从站一旦模块被下载到受害服务器上的/tmp目录,它就会使用MODULELOAD/tmp/命令加载到Redis进程中。如下面的屏幕截图所示,攻击者在最终成功之前尝试加载多个模块。HeadCrab恶意软件模块加载在对加载的模块进行逆向工程后,我们发现了一个复杂的、长期开发的恶意软件。它为攻击者提供了许多高级功能,并最终完全控制目标服务器。该模块引入了8个自定义命令,以模式rds*命名,攻击者使用这些命令在受感染的服务器上执行操作。HeadCrab恶意软件的技术分析部分讨论了恶意软件功能和命令的完整列表。蜜罐透露,此次攻击的主要效果是劫持用于加密货币挖矿的资源。从内存中提取的矿工配置文件显示,矿池主要托管在私人合法IP地址上。对这些IP地址的检查表明,它们要么属于干净的主机,要么属于一家领先的安全公司,这使得检测和归因变得更加困难。在配置文件中发现了一个公共门罗币矿池服务,但矿工在运行时没有使用。我们不仅发现了HeadCrab恶意软件,而且还发现了一种在Redis服务器中检测其感染的独特方法。当将此方法应用于暴露的服务器时,发现了大约1,200台活动的受感染服务器。受害者似乎没有太多共同点,但攻击者似乎主要以Redis服务器为目标,并且对Redis模块和API有深入的了解和专业知识,正如恶意软件所证明的那样。我们注意到攻击者竭尽全力确保他们的攻击是隐蔽的。该恶意软件旨在绕过基于卷的扫描,因为它仅在内存中运行而不存储在磁盘上。此外,使用Redis模块框架和API删除日志。攻击者与合法IP地址(主要是其他受感染的服务器)通信以逃避检测并降低被安全解决方案列入黑名单的可能性。该恶意软件主要基于不太可能被标记为恶意的Redis进程。Payload通过memfd、内存文件加载,内核模块直接从内存加载,避免了磁盘写入。HeadCrab恶意软件的技术分析HeadCrab恶意软件是一种高度复杂和高级的威胁。作为恶意Redis模块框架构建,它具有众多选项和功能。本节概述了通过我们的静态和动态分析确定的恶意软件的主要特征。如屏幕截图所示,HeadCrab样本只能被VirusTotal(MD5=c5b992c76b7c9fa3b9bd755dd3b5af76)上的少量安全产品检测到。尽管我们尝试获取更多样本,但没有发现额外的样本,这让我们更加怀疑是一种新型的高度规避的恶意软件。验证它在执行时只运行一次在初始执行期间,恶意软件利用RedisModule_OnLoad函数,该函数在Redis服务器加载模块时触发。然后恶意软件保存相关RedisAPI函数的地址以备后用,并检查是否加载名为rds的模块,如果加载则立即退出,不执行任何恶意操作。初始环境范围存储由启动模块加载的连接信息以供将来检查。此外,恶意软件会检查它是作为特权root用户运行还是作为称为redis的特权较低的用户运行。强调操作安全性(幻数)该模块可以加载2个参数(幻数),实际上是2个用作加密密钥的全局幻数,并验证其操作者是否真的是威胁参与者。然后,恶意软件可以在其执行流程的不同点使用这些幻数做一些事情。该模块可以加载或不加载幻数,这将影响恶意软件执行期间的某些功能。如果模块加载2个参数,部分Redis默认命令(8个命令:Module、Client、Debug、Shutdown、Monitor、Slaveof、Replicaof、Config)被主要返回错误的命令覆盖。这样做是为了避免检测到恶意软件。如果模块没有加载2个参数,则跳过此步骤。修改后的默认命令如下:此外,如果通过将其截断为0大小重新创建,则恶意软件会删除Redis日志文件并将其清空。准备恶意软件执行一些检查以确定操作过程。我们不会深入这些检查的细节,但会检查/testing路径和执行日期,并基于某些功能是否正在执行。信号处理程序被替换并被恶意软件用来与其子进程通信。隐藏代码执行恶意软件找到动态加载程序的路径,以便它可以执行该进程。通过简单地提供所需可执行文件的路径作为参数,动态加载程序可用于按名称执行进程。这可用于绕过基于检查进程执行来检测恶意文件的安全解决方案。由于动态加载器是一个合法的二进制文件,它不会被标记为恶意的,并且恶意软件可以将自己隐藏在这些安全解决方案之外。从内存执行,恶意软件试图在memfd_create系统调用的帮助下创建无文件文件。如果成功,它会创建10个memfd或临时文件并保存它们供以后使用。强调在容器中执行恶意软件以检查低于31的进程ID。我们假设这样做是为了检测服务是否在容器中运行。如果恶意软件没有在容器上运行,则会检查几个服务管理程序,例如systemd、initd、upstart等。如果安装了其中任何一个,它们将被标记,稍后将用于放置持久服务和脚本地方。我们假设恶意软件跳过了容器上的这一步,因为它是无效的。创建新的Redis命令恶意软件随后创建一个新的Redis命令,用于使攻击者能够操纵恶意软件:rdsa该命令接受两个参数。一是Redis配置文件的路径,二是恶意Redis模块的路径。此函数在Redis配置中添加一行,用于加载带有幻数的恶意模块。为了进一步持久化恶意软件,它隐藏了loadmodule命令输出。此命令用于加载恶意模块并通过向打印到屏幕的输出添加填充来隐藏其活动。rdss使用popen执行并返回进程输出作为命令输出rdsp将默认命令替换为恶意函数以逃避检测。rdsi通过截断和空日志更新加密中使用的幻数。rdsmMONITOR是一个Redis调试命令,它流回Redis服务器处理的每个命令。它也被rdsp命令或加载带有2个参数的模块所取代。这个新命令负责恢复对MONITOR命令所做的更改-重新启用服务器调试。rdsc侦听所需端口上的传入连接,并启用与C2服务器的加密通信通道。下面的附录部分详细描述了可用的命令。为了强调它的一些强大功能,恶意软件可以创建一个新套接字并将其连接到C2命令套接字,将网络隧道连接到另一个IP地址和端口对,执行shell命令,将文件内容发送到C2,写入数据打开memfd文件,读取保存的memfd文件的内容并发送回C2,加载无文件内核模块,以及许多其他强大的功能。rdsr与C2服务器建立加密通信通道。与上面的rdsc相同。rdsx恢复覆盖的命令并将它们恢复为默认的Redis命令。在下面的屏幕截图中,您可以看到其中一些命令的模拟:覆盖和恢复默认命令的示例谁是HeadCrab?或者,什么是HeadCrab?为什么这个攻击者和恶意软件叫做HeadCrab。答案很简单。攻击者在被攻击机器上留下了以下信息。如上图所示,攻击者被识别为HeadCrab,一种来自游戏《半条命》的怪物,它会附着在人类身上并将其变成僵尸。这是有道理的,因为我们已经看到这种威胁使Redis服务器僵尸化并使用它们横向移动到其他服务器。此外,攻击者还创建了一个专门针对Nautilus团队的博客条目。此参考适用于有关Redigo的博客。Redigo是一种针对Redis服务器的新型恶意软件,攻击者利用漏洞逃脱LUA沙箱并导致在目标服务器上远程执行代码(CVE-2022-0543)。在进一步审查新发现的恶意软件并发表个人私密评论后,我们认为Redigo恶意软件也使用了主从技术,而不是LUA沙箱逃逸。这个攻击组织是高度分散的,因此在开源中找不到其活动的许多迹象。我们确实找到了上图中出现的“pamdicks”。在TrendMicro的博客中,提到了一个叫做netlink的rootkit用来改变CPU相关的统计数据(可以隐藏pamdicks进程和CPU负载)来隐藏加密挖矿。但这很可能是攻击者所指的。运行时检测HeadCrab恶意软件旨在偷偷攻击Redis服务器,无论它们是在容器中还是在VM上运行。企业需要使用容器安全或主机安全等解决方案进行实时检测,而我使用恶意行为的实时指标来识别HeadCrab恶意软件等隐秘攻击。将攻击映射到MITREATT&CK框架这里我们将上述攻击中的组件映射到MITREATT&CK框架的相应攻击技术:总结、补救和缓解在本报告中,我们揭示了负责创建攻击者HeadCrab的威胁高级恶意Redis框架。我们深入研究恶意软件的内部工作原理并展示其丰富的功能。调查显示,HeadCrab的僵尸网络控制了1200多台服务器,所有这些服务器都感染了该恶意软件。我们有理由相信,无论是利用错误配置还是利用漏洞,HeadCrab都会坚持使用尖端技术渗透服务器。立即修复受感染的服务器如果您的服务器受到威胁,您必须??假定您的网络已受到威胁并立即启动您的事件响应流程。这将帮助您检测漏洞的范围、隔离受感染的系统并清理受影响的环境。虽然可以通过删除关联的服务和脚本、从Redis配置中删除加载模块并重新启动服务器来删除恶意软件,但攻击者仍然保留了一些功能,包括删除文件、执行二进制文件、窃取SSH密钥、扫描和与其他人通信的能力系统并加载内核模块。这允许攻击者在网络内横向移动。从服务器中完全消除攻击者的存在可能是一项复杂的任务。为了保证您的网络安全,我们建议将Redis数据库备份到一个文件中,并在可能的情况下将其迁移到具有适当授权和流量控制并且不能直接从Internet访问的新服务器。缓解建议为了降低Redis服务器的风险,您希望通过确保您的Redis配置符合安全最佳实践来强化您的环境。在这份报告中,攻击者使用“主从”技术将数据库从远程服务器复制到目标服务器(蜜罐)。此功能最初由Redis创建以提高性能和创建冗余,但被攻击者积极使用以快速感染目标和逃避检测。我们建议采取以下步骤来加强您的Redis服务器的安全性:(1)Redis旨在让受信任的客户端在受信任的环境中访问。这意味着一般来说,将Redis实例直接暴露给Internet或通常暴露给不受信任的客户端可以直接访问RedisTCP端口或UNIX套接字的环境并不是一个好主意。(2)无论何时在云端使用Redis,最好启用保护模式以增强安全性。保护模式确保数据库只响应环回地址,并生成错误作为对从其他IP地址连接的所有节点的答复。(3)使用绑定参数接受来自已知主机的通信。您的Redis服务器将仅侦听来自通过绑定选项指定的地址的连接。这是一种安全措施,允许丢弃未在网络内部建立的连接。(4)如果您不主动使用“slaveof”功能,我们强烈建议禁用它。(5)更多的安全建议可以在Redis安全管理部分或者他们的相关博客中阅读。可以采取一些进一步的措施来减轻对云中软件开发生命周期的威胁,我们建议遵循以下准则:未知威胁和零日漏洞仍然存在。即使您做的每件事都正确,您也无法始终保护您的运行时环境免受此类攻击。因此,您需要监控运行时环境。部署容器安全或主机安全解决方案来保护您的运行时环境。运行时监控是一项基本实践,可以帮助快速缓解问题并最大程度地减少中断。监视过程还适用于可能发生可疑活动(例如下载恶意二进制文件)的运行时环境。扫描您的软件供应链。您可以使用诸如Chain-bench之类的开源工具,该工具旨在根据新的CIS软件供应链基准审核您的软件供应链堆栈的安全合规性。为您的开发人员、DevOps和安全团队提供扫描漏洞和错误配置的工具。除了商业软件工具,您还可以找到特定的开源工具(例如Trivy)来扫描此类漏洞。