zoukankan      html  css  js  c++  java
  • Apache Log4j2 远程代码执行漏洞排查和修复建议

    TAG Log4j2、JNDI、RCE
    漏洞等级: 攻击者利用此漏洞,可实现远程代码执行。
    版本: 1.1

    简介

    Apache Log4j是Apache的一个开源项目,Apache log4j2是Log4j的升级版本,我们可以控制日志信息输送的目的地为控制台、文件、GUI组件等,通过定义每一条日志信息的级别,能够更加细致地控制日志的生成过程。

    漏洞概述

    12月9日,网上披露Apache Log4j2 远程代码执行漏洞,由于Apache Log4j2某些功能存在递归解析功能,未经身份验证的攻击者通过发送特别构造的数据请求包,可在目标服务器上执行任意代码。漏洞PoC已在网上公开,默认配置即可进行利用,该漏洞影响范围极广,建议相关用户尽快采取措施进行排查与防护。
    12月10日,Apache Log4j 2.15.0-rc1 版本仅修复LDAP和增加了host白名单,可以被绕过利用,官方发布了Apache Log4j 2.15.0-rc2版本进行修复,增加了对urI异常的处理。
    
    Apache Log4j2是一款开源的Java日志框架,被广泛地应用在中间件、开发框架与Web应用中,用来记录日志信息。
    

    漏洞成功复现信息:

    漏洞细节 漏洞PoC 漏洞EXP 利用
    已公开 已公开 已公开 存在

    参考链接:
    https://issues.apache.org/jira/projects/LOG4J2/issues/LOG4J2-3201?filter=allissues

    受影响版本

    • 2.0 <= Apache Log4j <= 2.15.0-rc1

    注:使用Apache Log4j 1.X版本的应用,若开发者对JMS Appender利用不当,可对应用产生潜在的安全影响。

    供应链影响范围

    已知受影响应用及组件:

    Apache Solr

    Apache Struts2

    Apache Flink

    Apache Druid

    spring-boot-strater-log4j2

    更多组件可参考如下链接:

    https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core/usages?p=1

    不受影响版本

    Apache log4j-2.15.0-rc2(与官网的2.15.0稳定版相同)

    漏洞检测

    人工检测

    1、用户可以更加java jar解压后查看是否存在org/apache/logging/log4j相关路径结构,判断是否存在使用的漏洞组件,如果存在相关java程序包,说明很有可能存在漏洞。

    2、程序使用gradle打包,可以查看build.gradle编译配置文件,若在dependencies部分存在org.apache.logging.log4j相关字段,且版本号为小于2.15.0-rc2,说明存在该漏洞。

    dependencies {
      compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.12.1'
      compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.12.1'
    }
    

    修复后

    dependencies {
      compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.15.0'
      compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.15.0'
    }
    

    3、若程序使用maven打包,查看项目的pom.xml文件中是否存在下图所示相关字段,若版本号为小于2.15.0-rc2,说明存在该漏洞。

    dependencies>
      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.12.1</version>
      </dependency>
      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.12.1</version>
      </dependency>
    </dependencies>
    

    修复后的

    <dependencies>
      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.15.0</version>
      </dependency>
      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.15.0</version>
      </dependency>
    </dependencies>
    

    攻击排查

    • 攻击者在利用前通常采用 dnslog 方式进行扫描、探测,对于常见
      利用方式可通过应用系统报错日志中的
      “javax.naming.CommunicationException”、
      “javax.naming.NamingException: problem generating object using object factory”、”Error looking up JNDI resource”关键字进行排查。
    • 流量排查:攻击者的数据包中可能存在:“${jndi:rmi”、
      “${jndi:ldap” 字样

    漏洞修复方案:

    Apache官方已发布补丁,建议受影响的用户尽快升级到安全版本。

    补丁下载地址:

    https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc1

    漏洞缓解措施:

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

    (2)log4j2.formatMsgNoLookups=True

    建议 JDK 使用 11.0.1、8u191、7u201、6u211 及以上的高版本。

    官方文档:

    https://logging.apache.org/log4j/2.x/maven-artifacts.html

    作者:zhangliangliang 出处:http://www.cnblogs.com/lianglab/ 本文版权归作者和博客园共有,写文不易,支持原创,欢迎转载【点赞】,转载请保留此段声明,且在文章页面明显位置给出原文连接,谢谢。
  • 相关阅读:
    re.sub函数的深入了解
    xpath
    改变评分查询
    Boolean Query
    固定分数查询
    Unicode编码的原型
    java中基本类型占用字节数
    Java Socket网络编程的经典例子(转)
    (转)工厂模式
    (转)java垃圾回收机制
  • 原文地址:https://www.cnblogs.com/lianglab/p/15673729.html
Copyright © 2011-2022 走看看