Log4j2 重大漏洞与解决方案

事件起因

  2021年12月10日一个平凡的日子,朋友圈,各种论坛、公众号和群,都在讨论一个Log4j2的漏洞,多少程序员半夜爬起来改代码。此bug甚至威胁到了全球网络安全,已证实服务器易受到漏洞攻击的公司包括但不限于苹果、亚马逊、特斯拉、谷歌、百度、腾讯、网易、京东、Twitter、 Steam等。为什么这个漏洞反应这么强烈呢?有以下几点原因:
一、涉及范围广(任何使用过Log4j2的项目,都有危险
二、操作简单(只需要简单操作就可以严重破坏服务器
三、危害程度高(相当于拥有了应用的权限
四、时间久(预计未来几年都会有这个bug,只要服务不更新,漏洞则一直在
Log4j2 重大漏洞与解决方案_第1张图片
  据了解,此次漏洞最早是由阿里员工发现。11月24日,阿里云安全团队向Apache报告了Apache Log4j2远程代码执行漏洞。12月9日,更多利用细节被公开。

Log4j2 介绍

  那引起这么大规模安全问题的Log4j2是什么来头,又有什么用呢?Log4j2 是Apache 的一个项目,一个基于 Java 的日志记录工具。 Log4j2 可以轻松控制 log 信息是否显示、log 信息的输出端类型、输出方式、输出格式,更加细致地控制日志的生成过程,而其通过配置文件可以灵活地进行配置而不需要大量的更改代码。因此,很多互联网企业都选择使用 Log4j2 。该项目在2014年重构了,并且引入了大量丰富的特性,也正是这次重写后的版本,才有了现在的bug。新版日志框架被大量用于业务系统开发,用来记录日志信息。所以此次受害的主要是使用了Log4j2 的Java应用(Log4j 1.x 的反而没受影响),受此影响的常见开源项目有:Spring-Boot-strater-log4j2、Apache Solr、Apache Flink、Apache Druid、Elasticsearch、Flume、Dubbo、Redis、Logstash、Kafka 等。

危害原理

  那Log4j2 bug的破坏方式是什么,其实很简单,就是类似于SQL注入,这个更厉害,直接是代码注入代码执行权限自然相当于应用权限。这就属于是一个打印日志的工具人,不好好干活,还把鬼子引进的村。
  那主要原理是什么呢?就是在打印日志时,如果发现日志内容中包含关键词 ${ },那么在{ }包含的内容会被当做变量来进行替换,导致攻击者可以任意执行命令。详细漏洞披露可查看:https://issues.apache.org/jira/projects/LOG4J2/issues/LOG4J2-3201?filter=allissues
  其实主要是因为Log4J2里的一个插件:Lookup,出了大问题。这本是个不常用的插件,但代码触发到的频率很高,高到你代码中每次触发info,warn,error 等日志写入的时候,都会去校验一下是否执行Lookup的逻辑。其中问题比较严重的有JndiLookupRMILookup功能,JNDI可以发现查找数据和资源,RMI则是远程调用。如果用你的主机,远程调用我启动的破坏代码(应用服务)呢,这时候你的服务主机就是案板上的肉了,任人宰割。

解决方案

方式一:直接弃用Log4j2
这里要注意的是,你在项目里没有依赖,不代表你的子依赖里没有,需要全局查找
方式二:升到 2.15.0 或更新版本
截至到2021.12.14日,已经更到2.16-rc1版本了,就这几天疯狂更了几个版本,这里建议至少更新到2.15.0版本以上
Log4j2 重大漏洞与解决方案_第2张图片
地址:https://github.com/apache/logging-log4j2/tags
方式三:更改 JVM 运行参数
有的项目,可能依赖较为复杂,且不方便重新编译,可以直接在运行时,添加以下JVM参数,这样可以禁止Lookup生效

-Dlog4j2.formatMsgNoLookups=true

你可能感兴趣的:(安全,安全,java,log4j,log4j2)