Log4j 漏洞又名“Log4Shell”,是 2021 年 11 月在 Apache Log4j 日志记录库发现的一个严重漏洞。Log4Shell 本质上让黑客完全控制运行未打补丁 Log4j 版本的设备。
恶意行为者可以利用 Log4j 漏洞在易受攻击的系统中运行自己想要的几乎任何代码。
研究人员认为 Log4Shell 是个“灾难性”安全漏洞,因为 Log4J 是全球部署最广泛的开源程序之一,而且该漏洞很容易利用。美国网络安全和基础设施安全局 (CISA) 主任 Jen Easterly 称这是“我整个职业生涯中见过的最严重的漏洞之一,即使不是唯一的”。
Log4Shell 导致 2021 年 12 月网络攻击数量激增。根据 IBM® X-Force Threat Intelligence Index 的记录,2020 年至 2021 年,漏洞攻击增加了 34%,主要源于 Log4Shell。
Log4Shell 在被发现后不久就得到修复,但仍会产生多年风险,因为 Log4J 已深植于软件供应链。美国国土安全部估计至少需要十年时间才能发现并修复每一个漏洞实例。
根据 IBM Security X-Force Threat Intelligence 指数获取洞察,以更快且更有效地准备和应对网络攻击。
注册获取《数据泄露成本报告》
Log4j 是 Apache 软件基金会开发的日志记录框架。顾名思义,Log4J 是个记录器;记录程序中的错误消息和用户输入等重要信息。
Log4J 是个开源软件库,提供开发人员可自由使用的预先编写的代码。开发人员可以将 Log4J 库插入自己的应用程序,无需专门编写记录器。这种便利性是 Log4J 得以应用广泛的原因;例如,它可内置于 Microsoft 和 Amazon 等大型企业的产品中。
Log4Shell 是 Log4J 某些版本中存在的远程代码执行 (RCE) 漏洞,其通用漏洞披露标识符为 CVE-2021-44228。该漏洞影响 Apache Log4J 2 的 2.14.1 版本及更早版本;Log4J 2.15 及更高版本和 Apache Log4J 1 的所有版本不受影响。
Log4Shell 源于旧版本 Log4J 2 处理 Java 命名和目录接口 (JNDI) 查询的方式。JNDI 是一款应用程序编程接口 (API),帮助 Java 应用程序访问外部服务器上托管的资源。JNDI 查询是个命令,告诉应用程序要前往服务器并下载具体对象,例如一段数据或脚本。旧版本的 Log4J 2 会自动运行通过这种方式下载的所有代码。
用户可以将 JNDI 查询包含在日志消息中,从而将其发送到易受攻击的 Log4J 版本。这很容易做。例如,旧版本的 Minecraft Java 版使用 Log4J 记录用户消息,用户可以在公共交谈窗口输入 JNDI 查询。
黑客可以使用此 JNDI 功能远程运行恶意的任意代码。首先,黑客设置了一个使用通用协议(例如轻量级目录访问协议 (LDAP))的服务器,以避免引起注意。接着,他们将恶意软件文件等恶意有效内容存储在该服务器上。最后,他们向程序发送 JNDI 查询命令,要求程序前往攻击者的 LDAP 服务器,下载该有效内容并运行代码。
科技巨头阿里巴巴的安全研究人员于 2021 年 11 月 24 日发现 Log4Shell。通用漏洞评分系统 (CVSS) 立即给予 Log4Shell 最高的 10 分评级,原因如下:
截至 2021 年 12 月 9 日,关于如何利用 Log4Shell 的概念验证代码已在 GitHub 上发布,黑客也在加紧发起攻击。Minecraft、Twitter 和 Cisco 等主要企业和服务均遭到暴露。在 Log4Shell 活动的高峰期,Check Point 每分钟观察到 100 余次攻击,影响了全球 40% 以上的业务网络。
最早的攻击传播僵尸网络和挖矿恶意软件。一些黑客利用该漏洞发起无文件攻击,向 Windows 和 Linux 计算机发送恶意脚本,使之泄露密码和其他敏感信息。
多个勒索软件团伙盯上了 Log4Shell。黑客通过 Minecraft 传播 Khonsari 勒索软件。Night Sky 勒索软件针对运行 VMware Horizon 的系统发动攻击。
甚至国家层面行动者也加入进来。有人发现与中国、伊朗、朝鲜和土耳其有关的黑客曾利用该漏洞。
Apache 于 2021 年 12 月 10 日推出第一个补丁 Log4J 2.15.0。但这个补丁暴露了漏洞 CVE-2021-45046,黑客可以借助该漏洞向具有某些非默认设置的日志发送恶意命令。
Apache 于 2021 年 12 月 14 日发布第二个补丁 Log4J 2.16.0。这个补丁也存在缺陷(CVE-2021-45105),黑客可以发起拒绝服务 (DoS) 攻击。
第三个补丁 Log4J 2.17 修复了 DoS 缺陷,但未能修复漏洞 CVE-2021-44832。黑客利用该漏洞,可以夺取名为“appender”的 Log4J 组件的控制权,从而运行远程代码。Apache 通过第四个补丁 Log4J 2.17.1 解决了这个问题。
虽然 Log4J 2.17.1 在 Apache 端消除了 Log4Shell 及其所有相关漏洞,但网络威胁仍然使用该漏洞。直到 2023 年 5 月,Log4Shell 仍然是最常用的漏洞之一。
Log4Shell 的持续存在有几个原因。
首先,Log4J 深植于许多企业的软件供应链中。如今,许多应用程序都是通过组装现有开源软件库来进行构建。这个过程很方便,但这也意味着企业无法完全了解应用程序的全部组件。旧版本的 Log4J 很容易被忽视。
Log4J 的易受攻击版本得到修补后,并不总是保持修补状态。2022 年 11 月,Tenable 报告称,仍然易受 Log4Shell 攻击的资产中有 29% 是“重复出现的”。这些资产打过补丁,但漏洞再次出现。这是因为人们在构建或更新应用程序时,有时会不小心使用仍包含未打补丁的 Log4J 版本的软件库。
最后,黑客们开发出了一种巧妙的方法来掩盖自身踪迹。据 CISA 称,一些黑客使用 Log4Shell 侵入网络,然后修补资产。企业以为自己是安全的,实际黑客已经“进入”。
Log4J 的最新版本不含 Log4Shell。网络安全专家建议安全团队重点确保系统中 Log4J 的所有实例都是最新的。
更新 Log4J 的过程可能比较缓慢,因为企业通常需要深入挖掘资产才能找到它。同时,安全团队可以使用攻击面管理 (ASM)、端点检测和响应 (EDR) 平台等持续漏洞扫描和威胁检测工具来监视面向互联网的资产。专家建议事件响应团队彻查 Log4Shell 活动的蛛丝马迹。
Log4Shell 公开后,许多防火墙、入侵检测系统 (IDS) 和 入侵防御系统 (IPS) 添加了旨在发现 Log4Shell 漏洞的规则。这些工具有助于安全团队检测并拦截来自攻击者控制的服务器的流量。
2013 年 7 月 18 日:Apache 发布首个支持 JNDI 插件的版本 Log4J 2.0-beta9。Log4Shell 尽管要到几年后才会被发现,但在这一刻已诞生。
2021 年 11 月 24 日:阿里巴巴安全研究人员发现 Log4Shell 并将其报告给 Apache。Apache 开始开发补丁,但没有发布公开安全建议。
2021 年 12 月 9 日:阿里巴巴安全研究人员发现 Log4Shell 被广泛讨论的证据;概念验证漏洞利用代码已发布到 GitHub。
2021 年 12 月 10 日:Apache 发布第一个补丁;Minecraft 开发人员在 Minecraft Java 版中发现 Log4Shell。网络安全社区很快意识到情况的严重性,各组织争先恐后地锁定自己的系统。
2021 年 12 月 11 日:Cloudflare 发现威胁行为者早在 12 月 1 日就开始利用 Log4Shell 的证据,这比最初想象的要早。
2021 年 12 月 14 日:发现 CVE-2021-45046,Apache 发布解决该问题的补丁。
2021 年 12 月 17 日:发现 CVE-2021-45105,Apache 发布解决该问题的补丁。
2021 年 12 月 28 日:发现 CVE-2021-44832,Apache 发布最后一个补丁。从 Log4J 2.17.1 开始,Log4Shell 已得到全面修复。
2022 年 1 月 4 日:美国联邦贸易委员会 (FTC) 宣布,打算追究任何因未能解决 Log4Shell 问题而向黑客泄露消费者数据的所有企业。
2023 年 5 月:Check Point 发现 Log4Shell 仍然是第二大最常被利用的漏洞。