一种针对JavaScript引擎JIT编译器的模糊测试方法.docx
《一种针对JavaScript引擎JIT编译器的模糊测试方法.docx》由会员分享,可在线阅读,更多相关《一种针对JavaScript引擎JIT编译器的模糊测试方法.docx(13页珍藏版)》请在第壹文秘上搜索。
1、Web浏览器安全是用户在网络环境中至关重要的一环,而JaVaSCriPt引擎是浏览器中的重要组件,攻击者可以通过钓鱼网页轻易地让用户触发JavaScript引擎漏洞。JaVaSCriPt引擎又是内存危险的,触发漏洞后攻击者可以构造特殊的原语来实现内存的任意读写,从而控制被攻击者的设备.JavaScript引擎漏洞在近几年频繁出现,伴随的利用脚本都仅仅需要远程浏览器访问,范围圈盖WindOWs、MaCOS、iOS、AndrOid各种操作系统,故JaVaSeriPt引擎的安全问题已经是安全研究的重点对象。近几年来,JavaScript引擎漏洞中JIT编译器的漏洞占据了越来越大的比重.JIT编译器,
2、全称(JUStTn-Time)是一种程序语言提高运行效率的方法。如图1所示,JavaScript引擎解糅执行JavaScript的流程为:先通过词法和语法分析将JavaScript脚本转化为AST树,然后编译为中间语言字节码,接着进行逐步解糅执行,当执行的过程出现多次循环或者多次函数调用时,JIT编译器会将该部分字节码重新编译,通过编译优化提升运行效率,圾终转化为符合操作系统的机蹲码并执行。H1.IwiMfJavaScriptMaJ1.T优化阶段,J1.T会将优化拆分成为多个步骤(如常数折段、循环不变量提升等),这些步骤即为每一个具体的JIT优化阶段.JIT优化时会将需要优化的代码进行分析,当
3、其满足优化阶段的条件时,进行优化。J1.T编译器漏洞,主耍包含的是JIT优化相关的漏洞,优化漏洞通常在J1.T编译优化过程中利用错误预测或绕过检查而达到利用。其中包含绕过边界检查,如CVE-2015-0817、CYE-2017-2547和CYE-2018-0769:绕过类型检查,如CYE-2017-11802、CYE-2018-17163和CvE-2018-4233;以及各类其他类型漏洞。模树测试是一种自动化漏涧挖掘技术。尤其在针时浏览器引擎这类史杂的系统时,模糊测试相比代码审计等其他方式有着更高的挖掘漏洞效率。其核心思想是将随机生成的输入重史提供给应用程序,然后在处理输入直至程序退出期间,监
4、视程序是否出现错误情况。模糊测忒主要分为两类,基于生成的方法和基于变异的方法。分述如卜丁基丁生成的模糊测试方法,每个输入文件都是从头开始生成的,通常遵循一组预定义的规则。该规则将是上卜.文无关并会限定所有输入的集合。在生成的过程中,通过随机选择实现随机生成.基丁变异的模糊测试方法,是从一组己知良好的种子文件开始,然后以随机方式对它们进行变异。可能的变异包含比特和字节翻转、递增和递减整数值、插入预定义的特殊整数和字符申值等.在模糊测试程序运行后便会不断生成测限样本,让目标程序执行,获取执行结果并统计。衡量模糊测成对目标程序漏洞挖掘的进度,通常使用的是覆盖率指标.覆盖率是通过桩来计算的,林存在于目
5、标程序的分支跳转和函数调用处,通常都是在编译目标程序时由编译器完成插桩工作.每次执行目标程序后,模糊测式工具可以获得执行过程中抵达的桃信息,计算抵达过的桩数量相对于总数的占比,即为覆盖率指标。为能尽快提高罹盖率,提出了基年盖率为导向的模糊测试方法,当样本抵达了新的枇,则将其确定为“有趣”的样本保留,在未来继续对其进行变异,如此往熨,逐渐遍历系统的所有空间0O1.研究现状在现今的对JaVaSCriPt引擎的模树测试工具中,有基于规则生成的,也有基丁变异生成的,本节会介绍当今主流的几款针对JaVaSCriPt引擎的模糊测试工具,并分析其使用的模糊测试技术。1.1 CodeAIchemist这是一款
6、基于语料库的牛成模糊测试工具,从JaVaSCriPt种子文件中分解出代码单元片段,对其进行变量重命名、数据流分析、类型分析后并放入代码块池中,然后对代码块池中的片段进行随机选择,组合生成JavaScript测试样本。COdeAIChemiSt在组合代码片段时,会考虑上下文约束,从符合变量类型和数属的代码片段中随机选择。该方法成功提高了模糊测试样本的成功率。1.2 Fuzzi1.1.i这是一款基于中间语言的模糊测试工具,Fuzzi1.1.i定义了一种新的中间语言FUZZI1.并在其上进行生成和变异,在组合了一系列中间语言后,统一将其提升为JaVaSeriPt测试样本。提升过程时基于上卜.文和类型
7、系统,测试样本有着较高的JaVaSCriPt语义正确性,并且变异过程是基于覆盖率导向的,可以达到较高的覆盖率。1.3 DIE这是一款基于类型语法树的变异模糊测试工具,将JaVaSCriPt种子文件转为语法树,然后通过类型分析,产生包含类型标识的语法树(TypedAST)。DIE基于类型语法树并保留种子文件结构和类型特征进行变异,优质的样本对于DIE非常重要,故其选择大量以往的JavaScript崩溃样本.1.4 分析时丁现今针对JaVaSCriP1.引擎的模糊测试工具而言,测试样本的成功率和覆盖率是重要的衡量指标。对于JaVaSCriPt引擎中的Jrr编译器,测试样本成功率和覆盖率同样是衡是模
8、糊测武性能的重耍指标,其中测试样本成功率指成功进行JIT优化并执行优化代码的样本的比例,而覆盖率指J1.T编译器部分的覆盖率。当今针对JaVaSCriPt引擎的模糊测试工具对J1.T引擎的测试样本成功率不高。原因为:(I)JIT引擎需要特殊的条件进行触发,并不是所有测试样本都会触发J1.T优化:(2)JIT代码会出现优化退出的情况,而以一个会产生优化退出的样木作为种子文件时,会产生许多不成功的测试样本:(3)生.成过长的样本会影响J1.T的运行时间而导致超时。当今针对JaVasCriPt引擎的模糊测试工具对Jrr引擎的覆盖率也不高。原因为:(I)需要拥有优质的J1.T种子文件作为变异样本:(2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一种 针对 JavaScript 引擎 JIT 编译器 模糊 测试 方法
![提示](https://www.1wenmi.com/images/bang_tan.gif)