小研究 - JVM 逃逸技术与 JRE 漏洞挖掘研究(七)

news2024/11/16 7:56:50

Java语言是最为流行的面向对象编程语言之一, Java运行时环境(JRE)拥有着非常大的用户群,其安全问题十分重要。近年来,由JRE漏洞引发的JVM逃逸攻击事件不断增多,对个人计算机安全造成了极大的威胁。研究JRE安全机制、JRE漏洞及其挖掘、JVM逃逸攻防技术逐渐成为软件安全领域的热门研究方向。

针对Java层API与原生层API, JRE安全机制分别包括JRE沙箱与JVM 类型安全机制。本文针对JRE沙箱组件及其工作原理进行剖析,总结其脆弱点;分析调研JVM安全机制,提出其脆弱点在于Java原生层漏洞,为JRE漏洞挖掘工作提供理论基础。

对于JRE漏洞,本文进行漏洞分类研究,提取Java API设计缺陷、Java原生层漏洞两种JRE漏洞类型的典型漏洞进行分析,总结漏洞特征,为漏洞挖掘工作建立漏洞模型。

根据JRE漏洞分析中建立的漏洞模型,本文采用源代码审计的方法开展Java API设计缺陷类型的漏洞挖掘工作,发现了数个Oracle JRE、OpenJDK和Apple JRE 的 Java API 设计缺陷问题。在 Java原生层漏洞挖掘工作中,出于Java原生层漏洞的特殊性,本文基于程序分析领域的符号执行技术提出一种寄存器符号化监控方法,选取开源符号执行平台S2E作为漏洞挖掘工具,并且基于其实现了针对JRE原生层漏洞挖掘的辅助插件 SymJava 和 SymRegMonitor,基于 OpenJDK 和 Oracle JRE逆向代码进行源代码白盒审计并构建了用于进行漏洞挖掘的 Java 测试用例,最后对36个调用Java原生层API的Java测试用例进行实际测试发现了共计6 个 JRE原生层安全隐患,其中2 个可被攻击者恶意利用,并给出漏洞分析和 PoC。

针对 JVM 逃逸攻防问题,本文分别从攻击和防御角度,提出 JVM逃逸攻击的5 个关键元素,针对每个元素进行攻防技术研究,并通过绕过杀毒软件静态检测的实验证明了本文提出的 JVM 逃逸攻击技术。最后,本文从多角度给出JVM逃逸攻击的防御策略。

目录

5.1.3  杀毒软件静态检测绕过测试

5.1.4  序列化与反序列化

5.1.5  JRE Rootkit

5.1.6  社会工程学

5.2  JVM 逃逸攻击的防范

5.2.1 杀毒软件厂商角度

5.2.2  浏览器厂商角度

5.2.3  JRE 提供商角度

5.2.4  用户角度

5.3  本章小结

6  总结与展望

6.1  本文总结

6.2  研究展望


5.1.3  杀毒软件静态检测绕过测试

针对5.1.1 小节与5.1.2小节提出的杀毒软件静态检测绕过策略,本文选取了Microsoft Security Essential, Symantec Endpoint Protection, McAfee Total Protection, Avira Antivirus Premium四款杀毒软件进行测试,测试方法包括两种:针对exploit class文件的静态扫描(以下简称本地扫描),和远程访问包含exploit Applet的html页面(以下简称远程加载)。其中,本地扫描测试分别选用了十六进制加密和异或加密两种字符串混淆方法,远程加载则全部采用异或加密的方法。本实验选取的1day漏洞为CVE-2012-4681和CVE-2012-5076,实验环境为Windows 7 x64 Professional中文版, Oracle JRE 7 update 6,浏览器为Internet Explorer 8.本地扫描的测试结果如表5-3所示,远程加载的测试结果如表5-4所示。

 

5.1.4  序列化与反序列化

在Oracle JRE 7 update 10及其之后的版本中, JRE的主要提供商Oracle公司采取了一种click-and-play策略,也就是在执行Applet之前弹出安全警告对话框,把安全的决定权问题抛给了用户,也相应降低了JRE漏洞exploit的成功率。但国外的安全研究人员发现,这种click-and-play策略很快被发现存在漏洞,可以绕过这种click-and-play策略,绕过的关键技术在于Java的序列化与反序列化

