新痛点:APT组织PawnStorm 0Day如何绕过Java点击播放保护

几个月以前,趋势科技发现了APT组织Pawn Storm利用之前未经披露的Java漏洞(CVE-2015-2590)进行攻击。在那之后,我们注意到一个被用于染过Java点击播放(click-to-play)保护的独立漏洞。

第二个漏洞(CVE-2015-4902)现在已经在Oracle定期的季度更新中被修复,并将此归功于趋势科技的发现。

FreeBuf百科:Click-to-play

Click-to-play要求用户在Java应用程序执行之前,在空白处单击一下。实际上,它要求用户只有在十分确定需要运行Java代码的情况下才会运行。

绕过click-to-play保护技术允许恶意Java代码在没有显示任何警告窗口的情况下运行。Pawn Storm对于这一手段运用得炉火纯青,因为它在今年年初针对北约成员以及白宫进行的攻击中利用了这些漏洞的exp。Pawn Storm本身就以超高频率运用着0day漏洞:上个星期,就被发现使用了未补丁的Adobe Flash漏洞实施攻击(这个漏洞已被Adobe修复)。

Oracle在我们报告这个漏洞时就承认了漏洞的存在。用于绕过这种保护的方式很巧妙,在我们讨论漏洞之前,有必要先对背景信息进行一下梳理。

相关背景介绍

Oracle为应用程序在用户桌面启动提供了Java网络启动协议Java Network Launch Protocol(JNLP)技术,允许调用远程Web服务器托管的资源。它可以用于部署一个应用程序或者Web Start应用程序。在攻击场景中,使用JNLP部署应用程序。

Java提供了一个目录服务,允许Java软件用户通过一个名字来发现与查找目标。这就是所谓的Java命名与目录接口(JNDI),Java命名与目录接口。这个机制是Java远程过程调用的基础,又名远程方法调用(RMI)。JNDI与这个exp相关的一些基础概念,如下所示:

· Context——一组name-to-object绑定。换句话说,Context对象能够解决名字与对象间一一对应。对象包含几种类型;其中RegistryContext便是这些类型之一。 · ContextFactory——这可以创建一个用于调用的Context对象。RegisterContextFactory则是用来创建ContextFactory对象的。

EXP的工作原理

图1. 如何绕过click-to-play

攻击者在攻击前需要完成三个任务:

1、将图2中的HTML代码添加到一个恶意网站; 2、创建一个具备公共IP地址的RMI注册服务器; 3、创建另一个同样具有公共IP地址的web服务器,用来保存恶意Java代码。

图2. 插入恶意网站的HTML代码

攻击究竟是如何进行的?

1、在受害者机器上,jp2launcher.exe进程是由web浏览器进程forke而来,并且从恶意网络服务器上请求init.jnlp。以上操作都是使用图片二中的HTML代码完成的(.jnlp是使用JNLP技术启动Java代码的后缀)。

2、恶意网站发送回init.jnlp,现在再来看一下文件的内容:

图3. Init.jnlp内容

红色圈中的内容并不寻常。进程级的标签含义可从Java开发人员指南中找到。这类应该可以实现Java接口DownloadServiceListener。但是,攻击者使用javax.naming.InitialContext。然而,JRE并不能用于检测并让代码执行。

3、Java类Javax.naming.InitialContext的构造函数要从恶意网站请求应用程序的JNDI.properties(即JNDI配置文件)。

4、恶意网站服务器发送JNDI.properties到客户端。下面让我们来看看这个文件的内容:

图4. JNDI.properties内容

Java.naming.factory.intial 指定了初始context factory类。 java.naming.provider.url指定目录服务器提供者的地址为.javax.naming。InitialContext的构造函数会创建com.sun.jndi.rmi.registry.RegistryContextFactory对象,并使用它来创建初始上下文。

5、在创建初始上下文期间,它会与RMI注册服务器沟通来获取上下文信息。在图4中,这个java.naming.provider.url=rmi://{恶意服务器}/Go。这个URL使用了以下格式://[主机]/[对象]。因此,[对象]是Go。这便会允许客户端找到EMI服务器上的对象信息。

6、RMI服务器送还它的回复并允许客户端通过HTTP服务器从恶意Java类请求Go.class。

