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

news2024/9/29 11:35:42

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逃逸攻击的防御策略。

目录

1  绪论

1.1  背景介绍

1.2  研究意义

1.3  研究现状

1.4  本文所做工作

1.5  文章结构


1  绪论

在互联网技术飞速发展的现代社会,互联网的规模正在快速增长,接入互联网的计算机也越来越多。对于个人计算机用户乃至企业、政府计算机用户,其信息安全问题也逐渐成为计算机互联网领域中的研究热点。浏览器作为接入互联网的窗口应用,其本身安全问题及其插件安全问题也备受重视。Java Applet作为浏览器的一种插件,在丰富浏览器功能、提升用户体验的同时,也引入了一些值得关注的安全问题。本文着眼于JRE漏洞引发的安全攻防问题,针对几种特定类型的JRE漏洞展开分析、研究与挖掘。本章内容将简要介绍JVM逃逸技术, JRE漏洞研究背景、意义、现状,文章组织结构等等。

1.1  背景介绍

Java语言是世界上最为流行的面向对象编程语言之一,被广泛应用于Web开发、嵌入式设备、手机应用(如BlackBerry和Android)、个人计算机乃至大型服务器之中。作为Java开发人员会经常接触到JDK、JRE和JVM等概念。JDK是Java Development Kit的缩写,意为Java语言开发工具,作为Java程序的开发人员,是必须安装这个软件包的。而作为仅需要运行Java程序的用户,只需安装JRE (即Java Runtime Environment, Java运行时环境), JVM (Java Virtual Machine)代表 Java 虚拟机,是 JRE 的重要组成部件,主要用于解释和执行 Java字节码文件。JDK以及JRE几经变迁,目前的主流版本是由Oracle公司提供的。除了官方提供的之外,还有开源的OpenJDK项目1,以及Apple、 IBM等公司基于官方JRE开发的一些JRE程序。由于Java语言优越的跨平台特性,Windows、Linux/Unix、 Mac OS等几乎所有主流操作系统都可以找到适合的JRE版本。

在HTML语言中,有一个"applet"标签2,用于指定所要运行的Java Applet小程序,现在几乎所有常见的浏览器都会支持这个标签。Applet由Java语言编写,其main class需要继承java.applet.Applet类。由于Java语言功能上的丰富性,所编写的Java Applet程序可以极大地丰富Web页面的功能,提供更好的用户体验。不过,在Web技术飞速发展的现代, Adobe Flash, Microsoft Sliverlight等技术的出现,逐渐替代了Java Applet技术在Web页面中的应用。但大多数浏览器仍然支持 Java Applet扩展,在 html文件中写入如下代码:

<applet code=”MyApplet.class”></applet>

用户访问这个页面的时候,会将Java Applet程序MyApplet.class下载到本地,由本地的 JVM 加载并执行。

这样以来,对于攻击者而言,便产生了一个攻击面(Attack Surface):攻击者利用JRE漏洞,编写恶意的Java Applet,挂载到Web页面中,将URL发送给受害者;若安装了JRE的受害者访问了恶意页面,便执行了Applet,触发本地JRE漏洞,发起了逃逸出本地JVM而针对操作系统的攻击,从而使受害者的计算机被恶意控制,造成远程代码执行、隐私信息泄露等安全问题。本文将这样一个过程称为“JVM逃逸”,其中利用的漏洞为“JRE漏洞”。

1.2  研究意义

近年来,以浏览器及其插件作为攻击面的安全事件不断增多,典型的安全问题包括Internet Explorer, FireFox等浏览器本身的漏洞(如处理JavaSeript代码不当而产生的Use-After-Free漏洞21)、Adobe Flash的解析漏洞、JRE漏洞等等。在众多安全事件中,利用JRE漏洞发起的 Java Applet 攻击事件近年来占据了重要地位。2011年的调查数据显示, 37%的Windows操作系统攻击事件是由JRE漏洞引起的,如图1-1所示。

这些漏洞在利用手段上有着较大的相似性,然而在利用技术门槛上却有所不同。为了对抗漏洞利用技术,现如今的操作系统如Windows 7、 Windows 8都开启了ASLR和DEP等防御功能3.如图1-2所示,攻击者在挖掘到浏览器或其插件的漏洞之后,还需编写exploit代码绕过安全防护机制,这样就大大提升了攻击技术的门槛。

