漏洞描述
Apache Log4j是一个基于Java的日志记录工具。Log4j是几种Java日志框架之一。该项目在Apache接手后进行了代码重构,解决了框架中的架构问题并在Log4j 2中提供了一个插件架构,这使其更具扩展性。用户可以更为精确的对日志进行细粒度的控制,支持将日志信息发送到服务器、写入到文件或是发送给GUI组件等,通过定义日志信息的级别、输出格式,发送参数来对日志进行更完善的管理。
Log4j 2.X中采用了LDAP的简单目录服务结构进行日志的查询。在进行递归查询时,JNDI方法在处理查询参数的过程中存在注入漏洞,攻击者可利用该漏洞在未授权的情况下,构造恶意参数以远程方式在目标服务器上执行恶意代码。
该漏洞的POC在11月底被安全研究人员发布,12月8日网络上出现该漏洞POC。该漏洞影响范围非常广泛,目前无法准确统计受影响的具体资产和组件的数量。
漏洞影响范围
Apache Log4j 2.x:
含有该漏洞的Log4j 2影响到超过 6000个中间件或应用,目前已知的可能受影响的应用及组件包括但不限于如下清单中所列出的:
Spring-Boot-strater-log4j2
Apache Struts2
Apache Solr
Apache Flink
Apache Druid
ElasticSearch
Flume
Dubbo
Redis
Logstash
Kafka
漏洞分析
在受影响版本中,攻击者可以利用该漏洞在未授权的情况下,构造恶意参数以远程方式在目标服务器上执行恶意代码,从而获取目标服务器的控制权限。
该漏洞的POC在11月底被安全研究人员发布,12月8日网络上出现该漏洞POC。该漏洞以及已公开的POC进行分析,在Log4j 2组件的版本低于2.15 RC2的情况下均能成功执行任意代码,通过POC可以成功获得受害服务器返回的连接。具体测试截图如下:
访问漏洞环境,构造带有dnslog地址的payload:“$”并提交请求,如下图所示。
排查方法、缓解措施
(1)针对应用自身排查
在应用内部搜索log4j-core-*.jar以及log4j-api-*.jar两个关键字,查看其版本是否在受影响的版本范围中,同时查看其pom.xml文件内部的版本号进行二次确认。也可以通过查看内部JAVA源代码库中所引入的组件清单列表来确认是否引入了Apache Log4j 2.x的Jar包。
(2)入侵排查
攻击者在利用前通常采用dnslog方式进行扫描、探测,针对该漏洞利用可通过应用系统报错日志中的如下关键字进行排查:
攻击者发送的恶意数据包中可能存在“{jndi:rmi”、“{jndi:ldap”关键字,推荐使用全流量或WAF设备进行检索排查。
检测:
在WAF中添加如下两条自定义规则:
tcp_payload^%24%7Bjndi%3Aldap%3A%2F%2F
http_msgbody^%24%7Bjndi%3Aldap%3A%2F%2F
临时缓解措施(任选一种):
修改jvm启动参数 -Dlog4j2.formatMsgNoLookups=true
修改配置log4j2.formatMsgNoLookups=True
设置系统环境变量 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 为 true
临时缓解措施自动化处置脚本:
1. Windows 操作系统:使用管理员权限运行log4j2_hjcs.bat
Windows 处置脚本下载地址:
https://www.antiy.com/tools/Log4j2_hjcs.bat:
@echo off
:: 设置环境变量:
FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS=true
wmic ENVIRONMENT create name="FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS",username="<system>",VariableValue="true"
echo %FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS%
echo Set successfully!
pause
本文分享自 nginx遇上redis 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!