Java程序在运行时会产生很多对象,不过这些对象的生命周期很短,随着程序的退出它们会消失掉,长时间不使用也会被JVM的垃圾回收机制回收掉。Java语言提供了序列化(Serialization)这样一种机制,用于将对象在JVM中的状态以字节码的形式保存在文件中,供长期使用。同样作为Java程序的Applet同样可以序列化,并且可以由浏览器加载。假设创建一个叫TestApplet的Applet类,将之序列化为本地文件的方法如表5-5所示。

新创建的TestApplet类的对象b将会被保存在文件TestApplet.ser中,而ser文件是可以由浏览器直接加载的,加载的 html 语句为:

<applet object='TestApplet.ser'><applet>

若用户访问该html页, ser文件会被下载到本地,由JVM自动反序列化(Deserialization)并作为一个对象执行。经过实际测试发现,以该种形式加载Applet,在Oracle JRE 7 update 10和update 11两个版本下,安全警告对话框不会弹出,而Applet可以直接执行。也就是说绕过了Oracle的click-and-play策略,不过之后的版本Oracle修补了这一安全问题。

5.1.5  JRE Rootkit

随着JVM逃逸攻击研究变得越来越热门,各种安全防护措施也不断地升级,这自然会让攻击者动了在 JRE 中植入 Rootkit 的想法。appsec-labs 的一篇博文讲解了如何在rt.jar包中植入恶意class,并提供了DEMO。文中提到了通过植入恶意class实施DNS欺骗,但是在测试过程中发现每次update都会将旧的rt.jar替换为新的,那么植入的Rootkit也随之被删除。因此本文提出劫持JRE update程序这一思路,来实现JRE Rootkit.

5.1.6  社会工程学

社会工程学主要体现在两个利用场景:一是利用JRE漏洞,二是不利用JRE漏洞而利用3.1.4中提到的自签名Applet.5.1.4小节提到,现在最新的JRE7版本都是有Applet 安全警告的类似click-and-play的策略,即使利用漏洞发起攻击,也要欺骗目标点击“运行”按钮。利用签名Applet的方式亦是如此。若要提高欺骗成功率,需要事先对Applet的应用场景进行统计调查。可基于如下两个目标进行调研:

1. 调查哪些类型的网站使用了 Applet 技术,其作用是什么:

2. 调查哪些网站是使用 Java语言编写的,其主要业务是什么。

5.2  JVM 逃逸攻击的防范

由前文内容可知,JVM 逃逸攻击已经成为国内外安全领域比较关注的一个问题,需要得到广泛关注。为了应对利用 JRE 漏洞发起的攻击,各大厂商纷纷提出自己的应对措施。针对JVM逃逸攻击的5要素:用户、浏览器、杀毒软件、本地 JRE、exploit 程序,本小节将分别介绍一些防御策略。

5.2.1 杀毒软件厂商角度

由5.1.3 中的杀毒软件绕过测试可知,对于Java API设计缺陷型漏洞,多数杀毒软件仍然是基于特征匹配的静态检测方法,而5.1.3小节也同时证明这种方法是可以被完美绕过的。针对这一点,本小节提出一种动态检测机制:即通过动态扫描JVM进程,找到方法调用栈,并监控是否有例如如下不安全的API被调用:

1. setSecurity Manager;

2. loadLibrary;

3. getSystemProperty/getSystemProperties.

其中第1 条是最为重要的,经过第三章中的 JRE 漏洞分析可知,Java API 设计缺陷的利用代码最终都需要调用setSecurityManager方法来关闭安全管理器,该方法是exploit代码逻辑的必经之路。若检测到这些不安全API执行时,由杀毒软件弹出警告对话框,提示用户正在遭受JVM 逃逸攻击。

5.2.2  浏览器厂商角度

浏览器是 JVM 逃逸攻击的重要环节, 目前多数主流浏览器厂商对于JRE 漏洞都采取了积极的防御措施,主要分为以下几种:

1.默认关闭Java Applet支持,若用户需要执行Applet需要进入浏览器的设置面板中自行开启,如 FireFox 浏览器等;

2. 加载 Java Applet时,检测当前系统中安装的JRE版本,若不是最新版,则弹出提示信息,建议用户更新 JRE,如 Internet Explorer 7;

