Log4j重大漏洞、看看我怎么重现与解决

简介: Log4j重大漏洞、看看我怎么重现与解决

这两天有没有被 Log4j 爆出的漏洞给惊到!


作为一个行业人的角度来看(小白),我是在知道漏洞的第一时间看了一下相关的新闻也大概是知道这个漏洞是怎么一个来龙去脉了。


先来看看官方漏洞描述:


Apache Log4j2 是一个基于 Java 的日志记录工具。该工具重写了 Log4j 框架,并且引入了大量丰富的特性。该日志框架被大量用于业务系统开发,用来记录日志信息。


在大多数情况下,开发者可能会将用户输入导致的错误信息写入日志中。攻击者利用此特性可通过该漏洞构造特殊的数据请求包,最终触发远程代码执行。


该漏洞危害等级:严重


影响范围:2.0 <= Apache log4j2 <= 2.14.1


解释起来就是,当系统使用 log4j 通过 ${} 形式将用户输入的信息打印到日志时,那这就会出现安全问题


演示


1、新建一个基本 maven 项目


2、添加如下依赖

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


3、编写 Java 代码

public class Log4jErrorTest {
    private static final Logger logger = LogManager.getLogger();
    public static void main(String[] args) {
        // 注意这个变量
        String error = "${java:vm}";
        logger.error("==============危险打印,{}", error);
    }
}


4、结果


image.png


当然看到这里是不是觉得,这好像也没啥太危险的呀,那我想对于这样的获取系统参数值的好像确实没啥危险的顶多就是日志信息不一样而已。


看到这是,我们是不是要细思极恐一下


那,如果有黑客把 error 变量的值变为一个可访问的链接,log4j 是不是也会像执行参数一样,去执行它呢!


答案是显然的,会。


现在我们细思极恐一下,将一个类似 ${jndi:rmi//危险链接} 的字符串往目标程序中输入,那是不是就可以在受攻击服务器中执行。


如果真那样,随便注入一个数据库操作进行数据的修改是不是一下就飞黄腾达,人生巅峰,当然我不建议这样做哈。


原理

我们重点关注的就是字符串替换,log4j 根据占位符的原理将 {} 替换为需要占位的变量,而实现这一功能就是 log4j 中的一个 Lookup 功能。


官方 Lookup 文档地址:https://logging.apache.org/log4j/2.x/manual/lookups.html


而,我了解到这个功能是依据 JNDI 的,所以漏洞就是实现一个我们自定义的JNDI程序,往目标服务器程序发送,如果他们有打印我们输入的字符串,那么就会中招而在他们的系统中执行我自定义的程序。


注意,是我们的程序会在他们的服务器运行,这是最大的危险。(阿里定义危险系数10,好像已经是满级危险了)


解决方式

方式一:简单粗暴点,就是不用 log4j 日志


方式二:升级版本,直接升到 2.15.0 版本


image.png


如果,项目没有用 log4j 日志而引入 Maven 依赖的时候又被关联进项目了,那可以使用 Maven 依赖排除功能。


来看看我的项目是怎么查是否存在 log4j 依赖的把!


本人维护的项目:https://gitee.com/j3_baiqi/communication


1、通过搜索项目 jar 包发现本人项目还真有 log4j 依赖,但我本人非常清楚我是没有引入 log4j 相关依赖的,那就只有一种可能了,被其他依赖给关联进来了。


微信图片_20220427004552.png


2、Maven help 插件查询 jar 包依赖关系


首先要安装该插件


image.png


3、进入要分析 pom.xml 文件,点击下面我标注的就可以看到所有依赖关系了。


image.png


4、接着就是找到log4j 的依赖,就可以看到依赖关系,如图


image.png


5、右键log4j 依赖选择排除,最后刷新 maven 就可以发现项目没有 log4j 相关依赖啦,非常安全,完美解决。

好了,今天的内容到这里就结束了,关注我,我们下期见

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
9月前
|
安全 Java 开发者
刚折腾完Log4J,又爆Spring RCE核弹级漏洞
继Log4J爆出安全漏洞之后,又在深夜,Spring的github上又更新了一条可能造成RCE(远程命令执行漏洞)的问题代码,随即在国内的安全圈炸开了锅。有安全专家建议升级到JDK 9以上,有些专家又建议回滚到JDK 7以下,一时间小伙伴们不知道该怎么办了。大家来看一段动画演示,怎么改都是“将军"。
85 1
|
10月前
|
运维 安全 Java
Log4j2 远程代码执行漏洞——总结
前两天网络有爆料log4j安全漏洞,安全大于天,于是也加入到这个和时间赛跑的临时事件中。对于安全漏洞网上有很多文章,内容都大同小异,不过针对于这件事小编下面的故事一定能让读者有"意外"收获。
|
7月前
|
安全 Java 大数据
CDH/HDP/CDP等大数据平台中如何快速应对LOG4J的JNDI系列漏洞
CDH/HDP/CDP等大数据平台中如何快速应对LOG4J的JNDI系列漏洞
|
8月前
|
安全 Java Shell
Apache Log4j2 远程代码执行漏洞
Apache Log4j2是一个·基于Java的日志记录工具,该工具重写了Log4j框架,并且引入大量丰富的特性,该日志框架被大量用于业务系统开发,用来记录日志信息。
63 2
|
9月前
|
安全 druid Java
【紧急】Apache Log4j任意代码执行漏洞安全风险升级修复教程
近期一个 Apache Log4j 远程代码执行漏洞细节被公开,攻击者利用漏洞可以远程执行代码。经过分析,该组件存在Java JNDI注入漏洞,当程序将用户输入的数据进行日志,即可触发此漏洞,成功利用此漏洞可以在目标服务器上执行任意代码。
228 1
|
9月前
|
安全 网络协议 Java
【紧急】Log4j又发新版2.17.0,只有彻底搞懂漏洞原因,才能以不变应万变,小白也能看懂
经过一周时间的Log4j2 RCE事件的发酵,事情也变也越来越复杂和有趣,就连 Log4j 官方紧急发布了 2.15.0 版本之后没有过多久,又发声明说 2.15.0 版本也没有完全解决问题,然后进而继续发布了 2.16.0 版本。大家都以为2.16.0是最终终结版本了,没想到才过多久又爆雷,Log4j 2.17.0横空出世。
252 0
|
10月前
|
Kubernetes 安全 中间件
Traefik 如何保护应用免受 Log4j2 漏洞的影响
2021 年 12 月 10 日,Apache Log4j2 中的一个被称为 “Log4Shell” 的漏洞被发布(CVE-2021-44228),引入了严重的安全风险。作为 Java 应用程序日志库中的一个核心组件,其广泛用于著名的开源项目以及企业级后端应用程序。在本文中,我们将向您展示 Traefik 如何基于插件系统帮助我们的业务缓解此问题。
102 0
|
12月前
|
JSON 安全 Java
使用goby检测log4j漏洞
使用goby检测log4j漏洞
|
12月前
|
安全 Java fastjson
Log4J 漏洞复现+漏洞靶场
Log4J 漏洞复现+漏洞靶场
|
12月前
|
安全 Java Shell
一次简单的log4j漏洞测试
一次简单的log4j漏洞测试
395 0

热门文章

最新文章