0x01 漏洞背景
12月9日,监测到网上披露Apache Log4j2 远程代码执行漏洞,由于Apache Log4j2某些功能存在递归解析功能,未经身份验证的攻击者通过发送特别构造的数据请求包,可在目标服务器上执行任意代码。漏洞PoC已在网上公开,默认配置即可进行利用,该漏洞影响范围极广,建议相关用户尽快采取措施进行排查与防护。
0x02 风险等级
严重
0x03 影响版本
受影响版本:
Apache Log4j 2.x < 2.15.0-rc2
0x04 供应链影响范围:
已知受影响应用及组件:
Apache Solr
Apache Flink
Apache Druid
srping-boot-strater-log4j2
更多组件可参考如下链接:
https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core/usages?p=1
不受影响版本:
Apache log4j-2.15.0-rc1 已被绕过,仍然是不安全版本。
Apache log4j-2.15.0-rc2
安全的JDK版本(如采用了以上组建采用了以下JDK也是安全的):
建议JDK使用:11.0.1、8u191、7u201、6u211及以上的高版本
0x04 修复建议
一、临时策略:
1、添加jvm启动参数:-Dlog4j2.formatMsgNoLookups=true
2、在应用classpath下添加log4j2.component.properties配置文件,文件内容为:log4j2.formatMsgNoLookups=true
3、建议JDK使用11.0.1、8u191、7u201、6u211及以上的高版本
二、正式策略:
1、升级到Log4j 2.15.0 r2 (r1已经被绕过)
0x05 检测方案
1、相关用户可根据Java jar解压后是否存在org/apache/logging/log4j相关路径结构,判断是否使用了存在漏洞的组件,若存在相关Java程序包,则很可能存在该漏洞。
2、若程序使用Maven打包,查看项目的pom.xml文件中是否存在下图所示的相关字段,若版本号为小于2.15.0,则存在该漏洞。
3、若程序使用gradle打包,可查看build.gradle编译配置文件,若在dependencies部分存在org.apache.logging.log4j相关字段,且版本号为小于2.15.0,则存在该漏洞。
0x06 流量层检测方案
1、攻击者在利用前通常采用dnslog方式进行扫描、探测,常见的漏洞利用方式可通过应用系统报错日志中的”javax.naming.CommunicationException”、”javax.naming.NamingException: problem generating object using object factory”、”Error looking up JNDI resource”关键字进行排查。
2、攻击者发送的数据包中可能存在”${jndi:}” 字样,推荐使用全流量或WAF设备进行检索排查和阻拦。
建议处置流程:
1、云上waf和IDC边界防火墙添加拦截过过滤策略。
2、接入云防护厂商的域名开启云防护对此漏洞利用的拦截。
3、态势感知和全流量加入检测规则,排查对外受影响的资产清单,优先修复对外业务。
4、内部分子机构和商业产品厂商,推送漏洞预警公告内部,推送各分子公司自行进行初步排查和防御升级。
5、此漏洞为为应用层漏洞,需要研发进行组件升级解决,联系代码库管理员,对所有已知代码库进行编写脚本检测受影响的项目清单拉取后修复或者利用HIDS拉取受影响资产清单,通过漏洞管理推送项目组修复加固。