Log4j 的远程代码执行漏洞

Log4j 的远程代码执行漏洞

12 月 10 日凌晨,Apache 开源项目 Log4j 的远程代码执行漏洞细节被公开,由于 Log4j 的广泛使用,该漏洞一旦被攻击者利用会造成严重危害。受本次漏洞影响的版本范围为 Apache Log4j 2.x < 2.15.0-rc2,攻击者可以利用此漏洞在目标服务器上执行任意代码,通过 JNDI 来执行 LDAP 协议来注入一些非法的可执行代码。

攻击检测

(1)可以通过检查日志中是否存在 “jndi:ldap://”、“jndi:rmi” 等字符来发现可能的攻击行为。

(2)检查日志中是否存在相关堆栈报错,堆栈里是否有 JndiLookup、ldapURLContext、getObjectFactoryFromReference 等与 jndi 调用相关的堆栈信息。

官方修补建议

1、排查应用是否引入了 Apache log4j-core Jar 包,若存在依赖引入,且在受影响版本范围内,则可能存在漏洞影响。请尽快升级 Apache Log4j2 所有相关应用到最新的 log4j-2.15.0-rc2 版本,地址 https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2

2、升级已知受影响的应用及组件,如 spring-boot-starter-log4j2/Apache Struts2/Apache Solr/Apache Druid/Apache Flink

3、可升级 jdk 版本至 6u211/ 7u201 / 8u191 / 11.0.1 以上,可以在一定 程度上限制 JNDI 等漏洞利用方式。

4、在无法升级版本时,通过修改 jvm 参数、系统环境变量等方式,可在一 定程度上缓解该风险,但无法完全修复,因此不建议通过修改参数的方式解决该风险。

  • 修改 JVM 参数, 设置 -Dlog4j2.formatMsgNoLookups=true
  • 在涉及漏洞的项目的类路径(classpath)下增加 log4j2.component.properties配置文件并增加配置项 log4j2.formatMsgNoLookups=true

5、采用 rasp 对 lookup 的调用进行阻断。

6、采用 waf 对请求流量中的 ${jndi 进行拦截。

log4j-2.15.0-rc1 发布了紧急补丁。

https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc1

但不久又被发现依然存在新的问题。若是使用 Java 开发语言的系统需要尽快确认是否使用 Apache Log4j 2 插件,并尽快升级到最新的 log4j-2.15.0-rc2 版本。

https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2

maven 的中央仓库发现这个版本。需要自行编译。

下载地址:https://github.com/apache/logging-log4j2/archive/refs/tags/log4j-2.15.0-rc2.tar.gz

https://gitee.com/apache/logging-log4j2/tags

加速地址:https://shrill-pond-3e81.hunsh.workers.dev/https://github.com/apache/logging-log4j2/archive/refs/tags/log4j-2.15.0-rc2.tar.gz

今天凌晨已经把 log4j-2.15.0-rc2 源代码编译成功,睡了回笼觉,补一下 log4j-2.15.0-rc2 源代码编译过程,分享给大家。

log4j-2.15.0-rc2 源代码编译

使用 docker 编译 log4j-2.15.0-rc2;

docker run -v C:\Users\Lenovo\dock:/opt -it hub.c.163.com/public/centos:7.2.1511 bash

安装 jdk8(略)

安装 apache-maven-3.6.3

cd /opt
wget https://mirrors.ocf.berkeley.edu/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz --no-check-certificate
mkdir /opt/maven
tar -zxvf apache-maven-3.6.3-bin.tar.gz -C /opt/maven

设置环境变量

编辑 vim /etc/profile 文件, 添加下面的命令:

export JAVAHOME=/opt/java/jdk1.8.0311
export MAVENHOME=/opt/maven/apache-maven-3.6.3
export CLASSPATH=.:$JAVAHOME/lib/dt.jar:$JAVAHOME/lib/tools.jar
export PATH=$PATH:$JAVAHOME/bin:$MAVEN_HOME/bin

控制台执行,source /etc/profile

编译源代码

wget https://shrill-pond-3e81.hunsh.workers.dev/https://github.com/apache/logging-log4j2/archive/refs/tags/log4j-2.15.0-rc2.tar.gz
tar -xzvf log4j-2.15.0-rc2.tar.gz
cd /opt/logging-log4j2-log4j-2.15.0-rc2
mvn clean
#(出现问题可以查看问题列表,问题解决后,可以重新执行下面命令验证)
mvn install -Dmaven.test.skip=true

编译成功截图如下:

问题

1、maven-failesafe-plugin:3.0.0-M5

由于 yum 安装的版本比较老,有些项目不能打包,因此需要我们手动安装 apache-maven-3.6 以上版本即可解决。

2、project log4j-api-java9: Cannot find matching toolchain definitions for the following toolchain types:
[ERROR] jdk [ version=’[9, )’ ]

进入子目录,先编译,具体命令如下:

cd log4j-api-java9
cp ../toolchains-sample-linux.xml ../toolchains-sample-linux-9.xml

编辑 toolchains-sample-linux-9.xml,详见下图

mvn clean install -t ../toolchains-sample-linux-9.xml

如果回到项目根目录 cd …,执行命令 mvn install -Dmaven.test.skip=true 依然报该错误,请执行以下命令

cd log4j-api-java9
cp ../toolchains-sample-linux-9.xml ~/.m2/toolchains.xml
cd ..
mvn install -Dmaven.test.skip=true

3、project log4j-perf: Cannot find matching toolchain definitions for the following toolchain types:
[ERROR] jdk [ version=’[11, )’ ]

cp ../toolchains-sample-linux.xml ../toolchains-sample-linux-11.xml

编辑 toolchains-sample-linux-11.xml,详见下图

mvn clean install -t ../toolchains-sample-linux-11.xml

如果回到项目根目录,执行命令 mvn install -Dmaven.test.skip=true 依然报该错误,请执行以下操作;

vim ~/.m2/toolchains.xml 增加以下代码,保存后,回到项目根目录,执行命令 mvn install -Dmaven.test.skip=true 即可。

<toolchain>
  <type>jdk</type>
  <provides>
    <version>11</version>
    <vendor>sun</vendor>
  </provides>
  <configuration>
    <jdkHome>/opt/java/jdk-11.0.13</jdkHome>
  </configuration>
</toolchain>

Log4j出最新版本2.16.0,已推送到maven的中央仓库,是用该版本即可
maven:

<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.16.0</version>
</dependency>

Gradle: implementation group: ‘org.apache.logging.log4j’, name:
‘log4j-core’, version: ‘2.16.0’

— THE END —
【免责声明】图文来自网络,版权归原作者所有。如侵权请联系删除;我们对文中观点保持中立,仅供参考、交流之目的!

本文来自公众号:大技术
原文地址 zhuanlan.zhihu.com

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值