Log4j漏洞事件的相关技术学习

Log4j漏洞事件的相关技术学习

1.漏洞影响范围

1
2
3
4
5
Apache Log4j 2.x
Apache旗下相关附属产品,如 Apache Struts2、Apache Solr、Apache Druid、Apache Flink

目前截止官方发布版本Log4j 2.17.0

2.漏洞原理

1
Log4j中存在的JNDI Lookup原本是想提供给开发者能从远程服务器上接受相关配置及记录功能的,但是由于未对Lookup传入的参数进行过滤及检测,所以造成了相当大的影响范围及危险程度。

3.漏洞简单复现

1
2
3
环境 
Java1.8.0_301、Log4j2.14.1-core、JNDIExploit-1.2-SNAPSHOT.jar

源代码很简单,就是一个启动Logger并尝试让Logger记录一个错误的过程。

然后需要先启动一个恶意的JNDI的服务器,让后续的错误记录那一步可以调用到远程服务器上的命令即可完成远程命令执行。如下图

复现

  • 打码为了文章能活得久一点

Poc&Exp

简单来说就是恶意加载远程类造成的命令执行,目前的POC都是直接注入参数然后目标服务器为DNS的解析看是否存在返回,返回则该服务器受影响。

很多检测工具都是直接检测Jar包中是否存在Log4j-core的jar包引用。太粗暴了,不够优雅,也没有什么好一点的修复方案,不过看到了长亭的解决方式觉得非常有意思,值得学习一下,链接如下:

https://log4j2-detector.chaitin.cn/

其中的agent.jar和loader.jar利用了Java中的Javassiast技术去动态修改Jar包中的Lookup函数并将其注空直接返回。对于出现紧急漏洞的修复情况这种方式非常优雅,也不会对原有业务造成影响。

  • 又学到了(RASP的这种实时修改非常适合做热修复的相关操作)