JRE中包含的原生API包括用Java语言编写的Java API和使用C/C++编写的原生层API (作为编译好的动态链接库而存在于JRE中)。对应的, JRE漏洞可分为Java API设计缺陷和Java原生层漏洞,其中Java API设计缺陷较其他类型漏洞更易于利用,利用代码更容易变种,同时可以绕过ASLR和DEP等底层防护手段。这就很好地解释了图1-1中出现的现象,也从侧面反映了JRE漏洞的分析与研究在近几年成为研究热点。

由上述内容可知, JRE漏洞由于其特殊的利用特性,成为无论攻击者还是安全研究人员所关注的热点问题。研究JRE漏洞的成因、特点, JVM逃逸技术中的攻防手段,以及从安全角度出发的JRE漏洞挖掘技术,显得十分有研究价值。

1.3  研究现状

在本课题领域,国内外的研究方向更偏向于 JVM 逃逸手段也就是 JRE 漏洞的利用技术,例如2013年9月份的Syscan360安全会议上的议题【6】,就主要介绍了利用Java语言的特性配合JRE漏洞绕过Windows 7下ASLR以及DEP的一些方法。而对于JRE漏洞挖掘的研究,多集中于Java API设计缺陷的挖掘。波兰安全公司SE曾发布一份技术白皮书【7】,系统地介绍了JRE安全机制与Java API设计缺陷挖掘与利用技术。而Java原生层漏洞相对来说原理复杂,较难分析利用,一直是国内外Java安全研究的难点。再者,传统的JRE漏洞挖掘方法多采用静态源代码审计的白盒测试方法,颇费人力。对于Java原生层漏洞挖掘,一直缺乏一种自动化的挖掘方法。
针对上述研究现状,本文针对两种不同类型的JRE漏洞,分别制定漏洞挖掘方案,在针对Java原生层漏洞的挖掘工作中,本文引入符号执行技术,旨在提高漏洞挖掘的自动化程度,尽可能减少安全人员的分析工作,提高漏洞挖掘效率。在JVM逃逸手段的研究上,本文将集中于杀毒软件等防御工程的脆弱性,诸如ASLR和DEP这类操作系统级别的安全防护则不是本文讨论范围内的重点。

1.4  本文所做工作

本文的主要研究内容包括 Java安全机制探究, JRE漏洞分析, JRE漏洞挖掘技术与实现,JRE 漏洞的利用与防范。本文所做的研究工作如下:

1.探究Java安全机制, JRE沙箱组成部件,总结各关键组件特性,挖掘其潜在脆弱点。

2.总结现有JRE漏洞类型并作分类,对每种分类中具备代表性的漏洞,基于公开的PoC源代码进行分析与调研。

3.针对不同类型的JRE漏洞,制定漏洞挖掘方案,选择对应的漏洞挖掘技术,结合源代码审计与基于符号执行的灰盒测试技术进行漏洞挖掘工作,最终发现数个JRE安全问题,并给出成果展示。

4.分别从攻击者和防御者两种视角,分析并总结现有的JVM逃逸攻击与防御手段,研究并发现主流杀毒软件的脆弱性,并给出多维防御方案。

1.5  文章结构

本文共分为六章,各章标题及内容概要如下所示:

第一章:绪论。简要介绍本文内容相关的基本知识背景,解释JVM逃逸与JRE漏洞概念,给出JRE漏洞问题的研究意义与研究现状,并简要概括本文所做工作。

第二章:Java安全机制研究。根据Java安全机制的几大重要模块,分别深入剖析其安全逻辑设计的特点以及潜在安全问题,为后续内容提供知识背景。

第三章:JRE漏洞分析。针对第二章中的内容总结出JRE的潜在缺陷点,结合现有已知的JRE漏洞作分类研究,从Java API设计缺陷、Java原生层漏洞、类型混淆以及自签名问题等角度,深入分析对应漏洞类型的PoC代码,并分别总结其漏洞特征。

