您的位置:

log4jpayload - 一个危险的漏洞

一、简介

log4jpayload 是 Apache log4j 中的一个漏洞,被利用用于攻击目标系统。该漏洞可以允许黑客通过在日志中插入特定的负载来执行任意代码。并且,这种攻击是无需认证的,极具危害。

在本文中,我们将介绍该漏洞的影响、原因以及如何检测和防护这个漏洞。

二、影响 - 悄无声息地攻击

log4jpayload 漏洞可以被黑客用来执行恶意代码。利用该漏洞,攻击者可以将恶意代码注入到目标服务器的内存中,然后执行该代码。他们可以使用该漏洞获取目标系统的敏感信息,或者执行其他恶意行为例如篡改数据。

此外,log4jpayload 漏洞是一个无需认证的漏洞。这意味着黑客可以远程利用它,没有任何的身份验证。

三、原因 - 输入验证的缺失

log4jpayload 漏洞的根本原因是 Apache log4j 框架对潜在攻击的输入缺乏有效的验证。这使得攻击者可以轻松地向目标服务器注入恶意代码。

该漏洞是由于在 PropertyPlaceholderConfigurer 类中的 JNDI 查找函数不进行适当的验证而引起的。Attacker 可以在 env-entry 元素的 value 属性中注入任意 JNDI URL,将其用于访问恶意服务器上的恶意代码。这个 JNDI URL 在初始化工作时被用来解析,使得恶意代码能够执行。

四、检测和防范 - 阻止 log4jpayload 的攻击

检测和防止 log4jpayload 的最佳方法是升级到修复版本。然而,在升级之前,你可以采取以下措施来降低被攻击的风险:

1、配置防火墙,以阻止与外部 IP 的通信

2、通过禁用 JNDI 查找和 PropertyPlaceholderConfigurer 初始化器来禁用环境变量扩展。具体地,可以防止在任何情况下调用丢弃为以下任意格式的 log4j 属性来解析系统属性:

log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

3、使用防火墙限制所有 HTTP 请求和响应的大小,以防止脚本负载过大导致造成拒绝服务攻击

五、攻击代码演示

以下是一个攻击脚本示例,它将触发 log4jpayload 漏洞,并将命令回显到攻击者的机器上。

#log4j.properties file content
log4j.rootLogger=DEBUG, R
log4j.appender.R=org.apache.log4j.ConsoleAppender
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
env.SHELL=%2fbin%2fbash
env.PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

攻击脚本解释:

该脚本会在日志文件中插入一些内容,以触发 log4jpayload 漏洞。一旦该负载被加载,将执行位于 SHELL 环境变量中的 shell。在这种情况下,我们设置了 SHELL 以让它调用 bash。然后,该脚本将在 stderr 和 stdout 上重定向相应的输出,以便输出到攻击者的机器上,同时执行一个命令,以使它回显到攻击者的机器上。

结束语

log4jpayload 漏洞是一个极具危害的漏洞。它允许攻击者在目标服务器上执行任意代码,并可能导致数据泄露或系统瘫痪,而不需要身份验证。通过升级到修复版本,配置防火墙以阻止与外部 IP 的通信,限制 HTTP 请求和响应的大小,禁用环境变量扩展等措施,可以降低被攻击的风险。此外,必须始终对所有日志文件进行严格的输入验证,以及进行对可能会触发强制操作的代码的审核。这样可以确保日志文件保持完整和可靠,以便在将来用于安全分析和恢复。