3. 加载Java Applet时,检测当前系统中安装的JRE版本,若不是最新版,则弹出警告对话框,提示用户存在风险,如FireFox浏览器(图5-5所示);

4. 加载Java Applet时,检测当前系统中安装的JRE版本,若不是最新版,拒绝执行该Applet,弹出对话框建议用户去Java官方网站下载最新的JRE安装包来更新,如 Google 的Chrome 浏览器;

5.停止对Java Applet的支持,如Apple的Safari浏览器(最新版本又重新支持 Java Applet,并采取警告策略)。

5.2.3  JRE 提供商角度

本文调研的JRE提供商主要有开源项目OpenJDK、 Oracle和Apple三个,而Apple在最新的Mac OS x版本中移除了Apple JRE,若用户需要使用Java,则需要去Oracle官方网站下载对应版本的Oracle JRE。同时, Oracle对于Linux系统的JRE支持也做的比较完善,可见, Oracle提供的JRE是最为流行的JRE软件。作为JRE漏洞的根源, Oracle也逐渐重视起JRE的安全问题。在7update 10及其之后的版本, Oracle采取了以下两点安全策略:

1. 提高了安全等级的默认设置,将以往版本的“中”提升为“高”,也就是仅允许签名 Java Applet 执行

2.采用click-and-play策略。

5.2.4  用户角度

用户是JVM逃逸攻击中最重要的元素之一,考虑到Oracle JRE具备相当数量的装机量,其用户数目不容小视。除了软件安全策略如在操作系统中安装杀毒软件、使用安全性较高的浏览器如Chrome等之外,作为普通用户,要尽量做到以下的防御策略:

1. 提高安全意识,不要随便点击不可信的URL,看到签名Applet警告对话框,要注意识别证书内容,辨认证书是否是受信任机构颁发的;

2. 对于经常使用 Java 用户,要及时升级 JRE:

3. 对于不常用到Java的用户,由于Applet技术在Web中极少被用到,可以考虑在浏览器中关闭JRE插件,或者直接卸载JRE.

5.3  本章小结

本章分别从攻击和防御的角度,阐述了JVM逃逸攻击的利用技巧和防御策略。首先,本章提出JVM逃逸攻击的5个环节,和对应的5个重要元素:用户、浏览器、杀毒软件、本地 JRE、exploit 代码。在 JVM 逃逸攻击利用一节:本文提出一种绕过杀毒软件静态检测的exploit编写方法,通过对4款市场上流行的杀毒软件的测试,证明其静态检测策略的脆弱性;此外,本文还针对Java对象序列化与反序列化、JRE Rootkit、社会工程学方面展开讨论。在 JVM 逃逸攻击防御一节中,针对 JVM 逃逸攻击的5 个重要元素,本章分别从杀毒软件、浏览器、JRE 提供商和用户4 个角度,讨论研究其相应的防御措施,并给出自己的防御策略。

6  总结与展望

6.1  本文总结

Java语言作为一门非常流行的面向对象编程语言,被广泛应用于各领域的软件开发当中,相当数量的计算机都安装了JRE,其安全问题不言而喻。利用JRE漏洞发起的JVM逃逸攻击事件也在近年来不断增多。本文从安全角度出发,对JRE沙箱和JVM类型安全机制进行了调研,并对现有JRE漏洞进行了分类研究和PoC代码分析,总结出Java API设计缺陷(包括类型混淆)、Java原生层漏洞、自签名问题等JRE安全问题。针对Java API设计缺陷和Java原生层漏洞两种类型的漏洞,本文分别提出不同的漏洞挖掘方案,通过源代码白盒审计和基于符号执行的灰盒测试,发现了数个JRE安全问题。最后,本文从攻击和防御角度,提出JVM逃逸攻击的5个关键元素,针对每个元素进行攻防技术研究,并通过绕过杀毒软件静态检测的实验证明了本文提出的 JVM 逃逸攻击技术。本文所做研究工作列举如下:

1. 研究总结 JRE 沙箱机制和 JVM 类型安全机制,指出其脆弱点;

