核弹级漏洞Apache Log4j2 的排查与修复
漏洞背景
近期,“核弹级漏洞” Apache Log4j2 远程代码执行漏洞细节被公开,攻击者利用漏洞可以远程执行代码。
Apache Log4j2 是一款优秀的 Java 日志框架,该工具重写了 Log4j 框架,并且引入了大量丰富的特性。该日志框架被大量用于业务系统开发,用来记录日志信息。
漏洞原理简述
Apache Log4j2在记录日志时会对${}的内容当作变量解析并返回解析结果,在Log4j2中定义了多种解析器,Log4j2会根据冒号分割取出前缀,根据前缀的不同交给不同的解析器处理。当前缀为jndi时,会调用JndiLookup#lookup从指定的JNDI服务器中获取资源并返回。
漏洞排查
本地排查
本次Log4j2漏洞仅影响2.x的版本,可以在本地检测是否使用Log4j 2.x版本。JndiLookup仅在log4j-core 2.x版本中,log4j-api 2.x并不影响,因此主要排查是否使用log4j-core 2.x。log4j-core 2.x的jar包中存在Log4j-config.xsd特征文件,因此可以通过该文件定位受影响的log4j组件。
Jar检测
Windows
切换到要扫描的目录,执行如下命令:
findstr /s /m /C:"Log4j-config.xsd" *.jar
Linux
切换到要扫描的目录,执行如下命令:
find "$(pwd)" -type f | egrep --color=auto -i "*.jar" | xargs -r -d '' egrep --color=auto -i -r -l "Log4j-config.xsd"
Maven检测
如果要检测Maven中是否依赖Log4j-core可以在pom.xml中搜索是否包含log4j-core或spring-boot-starter-log4j2。
Windows
切换到要扫描的目录,执行如下命令:
findstr /s /m /C:"log4j-core" /C:"spring-boot-starter-log4j2" pom.xml
Linux
切换到要扫描的目录,执行如下命令:
find "$(pwd)" -type f | egrep --color=auto -i "pom.xml" | xargs -r -d '' egrep --color=auto -i -r -l "log4j-core|spring-boot-starter-log4j2"
外网资产在线排查
该漏洞没有明显的特征,所有使用Log4j 2.x记录日志的功能都有可能存在漏洞。比如请求的参数、请求头,所以只能利用爬虫爬取页面并在所有的参数和请求头中加入Payload 模糊测试该漏洞。比如请求头比较容易出现问题的地方在X-Forwarded-For,因为开发经常有记录请求IP到日志的需求,也会通过X-Forwarded-For获取IP并写入日志。
由于爬虫本身无法检测到所有的参数输入点且有些系统参数本身加密的,所以这种方式无法覆盖所有的测试点。
内网资产在线排查
在线排查的主要方式是通过判断是否触发DNS解析请求来判断的,但是内网的主机大多无法访问DNS服务器,会产生漏报。因此可以在内网机器可以访问的主机搭建Ldap服务端,并在Payload处添加${env:COMPUTERNAME}获取机器名发送给Ldap服务端以定位存在漏洞的资产。
漏洞修复
升级Apache Log4j2版本
目前Log4j官方发布的2.15正式版本已经不再进行${}中的变量解析并且不再支持JNDI获取资源。
官方下载地址:
https://logging.apache.org/log4j/2.x/download.html
删除JndiLookup类
之所以会产生该漏洞是因为JndiLookup#lookup会发起JNDI请求来获取资源,一般来说作为日志记录也不太需要这个功能,且在新版本官方也禁用了这个功能,因此我们可以直接删除这个文件。
zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
理论上通过这种方式删除JndiLookup是不需要重启的,因为如果之前没有使用过log4j2的JNDI解析变量的功能JndiLookup.class是不会加载到JVM中的,但是为了稳妥最好还是重启一下。
热补丁
主要是通过java Agent或者反射让JndiLookup#lookup无法正常使用来达到修复的目的,但是这种方式在服务重启后会失效,因此不推荐这种修复方式。
java Agent核心代码如下,检测到JndiLookup#lookup调用则直接返回。
通过java自带的jps命令找到服务的进程ID,一般Tomcat的进程名为Bootstrap。
修复后将无法利用该漏洞。
如需热补丁,可公众号回复关键词“热补丁”获取。
产品防护
四叶草安全Web应用动态防护系统、四叶草安全入侵防御系统、御盾第二代防火墙、洞镜异常行为实时监测平台等产品已具备对该漏洞的检测和拦截能力,部署了以上产品的客户可以将产品特征库升级至最新版本,利用产品的安全防护能力降低企业安全风险。
如您想要咨询以上产品的特征库升级事宜,可拨打电话咨询。联系电话:400-029-4789;029-88894789。
链接下载
- Log4j 2.16官方下载地址:
- https://www.apache.org/dyn/closer.lua/logging/log4j/2.16.0/apache-log4j-2.16.0-bin.zip