第四章:JRE漏洞挖掘研究。基于第三章的工作展开JRE漏洞挖掘工作,针对Java API设计缺陷型漏洞和Java原生层漏洞分别给出不同的漏洞挖掘解决方案,并通过白盒审计与灰盒测试实验发现数个JRE安全问题,最终给出分析。

第五章:JVM逃逸的利用与防范。分别从攻击者和防御者的角度,结合漏洞挖掘工作中的研究,指出当前杀毒软件防御策略的薄弱环节,总结漏洞利用技巧。最后分析和比对各软件厂商的防范措施,总结其优劣并提出防御策略。

第六章:总结与展望。总结本文出现的关键内容,根据当前研究形势提出未来的研究方向和策略。

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

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

相关文章

Maven导入包

有些时候maven导入不进去包&#xff0c;这个时候可以去直接去maven仓库找到你需要的包 https://mvnrepository.com/ 在自己本地输入命令 &#xff08;这只是一个样例&#xff0c;请根据自己需要的包参考&#xff09; mvn install:install-file -Dfile"C:/Users//Downloa…

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

目录 一、软件简介 二、软件下载 一、软件简介 Audition软件是一款由Adobe公司开发的音频处理软件&#xff0c;主要用于音频录制、编辑、混音和音效处理。它提供了丰富的工具和功能&#xff0c;帮助用户处理各种音频需求&#xff0c;如制作音乐、广播节目、音频纪录片等。 A…

2023年新型智慧城市顶层设计规划解决方案86页[PPT]

导读&#xff1a;原文《2023年新型智慧城市顶层设计规划解决方案86页[PPT]》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 内容简介 智慧城市顶层设计&整体架…

电商PC端设计之店招

设计总资料&#xff1a; 1、裂帛 2、小狗电器 3、店招120PX&#xff0c;导航栏30px 4、毕业那些年的店招 5、操作实例&#xff0c;建立120PX的画布 6、产品多的时候要加搜索框 7、产品店招在左边&#xff0c;主推产品在右边 8、贝蒂佩琪 实战案例 1、利用画布调整图像大小 2、…

Elasticsearch实战(二):Springboot实现Elasticsearch自动汉字、拼音补全,Springboot实现自动拼写纠错

文章目录 系列文章索引一、安装ik拼音分词器插件1、下载地址2、下载安装3、属性大全 二、自定义语料库1、新增索引映射2、批量新增文档3、查询结果 三、产品搜索与汉字、拼音自动补全1、概念2、java实现汉字自动补全3、java实现拼音自动补全 四、语言处理&#xff08;拼写纠错&…

设计模式第八讲:常见重构技巧 - 去除多余的if else

设计模式第八讲&#xff1a;常见重构技巧 - 去除多余的if else 最为常见的是代码中使用很多的if/else&#xff0c;或者switch/case&#xff1b;如何重构呢&#xff1f;方法特别多&#xff0c;本文是设计模式第八讲&#xff0c;带你学习其中的技巧。 文章目录 设计模式第八讲&am…

Kafka核心原理第一弹——更新中

架构原理 一、高性能读写架构原理——顺序写零拷贝 首先了解两个专业术语&#xff0c;研究kafka这个东西&#xff0c;你必须得搞清楚这两个概念&#xff0c;吞吐量&#xff0c;延迟。 写数据请求发送给kafka一直到他处理成功&#xff0c;你认为写请求成功&#xff0c;假设是…

EL表达式简述

${xxxx} EL表达式可以获取四个请求域对象-->注意不是直接获取,而是通过隐藏域对象获取,或者说通过pageContext对象获取,直接是取不到的,EL只认识pageContext的,和四个隐藏域对象,pageContext用来获取其他8个内置对象,而隐藏域对象用来通过name获取SetAttribute里的value值,…

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

目录 一、软件简介 二、软件下载 一、软件简介 Unity3D是一款全球知名的游戏开发引擎&#xff0c;由Unity Technologies公司开发。它提供了一个跨平台、多功能的开发环境&#xff0c;支持创建2D和3D游戏、交互式应用、虚拟现实、增强现实等多种类型的应用程序。以下是Unity3D…