2. 分析不同类型JRE漏洞的特征,选取三类漏洞:Java API设计缺陷、Java原生层漏洞、类型混淆的典型CVE漏洞,对其PoC代码进行分析研究;指出Oracle JRE 存在的 Applet 自签名问题

3.针对Java API设计缺陷和Java原生层漏洞,分别提出不同的漏洞挖掘方案,结合源代码审计、逆向工程和基于符号执行的灰盒测试等技术,通过研究和实验发现数个JRE安全问题,其中有多个可以被攻击者恶意利用;

4. 提出JVM逃逸攻击的5个关键元素,从攻击和防御的角度,提出JVM逃逸技术和防御策略。

6.2  研究展望

随着Java API设计缺陷的不断修复, Java原生层漏洞挖掘与利用正在成为未来新的热门研究方向。在未来对JRE安全问题的研究中,我们也会把工作重心放在Native Code的漏洞挖掘上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/934034.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小研究 - Java虚拟机内存管理分析

讨论了&#xff2a;&#xff41;&#xff56;&#xff41;关键技术组成&#xff0c;深入介绍了&#xff2a;&#xff41;&#xff56;&#xff41;虚拟机的体系结构&#xff0c;分析了虚拟机中内存管理的垃圾回收机制。同时&#xff0c;对现有的一些流行垃圾回收算法进行了深入…

5年经验之谈 —— APP和WEB的测试区别

在功能测试时&#xff0c;要考虑手机应用的特性&#xff1a; 1&#xff09;手机屏幕尺寸偏小&#xff0c;所以手机应用一般就占满了全屏&#xff0c;因此要考虑手机在前后端切换时被测试应用在资源使用时的优先级变化情况&#xff1b;还要考虑手机横竖屏切换时的测试 2&#xf…

yolov5中添加ShuffleAttention注意力机制

ShuffleAttention注意力机制简介 关于ShuffleAttention注意力机制的原理这里不再详细解释.论文参考如下链接here   yolov5中添加注意力机制 注意力机制分为接收通道数和不接受通道数两种。这次属于接受通道数注意力机制,这种注意力机制由于有通道数要求,所示我们添加的时候…

引导滤波(guided filter)与快速引导滤波(fast guided filter)理解

最近在学习图片的滤波和去噪的相关知识&#xff0c;查阅了一些资料参考了一些博客&#xff0c;这里做一个整合&#xff0b;理解。参考的博客资料在文末。 引入普通滤波的概念 假设输入图像为p&#xff0c;滤波窗口为wk,经过滤波后的输出图像为q,那么q图的第i个像素是由输入图p中…

Vue2向Vue3过度核心技术声明式导航

目录 1 声明式导航-导航链接1.需求2.解决方案3.通过router-link自带的两个样式进行高亮4.总结 2 声明式导航-两个类名1.router-link-active2.router-link-exact-active3.在地址栏中输入二级路由查看类名的添加4.总结 3 声明式导航-自定义类名1.问题2.解决方案3.代码演示4.总结 …

OpenSIPS 通话中 UPDATE 请求导致没有声音问题

文章目录 1. 问题现象2. 抓包排查3. 问题分析及解决方案 1. 问题现象 在 SIP 应用的开发中&#xff0c;通话一端听不到声音是比较常见的问题。一般来说&#xff0c;没有声音意味着 RTP 传输存在障碍&#xff0c;追根究底就是网络不通或者端口未开放等原因。但在实践中&#xf…

射频滤波器分析报告(声表面波滤波器/BAW/超声)

目录 一、射频芯片技术与产品概述二、5G时代滤波器需求潜力巨大三、全球滤波器市场现状3.1 基站3.2 手机端 四、射频芯片国内发展情况4.1 国内射频芯片概况4.2 国内射频滤波器发展情况4.3 BAW的重重困难4.4 终端厂商的参与 五 机会分析5.1 5G通信5.2 卫星通信5.3 雷达行业5.4 新…

Cinema 4D软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 Cinema 4D&#xff08;简称C4D&#xff09;是由德国Maxon Computer公司开发的一款三维动画渲染和建模软件&#xff0c;广泛应用于影视、广告、工业设计等领域。C4D因其高效率、易用性和强大的功能而受到广大设计师和艺术家的青睐…

第四章文件管理

