log4j2远程代码执行漏洞(Log4j2漏洞事件分析与反思)

jk 319次浏览

最佳答案Log4j2漏洞事件分析与反思 漏洞背景 大时间跨度内的JavaEE应用使用Log4j进行日志记录,而 Log4j2 已成为 Java 开发社区里面广泛使用的日志框架,是一个大型项目必备的第三方库...

Log4j2漏洞事件分析与反思

漏洞背景

大时间跨度内的JavaEE应用使用Log4j进行日志记录,而 Log4j2 已成为 Java 开发社区里面广泛使用的日志框架,是一个大型项目必备的第三方库。然而在2021年12月10日,由于 Apache Log4j2 框架存在远程代码执行漏洞,该事件万众瞩目,其漏洞级别极高,一度诱发各行业系统瘫痪,被针对性攻击的风险甚至与全球范围内的网络犯罪和网络战争威胁相等。

漏洞原理

Apache Log4j2 框架所使用的动态支持则是Apache Struts2远程代码执行,即恶意攻击者可以构造恶意信息并发送,通过调用Apache log4j2内部的JNDI功能通过URL Scheme进行远程代码执行。在攻击者控制的 DNS 服务器上,通过修改 CNAME 和 TXT 域名解析后,将攻击者指定 URL 添加到应用的 DNS 解析结果中,成功实现远程代码执行。而在 Log4j2 2.15.0 及之前版本中,若 log4j2.xml 里面引用了 JNDI variable,则即使标签中不指定配置类型,并且不在XML内声明 BOP 属性,源码中默认还是会先执行 InitialContext.doLookup(。

漏洞影响

该日志框架被广泛应用,被广泛应用的应用包括:Tomcat 9.x, 10.x之前,SpringBoot和SpringCloud之前的版本,Kafka之前的所有版本等,因此影响范围极大。此外,由于攻击者利用 JNDI 远程连接 URL 访问攻击者控制的域,进而触发远程代码执行,导致的攻击结果可能非常大,比如数据泄露、篡改,甚至是应用服务器失控,再到威胁到塔吉特、银行等国家重要领域以及各行各业的运行环境,并可能危及个人信息安全。

防范建议

为规避Apache Log4j2 框架远程代码执行漏洞风险,建议用户尽快升级到 2.17.x 版本或更新版本,并检查应用程序使用的所有第三方库版本,查看其是否使用Apache Log4j2 内置的 JNDI 功能。若使用,则应将 JNDI 功能禁用。同时,更新JRE环境变量,不绑定任何RMI本地服务,移动Appenders名称空间以避免恶意用户构造HTTP请求欺骗Log4j2框架进行解析,移除所有JNDI属性或禁用JNDI远程连接,限制容器的微服务可以访问哪些IP地址,开启应用系统的入侵检测、攻击检测等等。 总之,安全始于设计,作为开发人员,不能以牺牲安全为代价,应该始终从用户角度出发,更要保证应用程序安全,加强漏洞周期管理,注重渗透测试,定期对系统进行安全扫描和风险评估,确保系统安全运行。