软考A计划-系统集成项目管理工程师-小抄手册(共25章节)-上

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

【sgOvalMenu】自定义组件:椭圆形菜单,菜单按钮可以随着椭圆轨迹进行循环运动

特性&#xff1a; 可以设置椭圆轨迹宽度、高度 可以设置椭圆轨迹旋转角度&#xff0c;并且自动纠偏菜单文字水平状态可以设置运动轨迹坐标移动步长可以设置运动轨迹改变频率可以设置顺时针还是逆时针旋转 sgOvalMenu源码 <template><div :class"$options.name&…

Nacos集群

需要与Nginx配合。 这是使用三个Nacos来搭建集群。 创建mysql数据库nacos。 配置Nacos 进入nacos的conf目录&#xff0c;修改配置文件cluster.conf.example&#xff0c;重命名为cluster.conf。 在cluster.conf文件的最后加上&#xff1a; #it is ip #example 127.0.0.1:8…

【滑动窗口】leetcode209:长度最小的子数组

一.题目描述 长度最小的子数组 二.思路分析 题目要求&#xff1a;找出长度最小的符合要求的连续子数组&#xff0c;这个要求就是子数组的元素之和大于等于target。 如何确定一个连续的子数组&#xff1f;确定它的左右边界即可。如此一来&#xff0c;我们最先想到的就是暴力枚…

小研究 - Android 字节码动态分析分布式框架(五)

安卓平台是个多进程同时运行的系统&#xff0c;它还缺少合适的动态分析接口。因此&#xff0c;在安卓平台上进行全面的动态分析具有高难度和挑战性。已有的研究大多是针对一些安全问题的分析方法或者框架&#xff0c;无法为实现更加灵活、通用的动态分析工具的开发提供支持。此…

项目---日志系统

目录 项目系统开发环境核心技术日志系统介绍为什么需要日志系统? 日志系统框架设计日志系统模块划分代码实现通用工具实现日志等级模块实现日志消息模块实现格式化模块实现落地模块实现日志器模块同步日志器异步日志器缓冲区实现异步工作器实现 回归异步日志器模块建造者模式日…

用大白话来讲讲多线程的知识架构

感觉多线程的知识又多又杂&#xff0c;自从接触java&#xff0c;就在一遍一遍捋脉络和深入学习。现在将这次的学习成果展示如下。 什么是多线程&#xff1f; 操作系统运行一个程序&#xff0c;就是一个线程。同时运行多个程序&#xff0c;就是多线程。即在同一时间&#xff0…

C语言练习4(巩固提升)

C语言练习4 选择题 前言 面对复杂变化的世界&#xff0c;人类社会向何处去&#xff1f;亚洲前途在哪里&#xff1f;我认为&#xff0c;回答这些时代之问&#xff0c;我们要不畏浮云遮望眼&#xff0c;善于拨云见日&#xff0c;把握历史规律&#xff0c;认清世界大势。 选择题 …

设计模式--适配器模式(Adapter Pattern)

一、什么是适配器模式&#xff08;Adapter Pattern&#xff09; 适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许将一个类的接口转换成客户端所期望的另一个接口。适配器模式主要用于解决不兼容接口之间的问题&#xff0c;使得原本…

小研究 - Java虚拟机性能及关键技术分析

利用specJVM98和Java Grande Forum Benchmark suite Benchmark集合对SJVM、IntelORP,Kaffe3种Java虚拟机进行系统测试。在对测试结果进行系统分析的基础上&#xff0c;比较了不同JVM实现对性能的影响和JVM中关键模块对JVM性能的影响&#xff0c;并提出了提高JVM性能的一些展望。…

[Go版]算法通关村第十四关白银——堆高效解决的经典问题(在数组找第K大的元素、堆排序、合并K个排序链表)

目录 题目&#xff1a;在数组中找第K大的元素解法1&#xff1a;维护长度为k的最小堆&#xff0c;遍历n-k个元素&#xff0c;逐一和堆顶值对比后&#xff0c;和堆顶交换&#xff0c;最后返回堆顶复杂度&#xff1a;时间复杂度 O ( k ( n − k ) l o g k ) O(k(n-k)logk) O(k(n−…