7、服务器发送Go.class内容给客户端。Java类中的代码在目标机器上运行的。

步骤3-7将在javax.naming.InitialContext的构造函数内进行,这不失为一个相当聪明的绕过click-to-play保护方式。

这里我们强调了用于复杂系统例如Java中安全保护特性(例如click-to-play)的重要性,对于已存在新特点进行审计是个必要过程。这确保了“优秀”功能和安全性都不会丧失。

如果Java仍能继续被广泛使用,绕过click-to-play保护的意义将是深远的。任何偶然发现的0day漏洞都将会利用。

这个特殊漏洞已经在最新的Java版本中获得了修复。用户应该尽快下载最新版本Java,尽管在一些情况下Java已经被慢慢淘汰。依赖Java的机构应该考虑是否。

威胁指标IOC

JNLP文件用于启动这一exp链的SHA1值为:38F643B48B35B765326CEE6A1D16E1C35DCA93FD。

*参考来源:趋势科技,作者/Jack Tang,编译/哆啦A梦,转载请注明来自黑客与极客(FreeBuf.COM)

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2015-10-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

大型服务端开发的反模式技巧

1. 用线程池执行异步任务 ? 为了减少阻塞时间,加快响应速度,把无需返回结果的操作变成异步任务,用线程池来执行,这是提高性能的一种手段。 你可能要惊讶了,这么...

36650
来自专栏沃趣科技

【Oracle 12c Flex Cluster专题 】— Leaf Node的故障迁移

原文链接 http://allthingsoracle.com/oracle-flex-cluster-leaf-node-failover/ 译者 周天鹏...

36990
来自专栏EAWorld

一篇文章全面解析大数据批处理框架Spring Batch

如今微服务架构讨论的如火如荼。但在企业架构里除了大量的OLTP交易外,还存在海量的批处理交易。在诸如银行的金融机构中,每天有3-4万笔的批处理作业需要处理。针对...

73260
来自专栏FreeBuf

Android 5.x漏洞:黑客可以绕过屏幕密码进入系统

很多Android用户会选择使用锁屏密码保护设备,但最新爆出的漏洞却令人震惊:任何人无需复杂的操作即可绕过锁屏直接进入你的系统! 攻击者可以通过漏洞导获取上锁...

264100
来自专栏SAP最佳业务实践

SAP最佳业务实践:FI–资产会计(162)-19定期处理-AFAB折旧过帐运行

4.7.3 AFAB折旧过帐运行 起初过帐至固定资产会更改资产会计中的计划折旧。然而,资产负债表和损益表的累计折旧科目和折旧科目并不会立即更新。直到执行定期折...

40070
来自专栏杨建荣的学习笔记

了解一下CPU 第一篇(r4笔记第30天)

CPU可能对于我们来说是熟悉又陌生的,每天的工作基本都离不开CPU,CPU的消耗是系统负载的一个重要指标,每天都会不定时的来看看CPU的使用情况,但是对于它了解...

35540
来自专栏软件开发 -- 分享 互助 成长

win10使用u盘装回win7

背景:一朋友要我帮忙把系统从win10装回到win7,因为做IT的嘛,想想也难不倒我,况且以前也经常重装系统,硬盘里就有win7的系统,于是很爽快的答应了。电脑...

24390
来自专栏王亚昌的专栏

iostat命令使用

天刚上线了一台server,观察了一下,发现io比较高,想到了iostat命令,观察了一下(每隔一秒打印一次),发现有一个守护进程每隔几秒就写一次IO,再top...

8820
来自专栏Golang语言社区

大型服务端开发的反模式技巧

1. 用线程池执行异步任务 ? 为了减少阻塞时间,加快响应速度,把无需返回结果的操作变成异步任务,用线程池来执行,这是提高性能的一种手段。 你可能要惊讶了,这么...

31960
来自专栏aCloudDeveloper

UNIX环境高级编程笔记之文件I/O

一、总结   在写之前,先唠几句,《UNIX环境高级编程》,简称APUE,这本书简直是本神书,像我这种小白,基本上每看完一章都是“哇”这种很吃惊的表情。其实大概...

247100

扫码关注云+社区

领取腾讯云代金券