核弹级漏洞Apache Log4j2 的排查与修复

VSole2021-12-15 15:36:47

漏洞背景

近期,“核弹级漏洞” 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
apachelog4j
本作品采用《CC 协议》,转载必须注明作者和本文链接
Apache Log4j2是一款Java开源日志组件,该工具重写了Log4j框架,该日志框架被大量用于业务系统开发,用来记录日志信息。多数情况之下,开发者可能会将用户输入导致的错误信息写入日志中。此漏洞的严重性、影响面,堪称史上之最。若程序使用gradle打包,可查看编译配置文件,若在dependencies部分存在相关字段,且版本号为小于,则存在该漏洞。
近日,Apache Log4j 漏洞再次曝光3个高危漏洞,评级均在高危以上。 自2021年12月7日公开,Apache Log4j 漏洞被认为是“2021年最重要的安全威胁之一”,称它为“核弹级”漏洞真的不是夸张。该漏洞被披露已有1个多月时间,我们一起来回顾下,这场“核爆炸”究竟带来了哪些连锁反应? 被披露仅1个多月时间,以CVE-2021-44228漏洞为起始点,Apache Log4j
Log4j是一个开源Java日志库,由Apache Foundation开发,部署在企业应用程序和云服务中。最近火爆网络安全界的Log4j漏洞编号CVE-2021-44228 并被称为“Log4Shell”,这是一个未经身份验证的远程代码执行(RCE)漏洞,允许在使用Log4j 2.0-beta9至2.14.1的系统上进行完整的系统接管。Apache已经发布了Log4j 2.15.0来解决该漏洞。
国家互联网信息办对《网络数据安全管理条例》公开征求意见。
Apache Log4j曝严重任意代码执行漏洞,危害巨大
Apache Log4j2 (CVE-2021-44228)漏洞的利用呈加剧趋势,奇安信威胁情报中心将收集持续整理IOC供安全社区使用。 我们创建的Github项目https://github.com/RedDrip7/Log4Shell_CVE-2021-44228_related_attacks_IOCs也会同步更新,最新的数据请尽可能直接从Github的库获取。 使用Apache Log
Apache Log4j2高危漏洞一经发布,很多单位都在第一时间启动应急响应进行修复。但因Apache Log的应用极其广泛,其危害还在持续发酵过程中。绿盟科技使用网络空间安全仿真平台对Apache Log4j2漏洞环境进行了仿真,并在此环境上复现了漏洞的利用及修复方法,基于此演练场景可提升网络安全人员针对此漏洞的应急水平。绿盟科技一直致力于将网络安全前沿技术和安全事件提炼成仿真场景,通过场景式演
Apache Log4j2从RCE到RC1绕过本文首发于先知社区:https://xz.aliyun.com
9日夜间,Apache Log4j2引发严重安全漏洞,疑似很多公司的服务器被扫描攻击,一大批安全人员深夜修bug,堪称“核弹级”漏洞。 经专家研判,该漏洞影响范围极大,且利用方式十分简单,攻击者仅需向目标输入一段代码,不需要用户执行任何多余操作即可触发该漏洞,使攻击者可以远程控制用户受害者服务器,90%以上基于java开发的应用平台都会受到影响。
据悉,此次爆发的Apache Log4j2远程代码执行漏洞 ,只要外部用户输入的数据会被日志记录即被触发,无需特殊配置,入侵者可直接构造恶意请求,造成远程代码执行,并以惊人的速度在各大行业的业务系统中传播,危害堪比“永恒之蓝”! 启明星辰漏洞扫描产品团队和基线核查产品团队在第一时间对此漏洞进行了紧急响应,并提供漏洞扫描和销控方案。
VSole
网络安全专家