0.初识文件管理 一个文件有哪些属性?文件名:由创建文件的用户决定文件名&#xff0c;主要是为了方便用户找到文件&#xff0c;同一目录下不允许有重名文件。 标识符:一个系统内的各文件标识符唯一&#xff0c;对用户来说毫无可读性,因此标识符只是操作系统用于区分各个文件的一…

pandas-03-组合连接数据

采集的数据存储后通常会分为多个文件或数据库&#xff0c;如何将这些文件按需拼接&#xff0c;或按键进行连接十分重要。这节将介绍数据索引的复杂操作如分层索引&#xff0c;stack,unstack,seet_index,reset_index等帮助重构数据&#xff0c;数据的拼接如merge,join,concat,co…

pandas数据分析——groupby得到分组后的数据

groupbyagg分组聚合对数据字段进行合并拼接 Pandas怎样实现groupby聚合后字符串列的合并&#xff08;四十&#xff09; groupby得到分组后的数据 pandas—groupby如何得到分组里的数据 date_range补齐缺失日期 在处理时间序列的数据中&#xff0c;有时候会遇到有些日期的数…

python编程环境使用技巧3-程序打包pyinstaller

前言 在Python中&#xff0c;打包指的是将Python代码和相关资源&#xff08;如配置文件、图像等&#xff09;整合到一个可执行的文件或安装包中&#xff0c;以便于在其他环境中使用。 下面是使用pyinstaller进行打包的简要步骤&#xff1a; 1-安装pyinstaller&#xff1a;在命…

python之OCR文字识别

将图片翻译成文字一般被称为光学文字识别&#xff08;Optical Character Recognition&#xff0c;OCR&#xff09;。可以实现OCR 的底层库并不多&#xff0c;目前很多库都是使用共同的几个底层OCR 库&#xff0c;或者是在上面进行定制。 方法一&#xff1a; 使用easyocr模块 …

Redis三种特殊数据类型

Redis三种特殊数据类型 geospatial 地理位置 Redis 地理空间数据类型简介 Redis 地理空间索引允许您存储坐标并搜索它们。 此数据结构可用于查找给定半径或边界框内的邻近点。 基本命令 GEOADD 将位置添加到给定的地理空间索引&#xff08;请注意&#xff0c;使用此命令&a…

为什么物联网和端点安全需要细化

组织和个人越来越关心&#xff1a;物联网 ( IoT ) 的激增以及这些设备创建的无数端点。预计到 2025 年将有 750 亿个物联网设备投入使用&#xff0c;确保这些设备的安全已经至关重要。 2019 年生产的设备预期寿命只有五年&#xff0c;现在存在大量制造商在生产过程中无法预见的…

ChatGPT在高等教育中的应用利弊探讨

​人工智能在教育领域的应用日益广泛。2022年11月OpenAI开发的聊天机器人ChatGPT在全球范围内流传开来&#xff0c;其中用户数量最多的国家是美国(15.22%)。由于ChatGPT应用广泛&#xff0c;具有类似人类回答问题的能力&#xff0c;它正在成为许多学生和教育工作者的可信赖伙伴…

python编程环境使用技巧-任务1-pip包管理工具

概要 任务1-pip包管理工具 pip是Python的包管理工具&#xff0c;它用于安装、升级和管理Python的第三方库以及它们的依赖关系。 在命令提示符或终端窗口中&#xff0c;可以使用以下常用的pip命令&#xff1a; 安装包&#xff1a;pip install package_name。它会自动下载并安…

开源在大数据和分析中的角色

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

STM32开发 | 移远4G-Cat.1模组EC200N-CN开发

一、硬件说明 1、引脚分配图 文章来源地址https://www.yii666.com/blog/326636.html文章来源地址:https://www.yii666.com/blog/326636.html 2、常用引脚说明 模块输入电源 引脚名描述VBAT_BB模块基带电源&#xff08;Vnom 3.8 V&#xff09;VBAT_RF模块射频电源&#xff0…

SQL Server软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 SQL Server是一种关系型数据库管理系统&#xff0c;由美国微软公司开发。它被设计用于存储、管理和查询数据&#xff0c;被广泛应用于企业级应用、数据仓库和电子商务等场景。 以下是SQL Server软件的主要特点和功能&#xff1…