小研究 - JVM 逃逸技术与 JRE 漏洞挖掘研究(一)
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逃逸的利用与防范。分别从攻击者和防御者的角度,结合漏洞挖掘工作中的研究,指出当前杀毒软件防御策略的薄弱环节,总结漏洞利用技巧。最后分析和比对各软件厂商的防范措施,总结其优劣并提出防御策略。
第六章:总结与展望。总结本文出现的关键内容,根据当前研究形势提出未来的研究方向和策略。
相关文章:
小研究 - JVM 逃逸技术与 JRE 漏洞挖掘研究(一)
Java语言是最为流行的面向对象编程语言之一, Java运行时环境(JRE)拥有着非常大的用户群,其安全问题十分重要。近年来,由JRE漏洞引发的JVM逃逸攻击事件不断增多,对个人计算机安全造成了极大的威胁。研究JRE安…...
好用的可视化大屏适配方案
1、scale方案 优点:使用scale适配是最快且有效的(等比缩放) 缺点: 等比缩放时,项目的上下或者左右是肯定会有留白的 实现步骤 <div className"screen-wrapper"><div className"screen"…...
言有三新书出版,《深度学习之图像识别(全彩版)》上市发行,配套超详细的原理讲解与丰富的实战案例!...
各位同学,今天有三来发布新书了,名为《深度学习之图像识别:核心算法与实战案例(全彩版)》,本次书籍为我写作并出版的第6本书籍。 前言 2019年5月份我写作了《深度学习之图像识别:核心技术与案例…...
英特尔开始加码封装领域 | 百能云芯
在积极推进先进制程研发的同时,英特尔正在加大先进封装领域的投入。在这个背景下,该公司正在马来西亚槟城兴建一座全新的封装厂,以加强其在2.5D/3D封装布局领域的实力。据了解,英特尔计划到2025年前,将其最先进的3D Fo…...
基于大数据+django+mysql的学习资源推送系统的设计与实现(含报告+源码+指导)
本系统为了数据库结构的灵活性所以打算采用MySQL来设计数据库,而Python技术, B/S架构则保证了较高的平台适应性。文中主要是讲解了该系统的开发环境、要实现的基本功能和开发步骤,并主要讲述了系统设计方案的关键点、设计思想。 由于篇幅限制…...
CCF HPC China2023 | 盛大开幕,邀您关注澎峰科技
2023年8月24日,以“算力互联智领未来”为主题的第十九届全国高性能计算学术年会(CCF HPC China 2023)在青岛红岛国际会议展览中心拉开帷幕。特邀嘉宾涵盖行业大咖,主持阵容同样是“重量级”——来自国家并行计算机工程技术研究中心…...
【git进阶使用】 告别只会git clone 学会版本控制 ignore筛选 merge冲突等进阶操作
git使用大全 基本介绍git 快速上手一 环境安装(默认已安装)二 远程仓库克隆到本地1 进入rep文件夹目录2 复制远程仓库地址3 git clone克隆仓库内容到本地4 修改后版本控制4.1 修改文件4.2 git status查看版本库文件状态4.3 git add将文件加入版本库暂存区…...
【【萌新的STM32学习-16中断的基本介绍1】】
萌新的STM32学习-16中断的基本介绍1 中断 什么是中断 中断是打断CPU执行正常的程序,转而处理紧急程序,然后返回原暂停的程序继续执行,就叫中断 中断的作用 实时控制 : 就像对温度进行控制 故障控制 : 第一时间对突发情…...
ctfshow-红包题第二弹
0x00 前言 CTF 加解密合集CTF Web合集 0x01 题目 0x02 Write Up 同样,先看一下有没有注释的内容,可以看到有一个cmd的入参 执行之后可以看到文件代码,可以看到也是eval,但是中间对大部分的字符串都进行了过滤,留下了…...
C# winform中无标题栏窗口如何实现鼠标拖动?
文章目录 在C#中,可以通过重写窗体的鼠标事件来实现无标题栏窗体的拖动。 具体步骤如下: 禁用窗体的默认标题栏:在窗体属性中设置FormBorderStyle为None。 重写鼠标事件:在窗体类中重写MouseDown、MouseMove和MouseUp事件。 定义变量存储鼠标点击时的坐标。 在MouseDown事…...
【操作系统】各平台定时器粒度
文章目录 WindowsLinux Windows 在 Windows 操作系统中,定时器的精度取决于系统时钟的精度。通常情况下,Windows 系统时钟的精度为 15.6 毫秒(即每秒钟约 64 次时钟中断),因此定时器的最小精度也是 15.6 毫秒。但是&a…...
抽象又有点垃圾的JavaScript
常数的排序 let x 10;let y 20;let z;if (x < y) {z x;x y;y z;}console.log(x, y);//x 20 ,y 10 通过一个媒介来继承x的初始值,然后将y的值赋值给x,再把媒介z的值赋值给y,达到排序 一个可重复使用的排序程序 第一种 function s…...
【Spring Boot】使用Spring Boot进行transformer的部署与开发
Transformer是一个用于数据转换和处理的平台,使用Spring Boot可以方便地进行Transformer的部署与开发。 以下是使用Spring Boot进行Transformer部署与开发的步骤: 创建Spring Boot项目 可以使用Spring Initializr创建一个简单的Spring Boot项目。在创…...
Qt应用开发(基础篇)——富文本浏览器 QTextBrowser
一、前言 QTextBrowser类继承于QTextEdit,是一个具有超文本导航的富文本浏览器。 框架类 QFramehttps://blog.csdn.net/u014491932/article/details/132188655 滚屏区域基类 QAbstractScrollAreahttps://blog.csdn.net/u014491932/article/details/132245486 文…...
JDBC:更新数据库
JDBC:更新数据库 更新记录删除记录 为了更新数据库,您需要使用语句。但是,您不是调用executeQuery()方法,而是调用executeUpdate()方法。 可以对数据库执行两种类型的更新: 更新记录值删除记录 executeUpdate()方…...
如何自定义iview树形下拉内的内容
1.使用render函数给第一层父级定义 2. 使用树形结构中的render函数来定义子组件 renderContent(h, {root, node, data}) {return data.children.length0? h(span, {style: {display: inline-block,width: 400px,lineHeight: 32px}}, [h(span, [h(Icon, {type: ios-paper-outli…...
技术的巅峰演进:深入解析算力网络的多层次技术设计
在数字化时代的浪潮中,网络技术正以前所未有的速度演进,而算力网络作为其中的一颗明星,以其多层次的技术设计引领着未来的网络构架。本文将带您深入探索算力网络独特的技术之旅,从底层协议到分布式控制,为您呈现这一创…...
图像特征描述和人脸识别
CV_tutorial2 特征检测使用HOG实现行人检测Harris角点检测关键特征检测SIFT纹理特征 LBP算法 模板匹配人脸识别 特征检测 使用HOG实现行人检测 HOG方向梯度直方图 实现过程: 灰度化(为了去掉颜色、光照对形状的影响);采用Gamma校正法对输…...
浅谈Lua协程和函数的尾调用
前言 虽然不经常用到协程,但是也不能谈虎色变。同时,在有些场景,协程会起到一种不可比拟的作用。所以,了解它,对于一些功能,也会有独特的思路和想法。 协程 概念 关于进程和线程的概念就不多说。 那么…...
【VS Code插件开发】状态栏(五)
🐱 个人主页:不叫猫先生,公众号:前端舵手 🙋♂️ 作者简介:前端领域优质作者、阿里云专家博主,共同学习共同进步,一起加油呀! 📢 资料领取:前端…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...
