JavaScript引擎漏洞检测方法综述
林宏阳,彭建山,赵世斌,朱俊虎,许
航
数字工程与先进计算国家重点实验室,郑州450002
摘要:由于语言特性导致的JavaScript引擎漏洞是当今应用软件软件安全的重要威胁之一,攻击者通常间接利用
JavaScript引擎漏洞造成远程命令执行,获得系统的控制权。介绍了引擎的基本信息,对引擎中经常出现的漏洞进行了分类,分别综述了静态和动态分析检测的基本步骤和发展脉络,提出了针对JavaScript引擎漏洞的检测基本框架,讨论了制约检测效率瓶颈问题以及可能的解决方法,结合最新的技术应用指出了未来的发展趋势和亟待解决的问题。关键词:JavaScript引擎漏洞检测;类型混淆;静态分析;模糊测试文献标志码:A中图分类号:TP311doi:10.3778/j.issn.1002-8331.1811-0174林宏阳,彭建山,赵世斌,等.JavaScript引擎漏洞检测方法综述.计算机工程与应用,2019,55(11):16-24.
LINHongyang,PENGJianshan,ZHAOShibin,etal.SurveyonJavaScriptenginevulnerabilitydetection.ComputerEngineeringandApplications,2019,55(11):16-24.
SurveyonJavaScriptEngineVulnerabilityDetection
LINHongyang,PENGJianshan,ZHAOShibin,ZHUJunhu,XUHang
StateKeyLaboratoryofMathematicalEngineeringandAdvancedComputing,Zhengzhou450002,China
Abstract:JavaScriptenginevulnerabilitiescausedbylanguagefeaturesisoneoftheimportantthreatstothesecurityoftoday’ssoftware.AttackersoftenuseJavaScriptenginevulnerabilitiestodemonstrateremotecodeexecutionandgaincontrollabilityoftheoperatingsystem.ThispaperintroducesthebasicinformationoftheJavaScriptengine,classifiesthevulnerabilitiesthatoftenappearintheengine,andsummarizesthebasicstepsanddevelopmentofstaticanddynamicanalysismethods.ThenitproposesthebasicframeworkfordetectingvulnerabilitiesinJavaScriptengines,anddiscussesthedetectionefficiency,bottlenecksandpossiblesolutions.Atlast,itpointsoutfuturetrendsandsomeissues.Keywords:JavaScriptenginevulnerabilitydetection;typeconfusion;staticanalysis;fuzzing
1引言
55个高危漏洞。这些高危漏洞会破坏引擎原本安全的JavaScript引擎是用于处理JavaScript脚本的虚拟
内存状态。攻击者能修改关键数据劫持程序的控制流,机,是浏览器不可或缺的重要组成要素。JavaScript引最后能获得运行该引擎系统的控制权。目前大量软件擎具有功能结构复杂、逻辑繁琐、代码量大的特点。对已内置JavaScript引擎,引擎漏洞已经成为网络信息系于引擎开发人员而言,在进行代码开发的同时,很难为统安全的严重威胁。
其提供完善的保护机制。由设计缺陷和实现不正确引与其他普通软件的漏洞相比,JavaScript引擎的漏起的逻辑问题会导致内置这些JavaScript引擎的程序运洞具有分析复杂、难以调试、攻击效果明显等特征。目行错误甚至崩溃,甚至被攻击者恶意利用来执行远程命前,JavaScript引擎漏洞检测主要存在两种方法,一种是令。目前,Windows,Linux,Android和IOS等主流操作基于静态代码分析的检测方法,另一种是基于动态程序系统中自带浏览器的JavaScript引擎漏洞频繁出现[1]。执行的检测方法。基于静态代码分析的检测方法主要2016年,人们在主流的JavaScript引擎中发现了27个高针对JavaScript引擎中普遍存在的逻辑问题进行程序分危漏洞,2017年,发现了69个高危漏洞,2018年发现了
析和审计;基于动态程序执行的检测方法主要通过对程
基金项目:国家自然科学基金(No.61502528)。
作者简介:林宏阳(1995—),男,硕士研究生,研究领域为漏洞检测技术,E-mail:nine.twelve@foxmail.com;彭建山(1979—),男,
博士,副教授,研究领域为网络安全;赵世斌(1993—),男,博士研究生,研究领域为网络安全;朱俊虎(1974—),男,博士,教授,研究领域为网络安全;许航(1996—),男,硕士研究生,研究领域为漏洞检测技术。
收稿日期:2018-11-14
修回日期:2019-04-15
文章编号:1002-8331(2019)11-0016-09
CNKI网络出版:2019-03-25,http://kns.cnki.net/kcms/detail/11.2127.TP.20190323.1358.002.html
林宏阳,等:JavaScript引擎漏洞检测方法综述2019,55(11)17
序输入进行变异的方式,检测程序异常行为从而发现漏洞。在漏洞检测领域,如何快速且有效地检测未知漏洞JavaScript
SourceCode
Parser
AST
是一项极具挑战性的研究工作。通过以上两种方法,研究人员针对语法解析、预编译、解释执行三个阶段对JavaScript引擎漏洞的产生机理及其检测技术展开了富ByteCode
supportinterprete
VM
Runtime有成效的研究,其中对语法解析阶段漏洞检测的研究重optimize
ENV
input
点是如何根据引擎读取的输入文件的语法生成相应的OptimizingOptimizedCode
Code
样本从而提高模糊测试的代码覆盖率[2],同时尽量减少每个样本解析的时间以提高检测效率;预编译阶段的检图1JavaScript引擎架构
测研究则更多是通过静态语义分析工具找到预编译过2.2JavaScript引擎类型信息
程中潜在的问题;对于解释执行阶段则是对以上两种方JavaScript中变量的类型信息和空间均在程序运行法进行结合,通过静态分析[3]以及动态执行[4]找到编译时由引擎本身动态申请,变量类型基于原型的继承,对完成的字节码在执行时存在的缺陷。
象的结构体中存有其引用的原型对象。对象本质上类本文从JavaScript引擎漏洞[5]的定义出发,分析了不似于键值对映射的属性集合,将属性和元素存储在同一同类型的JavaScript引擎缺陷以及由此引发的JavaScript个内存区域中,并在对象里存储了指向该区域的指针或引擎漏洞的作用机理;在综合研究各类JavaScript引擎者数据地址的偏移位置。一般情况下,对象的元素会被漏洞检测原理与实现技术的基础上,提出了JavaScript线性地存储在内存中。但特别地,类似
引擎漏洞检测基本范式和通用框架,深入分析了涉及的1.arr=[];关键技术环节以及需要解决的核心问题;依据不同检测2.arr[0]=42;的目的和实现方法,分别讨论了JavaScript引擎在不同3.arr[10000]=42;
的运行阶段检测研究中的技术思想以及发展脉络,指出这样的代码将导致数组以稀疏模式存储[6],存取元素时了制约检测效率的瓶颈问题以及可能的解决方法。本从给定索引到索引后备存储器中的附加映射找到对应文对JavaScript引擎漏洞检测技术的总结与展望将为未下标的元素,这样的数组就不需要过多索引值。数组不来的研究提供借鉴与思考。
仅有许多存储模型,还会使用许多不同的方法来优化存储数据。例如,32位整数数组可用本地形式存储,以节2JavaScript引擎介绍
约内存。因此,JavaScript引擎会定义不同的索引类型,对JavaScript引擎进行漏洞检测,需要对引擎的组
以分辨存储在内存中数组对象的类型。
成架构、类型信息、函数调用等方面有较深的理解。
2.3JavaScript引擎的函数
2.1JavaScript引擎架构
函数的概念在JavaScript语言中非常重要。当程序
JavaScript引擎,和许多的高级语言解释器一样,是
控制流执行函数本身时,两个特殊的变量起了关键性的由C/C++等语言编写的即时系统。不同浏览器使用的作用。其中一个是args,提供对函数参数的访问,另一JavaScript引擎不同,如表1所示。除了在浏览器中会使个是this,它根据函数的调用引用类中的对象。函数也用到JavaScript引擎,很多支持JavaScript语言接口的应是JavaScript中的一类特殊对象,它本身也可以具有属性。函数在申请的时候还会自动初始化其成员变量,比用软件也会搭载JavaScript引擎,例如:AdobeReader,如prototype、call和apply。prototype表示函数的原型,Node.js,PDFium,WindowsDefender。
call和apply允许函数对象通过this和给定参数调用。表1
主流JavaScript引擎
函数内部的操作也能影响JavaScript函数本身,它们不浏览器厂商JavaScript引擎
编写语言能对引用对象做任何赋值行为,但是可以设置或者修改ChromeGoogle
V8C/C++函数参数。因此,JavaScript引擎的函数调用函数实现MicrosoftEdge
MicrosoftChakraCoreC/C++中不仅需要检查其参数的类型,而且还要检查this对象SafariAppleJavascriptCoreC/C++Firefox
Mozilla
SpiderMonkey
C/C++
的类型。
如图1所示,JavaScript引擎通常由三个部分组成:3JavaScript引擎漏洞分类
编译框架、虚拟机框架和运行环境。其中编译框架用于JavaScript引擎当中除了会存在传统软件的内存破
将属于高级语言的JavaScript代码编译成为字节码或者坏漏洞外,还会存在因逻辑问题导致的仅存在于Java-能够直接在CPU上执行的机器原生指令;虚拟机用于Script引擎当中的特殊漏洞。这些特殊漏洞产生的根本操作语言中的变量;运行环境用于提供虚拟解释执行时原因是JavaScript这种语言的灵活性导致的实现中的逻所需要用到的函数和功能。
辑考虑不周。比如,上面介绍的JavaScript引擎的函数,
182019,55(11)ComputerEngineeringandApplications计算机工程与应用
在其内部的代码也可以影响其本身,可以设置函数参数放后重用漏洞成功绕过了IE浏览器的ASLR/DEP防护
的值,可以改变引擎内置对象的方法,可以改变引擎内机制获得了任意代码执行的能力。释放后重用漏洞主置对象的原型等。这种自修改的方法,在函数执行完成要包括堆块释放后重用、栈的未初始化两种类型。
之前就修改掉了函数中对象的原型、参数或者方法,如相对于传统应用软件中的释放后重用漏洞,JavaScript果在引擎的代码中没有在自修改代码执行之后对原有引擎中的这类漏洞产生的原因更多。例如,CVE-2017-代码进行再次检查,就有可能导致缓冲区溢出、释放后6980[12]中,JavascriptCore引擎对于Array.prototype.splice重利用、条件竞争或者类型混淆等逻辑漏洞产生。
函数的实现在初始化新数组变量的时候越过了对象中JavaScript引擎本质是通过C/C++等非内存安全性的部分元素,直接导致了新数组中的元素值为内存中的语言编写的应用软件,因此JavaScript引擎漏洞的定义未知数值。CVE-2017-7056[13]中,JavascriptCore引擎对和普通应用软件的定义几乎没有区别,整个软件的生命于函数传递参的优化没有考虑到用户在代码中对参数周期中出现的任何差错都有可能导致JavaScript引擎当的修改,直接导致了新数组的长度变量未初始化。类似中存在漏洞。随着时间的推移,技术的不断发展,编译的,CVE-2017-5121[14],CVE-2017-0236[15]等释放后重用软件和操作系统不断被完善,之前的一些软件漏洞已经漏洞都是因为引擎实现中缺乏对于对象的初始化。
渐渐消失在了人们的视野当中。
现有的模糊测试工具结合LLVM中的Address-根据不同类漏洞的出现时间,大致上可以将JavaScriptSanitizier[16]能够在运行的过程中设置影子内存,检测到引擎漏洞分为以下几类:缓冲区溢出,释放后重用,条件引擎中存在的释放后重用漏洞。攻击者利用这类漏洞竞争,类型混淆。不同的漏洞类型有各自的特点。了解能够改写堆上的关键数据,劫持程序的控制流。
不同的漏洞类型并弄清漏洞的产生原因对JavaScript引3.3条件竞争
擎的漏洞检测框架构建起着至关重要的作用。
条件竞争漏洞是比较特别的一种漏洞,攻击者利用3.1缓冲区溢出
执行和检查之间的空隙,绕过了程序中的检测以及各种缓冲区溢出可以说是出现的最早的JavaScript引擎
防护机制。2015年,JungHoonLee发现了Chrome中存漏洞,并且这类漏洞到现在依然存在于各种流行的在的TOCTTOU[17](TimeOfCheckToTimeOfUse)漏JavaScript引擎当中。导致缓冲区溢出的原因可能有很洞,并利用漏洞做到任意地址读写,在绕过所有的防护机多种,包括不安全的函数引用、整型溢出、数组越界读制并逃逸出沙盒[18]后能够以管理员的权限执行任意代码。
写等。
仅在JavaScript引擎中存在的一类特殊漏洞是JavaScript引擎中部分缓冲区溢出产生的原因与传wasm(WebAssembly)中的条件竞争。wasm是一个可移统应用软件缓冲区溢出产生的原因类似,均是缺少了关植、体积小、加载快的新语言规范。这种语言被设计用键变量的长度检查。例如,CVE-2016-7202[7]中,Chakra-于提供比JavaScript更加快速的代码编译运行。因为这Core对Array.prototype.reverse函数的实现在数组长度种技术近几年来才被各大开发团队采用,因此其中存在进行数算之后产生了整型溢出,直接导致了基于堆不少的漏洞。例如,CVE-2017-5116[19]中,v8引擎将wasm的缓冲区溢出。
编译成的字节码存放在堆上的一个共享内存空间当中。除了与传统应用软件缓冲区溢出产生原因类似的漏主线程对该内存空间进行访问的同时,子线程也可以对洞,引擎中还有大量由于语言特性而导致的问题。例如,该空间中的数据进行修改。类似的CVE-2018-6061[20]等ECMA6标准规定JavaScript通过Proxy()函数可以重新条件竞争漏洞都是因为引擎中缺乏对共享内存空间的访问控制导致的。
设置类里调用的函数改变程序的处理流程。因此可以通对于条件竞争漏洞,常见的漏洞检测方式是通过动过该函数绕过对象的长度检查。CVE-2016-3386[8]、态的监控并行程序多个线程的内存访问操作并进行数CVE-2016-7190[9]等缓冲区溢出漏洞都是这样产生的。
据分析[21]。检测程序通过监控用户态程序在并发执行现有的模糊测试工具都能够在引擎运行的过程中过程中发生的内存访问操作和其使用的同步保护机制,检测出这种漏洞。相对于应用程序其他地方的缓冲区使用算法推断竞态漏洞的产生。
溢出漏洞,攻击者们主要关心的是基于栈的缓冲区溢出3.4类型混淆
漏洞和基于堆的缓冲区溢出漏洞,通过改写栈上的数据类型混淆漏洞[22]是高级语言解释器中的一种特殊
或者堆上的数据能劫持程序的控制流。
的漏洞。它的出现主要是由于动态化的变量类型以及3.2释放后重用
函数的参数类型。这样的好处是代码有很大的灵活ASLR[10]这种防护机制出现之后,基础的缓冲区溢
性,但是同时缺陷也非常明显,引擎中的编译器在编译出攻击都能够被很好地缓解,所以攻击者们开始研究释JavaScript代码的时候会分不清传入函数的参数类型,放后重用等漏洞类型。在2014年的Pwn2Own[11]破解大在处理的时候会存在逻辑上的问题。早在2013年的赛中,攻击者们第一次利用两个JavaScript引擎中的释
Pwn2Own破解大赛中,攻击者利用了SVG库中类型混
林宏阳,等:JavaScript引擎漏洞检测方法综述2019,55(11)19
淆漏洞获得了在Chrome中任意代码执行的能力。
漏洞;然后通过人工分析或者动态符号执行[32]的方式找类型混淆漏洞导致能够直接读写内存中的数据和到能够执行到存在漏洞代码块的输入。如果能够找到对象指针。例如,CVE-2017-5070[23]中,v8引擎在对函数满足漏洞触发条件的输入,则认为这里存在漏洞,反之进行优化操作之后优化掉了数组元素的类型检查导致不存在。
数组中的对象被当成double类型的数据,形成类型混静态分析,是一个成体系的方法。最早由Thomas淆。混淆之后的数组可以用来泄露地址,进一步可以做Ball引入用来找到程序驱动代码当中存在的问题[33]。在到任意地址读写。类似的,CVE-2018-6106[24],CVE-2018-静态分析的过程中,为了提升系统整体的效率,一般采6122[25],CVE-2018-6136[26]等类型混淆漏洞都是由于代码用Micro-grammars的分析策略,对源码进行部分解在优化之后缺乏类型的检查导致的。
析[34]。检测分为两个阶段,第一个阶段对控制流进行分对于类型混淆漏洞的检测,现有的检测工具通过记析,第二个阶段对其他部分进行分析。第一个阶段针对录引擎中所有的显式和隐式类型转换,识别引擎当中对不同的语句使用了不同的检测方式,例如:函数,if语象成员的类型[27]。专注于增加类型检查的覆盖范围,并句,for循环等。第二个阶段中,检测系统会针对提取出尽量减少检测程序运行时的开销。
的每一个函数内部的所有内容进行检测,例如:对于空指针的检测,会进行前向的流量敏感的分析,以计算在4JavaScript引擎漏洞检测
所有传入路径上的引用的所有指针集合,然后每当碰到JavaScript引擎漏洞检测的本质是搜索用户态应用
p==NULL的表达式的时候都会在非空集合中查找p
程序的输入空间,找到某一特定的能够触发程序中漏洞指针,如果p指针存在的话就会抛出一个检测异常。通的输入。检测程序监控引擎在获得输入之后的执行过过设置漏洞检测的规则和模式,在对源代码进行分析的程中的内存读写操作和其使用的保护机制。对有源码时候检测该处的代码是否满足这种漏洞模式,如果存在的JavaScript引擎进行漏洞检测的时候检测系统通常会满足的情况则判定这里可能存在漏洞。静态分析的方在编译时加上ASAN(Address-Sanitizer),编译器中的这法能够判断代码某处是否存在相应的代码模式和结构,个编译选项可以在程序执行的时候检测到内存操作中但是不能确定输入是否一定能够执行到这个位置,也不的错误并及时抛出异常。异常被崩溃捕获器接收到之能够找到对应的输入。因此这种分析方法的误报率高,后会将输入的数据保存起来。对于无法获得源码的引但是漏报率低。2017年,FraserBrown首先将静态的漏擎,通常使用qemu[28]、dynamorio[29]、pintools[30]等动态二进洞检测方法引入到对浏览器中将JavaScript语言编译成制插桩工具在程序中进行插桩,获得程序执行时的反馈为IR(中间语言)过程的漏洞检测中[35],并且率先基于信息。不同的检测手段针对的引擎执行的阶段和代码uchex,使用Micro-grammars和语言无关的分析策略实所在的位置不同,对检测系统的设计和优化方式也不尽现了对JavaScript中代码绑定层的漏洞检测。
相同,而对于检测效果的评价方式是大致相同的:漏报更为理想的静态分析模式需要记录大量的指令并率、误报率和额外的系统开销。漏报率指检测方法所不且进行动态符号执行以获得执行到某个状态时寄存器能检测到的漏洞占所有漏洞的比例;误报率指检测结果和内存中的数据,实现更高的检测精度,也是这种做法中不被确认为漏洞占检测结果数量的比例;额外性能开被叫做白盒模糊测试的原因。但是这种做法会大大增销指引入检测方法后系统运行同样的程序增长的时间加执行时的程序开销,严重影响检测的效率。检测系统占原运行时间的比例。但是在现实世界的漏洞检测中,在实际检测的时候会针对不同的漏洞类型设计不同的只要能够检测出之前未被发现的漏洞的方法都会被业检测模型并改以降低变异所需要的迭代次数。如果在界认为是行之有效的。目前,引擎的漏洞检测分为两种被测试的程序中找到存在的漏洞模式的话,会从程序的思路:静态分析方法和模糊测试的方法。静态分析方法开始计算走到这条路径的约束,并对其求解。例如,文注重准确性和漏洞产生的根本机理,漏报率和误报率献[36]设计了一种针对C++语言特点的符号执行分析器低,准确性高,但是需要消耗大量的精力在分析上,效率ShapeChecker,该系统会给每一个循环都设置一个符号过低。研究人员主要围绕如何依赖现有的工具有效地状态Θ和符号路径约束PC,收集每一次执行的时候这降低人工参与的时间来开展。模糊测试方法的优点是更些条件语句对输入的符号化约束,在执行的同时生成约加注重执行过程中的自动化,不需要太多的人工分析。束并据此推理出输入的变化。之后对下一次的路径选但是相对的,系统额外开销大,漏报率和误报率相对较择约束进行取反,将下一次的执行在分支选择时导向另高,研究人员的研究重点是系统的准确性和执行效率。
一个路径,过程会采用DFS(DepthFirstSearch)的策略4.1静态分析方法
增加探索的路径深度。但是如果程序结构复杂,循环和静态分析方法是一种纯粹的白盒代码检测方式[31],
判断的数量数以千计的话,路径会成指数级的增长。空首先通过形式化漏洞触发模式,模式匹配程序中潜在的
间复杂度和时间复杂度在Θ(2^n)的条件下会对系统造
202019,55(11)ComputerEngineeringandApplications计算机工程与应用
成极大的额外性能开销。
级语言的语法特性,随机生成的方式很可能无法满足引为了降低性能的开销,研究人员主要结合了几种不擎所需要的文件语法需求。但是由于模糊测试方法优同的方法。文献[37]通过启发式搜索优先搜索值得被异的测试速度和检测效率以及人工友好性,研究人员后探索的路径,尽量选择程序中未被覆盖的指令较多的那续又对其在JavaScript引擎上的应用进行了更加深入的一个分支。并使用缓存存储函数摘要、结合控制流图剪研究。例如:JaewonMin针对JavaScript引擎的标签语支冗余路径等程序分析手段减少路径探索的复杂性。法生成的特点设计了一种新的样本生成方式应用到现另外,为了解决约束求解的瓶颈问题,研究人员主要通有的JavaScript引擎模糊测试的方法,提升了样本中出过分析约束表达式将不相关的约束消除以及增量求解现较少的语法规则在下一次变异中出现的概率。在生的方法。文献[38]通过缓存路径请求结果增量求解以成10000个文件样本的情况下,检测出了20个不同的及不相关约束消除的方式增强约束求解的能力。实现漏洞[40]。BoQu和RoyceLu则是通过打破文件中固有的系统PSE相对于KLEE在对相同的程序进行符号执的配对组合,通过JavaScript动态修改内部具有特殊属行时减少了23倍的执行路径。
性的标签[41],将检测的层级定义在了标签的级别,有针4.2模糊测试方法
对性地对其进行了检测,发现了超过400处的漏目前最有效的模糊测试方法是基于代码覆盖率反
洞,获得了71个不同的CVE编号。
馈的灰盒模糊测试。最早由AriTakanen在1988年时之后的研究中,人们发现很难通过程序执行信息无提出[39]
。这种软件漏洞检测方法高度依赖于样本的生关的单向变异获得准确性与性能的大幅度提升,于是尝成,通过破坏代码的完整性和合规性以生成大量畸形试在JavaScript引擎中进行插桩的方法获得JavaScript的数据样本。然后再将这些畸形数据样本输入到引擎内部的执行信息。ChenZhang等人通过插桩的方JavaScript引擎当中进行解释执行,通过崩溃收集器收式获得了JavaScript引擎执行的信息[42],它定义了浏览器集执行的结果。如果发现执行某样本之后程序崩溃,则执行时的状态以及状态之间的转换方法,针对JavaScript认为这个样本在解析的过程中会触发代码中一个未知引擎中可能存在的释放后重用类漏洞进行检测,并使用漏洞。通过调试分析这个样本,能够找到代码中的漏LLVM中的ASAN收集错误信息。
洞。该方法有效的关键是基于遗传算法的变异过程能为了提升JavaScript在引擎中执行的效率,研究人够使得输入样本集合趋向于覆盖更多的程序代码,从而员减少了文件操作,直接在内存中进行相应的代码生成获取检测更多漏洞的能力。
并映射到JavaScript引擎中执行。例如:AreumLee和如图2所示,通过变异或者生成获得一批输入样Singri选择已经存在的1day漏洞样本作为初始语料结合本,然后将这一批样本输入到检测的应用程序当中。
ECMA语法词典指导变异[43],并直接将生成的JavaScriptCRASHS
代码映射到引擎的内存当中,提升了70%的执行速度。Mutate
RuntimeEnvironment发现了JavascriptCore当中存在的17处漏洞。
Inputs
Targets
Validate
还有一部分安全研究人员将注意力集中在JavaScriptGenerate
引擎中的JIT模块,针对攻击者利用的比较频繁的JITBacktogenerator/mutator
模块进行模糊测试。比如GiorgiMaisuradze设计的图2基于变异的模糊测试
Dachshund[44],选择不同的API在代码中加入特殊常数验证程序检查运行的应用是否功能正常,如果出现并输入到JavaScript引擎中进行测试。检查这些常数是功能异常则认为这里可能存在漏洞。模糊测试方法的否会在JIT代码块中出现,成为攻击者通过编译后的JIT本质是依赖随机过程生成不同的考虑到各种边界值的代码进行JIT-ROP利用的一部分,攻击者们在Chrome执行样本(测试用例)尽可能地触发更多不同的执行分浏览器中发现124种方法能够插入特殊常数的方法,在支并检测程序在处理相应逻辑的时候是否会存在逻辑Edge浏览器中发现了58种能够插入特殊常数的方法。
不严密的情况,尤其是保护机制的选择和添加时。其选取的数据是整个样本空间里面最有可能导致软件产生5JavaScript引擎漏洞检测基本框架
漏洞的相应数据,根据概率论里面的大数定律,只要生JavaScript引擎漏洞和传统的软件漏洞产生机理大
成样本的次数足够多,随机函数的随机性足够强,概率致相同,是开发人员在设计实现的过程中逻辑考虑不当极低的能够导致程序异常的样本就一定会出现。
而造成的安全隐患。与传统应用软件不同的地方是,作因此,模糊测试方法相对于静态分析方法而言,不为一种高级语言解释引擎,JavaScript引擎的实现必须需要过多的人工干预,执行效率更高。当然,由于随机满足这种语言独有的一些特性。比如,在执行时对某类函数的不可预知性,该方法可能无法有针对性地找到某中虚函数表指针进行自修改;编译成为JIT[45](Just-In-一特定代码中的程序漏洞,并且因为JavaScript这类高
Time)代码时为了效率而进行优化;自定义JavaScript函
林宏阳,等:JavaScript引擎漏洞检测方法综述2019,55(11)21
数能够传入动态参数类型等。对于逻辑清晰的Java-标准来辅助检测样例的生成。覆盖率指导的模糊测试Script引擎漏洞,可以通过模糊测试和符号执行等传统方法选择执行之后能够让JavaScript引擎在执行的时候漏洞检测手段进行有效检测;对于由于高级语言特性导达到新的状态(执行那些之前没有被执行过的代码)的致的其他漏洞,难以通过这类手段进行有效检测,目前输入加入到语料库当中。覆盖率指导的模糊测试是一而言,大多数的研究还是通过静态分析的方法有针对性种灰盒测试[49],灰盒测试需要在源码中插入暗桩,通过暗地对这类触发逻辑复杂的漏洞进行检测。
桩收集执行时的覆盖率信息。比较出名的工作主要有根据对现有文献的研究,目前的JavaScript引擎漏通过遗传算法指导变异进行样例生成的AFL[50],以及后洞检测方法主要可以分为两类,一类是通过静态分析有面在此基础上对种子选择算法进行改进的AFLfast[51]。针对性地对某一类漏洞进行检测,一类是通过模糊测试Skyfire[52]和Orthrus[53]通过对程序进行预分析,协助创建进行动态检测。静态分析是指针对JavaScript引擎在获语料库并指导检测样例的生成。
取输入并执行的某一阶段中存在的逻辑缺陷,定制静态另外一类是污点分析指导的模糊测试,这种模糊测代码检查工具,找到可疑代码位置通过人工源码审计或试针对通过污点分析和数据流分析得到对样本进行变二进制程序审计的方式进行漏洞分析。基于代码覆盖异位置的数据,避免了无效检测样例的生成。这当中,率反馈的灰盒模糊测试是指以代码覆盖率作为导引,通SanjayRawat提出了一种动静结合的检测方法。这种过引导性变异和生成样本输入程序,检测程序是否触发方法通过轻量级的过程内静态分析给程序的基本块进异常进行漏洞检测。目前,在JavaScript引擎漏洞检测行打分。如果达到某个基本块的可能性越低,那么这个框架的两类检测方法中,具体需要解决的有三个关键问基本块的评分就越高[]。动态执行时收集反馈的信息,题,分别是:检测阶段选取问题、检测样例生成问题以及根据反馈的信息计算该样本的评分指导下一次的变效率和准确性平衡问题。这三个问题相互制约,彼此影异。SangKilCha则是通过对被测试程序进行符号执响,需要研究人员投入大量时间和精力。
行决定需要变异比特的位置和长度[55]。Driller[56]和5.1检测阶段的选取
MAYHEM[57]针对被测试程序中难以满足的条件约束进检测阶段的选取是静态系统分析过程中一个非常
行符号执行,生成能够满足约束条件的样本以获得更大重要的步骤。JavaScript引擎执行主要分为获得输入、的覆盖率。
编译代码生成字节码、对生成的字节码进行优化、解释5.3效率和准确性
执行字节码等阶段。针对JavaScript引擎解释执行的不结合工具有针对性的静态漏洞检测,效率和准确性
同阶段,需要相应的策略对其中潜在的问题进行检测。相对较高,需要对整个引擎的执行流程和潜在的漏洞有编译优化阶段是引擎在运行中编译生成了字节码之后,独到的见解,会花费一个有经验的安全研究人员大量的对生成的字节码进行优化的一个阶段。这个阶段对整精力在阅读和理解引擎的代码上。而通过模糊测试进行个引擎的执行速度和效率是非常关键的。在这个阶段漏洞检测,效率和准确性则是衡量系统好坏的关键因素。
中,由于之前提到的JavaScript语言的高级语言特性,优通常JavaScript引擎获得输入的阶段,要从磁盘中化生成的字节码的逻辑非常复杂,出现问题的几率非常读取文本文件。读写文件的磁盘操作相对于内存操作大,在ChakraCore引擎2018年披露的31个漏洞当中,因而言需要花费更多的时间,效率会很低,如果需要提升为优化产生的问题就有24个。
模糊测试的效率的话,需要妥善处理磁盘操作。经典的5.2检测样例生成
灰盒模糊测试框架AFL是通过fork系统调用复制目标程序的内存地址空间,减少程序初始化的时间消耗,提检测样例生成是通过模糊测试的方式进行JavaScript
升测试时的效率。LibFuzzer[58]则是通过在目标代码中引擎漏洞检测时非常重要的一个步骤。有效生成的样插入初始化函数,这个初始化函数会生成多个运行在各例能够增大程序执行到新状态的几率。简单的黑盒测自线程当中的模糊测试实例,通过并行化提升模糊测试试需要的样例不需要任何依赖,数据生成完全随机。这效率。WenXu在AFL和LibFuzzer的基础上提出了一种样例生成方式最早是在1981年出现[46]
,到现在已经有种新的系统调用方式,能更加高效地克隆模糊测试的实三十多年的历史。黑盒模糊测试的弊端非常明显,因为例[59]。同时,他还设计了双文件系统,利用基于RAM的所有的输入都是简单的随机生成的,所以程序只会在处临时文件系统速度快的优势提高效率。还有相当一部理输入的代码区间附近执行。这当中,QuickFuzz[47]
框分商业公司选择大规模并行化的集群搭建其模糊测试架在语料生成之前会通过语法检查工具预先检查样本框架以提升效率。这当中比较著名的有谷歌的Cluster-有效性,之后再输入到程序进行检测。PEACH[48]
则是针Fuzzer[60]和OSS-Fuzzer[61]。
对被测试程序的样本输入定制相应的PeachPit文件,划通用的漏洞检测准确性评价主要是依据检测框架分需要随机生成的字段以及内容。
的漏报率和误报率进行评价。漏报率指现有检测框架为了让模糊测试更可行一些,需要一个选择样例的
不能检测到的漏洞占所有漏洞的比例;误报率指检测结
222019,55(11)ComputerEngineeringandApplications计算机工程与应用
果中不被确认为漏洞占检测结果数量的比例。为了提行最小的变异带来了样本变异的创新。在样本变异的升漏洞检测的准确性,通常会对生成的PoC(Proofof方面,sigpwn将AFL当中的覆盖率反馈的机制引入到了Concept)进行重复执行。例如,T-Fuzz[62]检测框架设计JavaScript引擎的模糊测试当中,在语法层面给每一种了一个崩溃分析器,分析器对源程序的路径进行求解,语法增加了单独的uid(uniqueID),使用和AFL相同的能够有效地将误报率降低到16%以内。这种做法能保布隆过滤器的方法实现覆盖率反馈。GramFuzz通过分证生成的PoC是准确的,但是多次执行会对系统的效析已有的JavaScript文件生成相应的语法树并生成相应率有较大的影响。漏报率的降低和漏洞检测框架的设的语法片段,通过结构化的策略变异生成测试用例。表2计有着直接的关系,高效的系统往往意味着更低的漏列出了各种JavaScript引擎漏洞检测方法之间的比较。
报率。
基于模糊测试的JavaScript引擎漏洞检测由于JavaScript语言本身的语法特性,二进制层面的代码覆6总结与展望
盖率反馈意义较小,需要在语法层面进行语义的标识并JavaScript引擎漏洞的检测和漏洞缓解方式经过一
进行语料的选择。研究人员的研究重点也集中在两个段相当长的发展历史,在这段历史的过程中,从来没有问题:实现ECMA语法高语义意义的提取并生成不同的哪一方能够一直掌控JavaScript引擎的控制权。在检测样本以及提高JavaScript引擎模糊测试效率。对于第一上,攻击者们不断去寻找新的攻击点并利用找到的新攻个问题现在能够通过将不同标签作为语料生成较好的击点绕过已存在的防护机制劫持程序的执行流。软件解决,但信息的语义层级较高,没有在二进制层面的反厂商和操作系统厂商会针对当前攻击者利用的多的漏馈机制出现,很难实现较为复杂的漏洞检测。对于第二洞,总结其模式并从源头上封堵当前的利用方式。在漏个问题,现在大多数研究人员都是通过增大运行机器的洞检测方面,通过结合模糊测试和符号执行的方式对漏内存和CPU算力,然后通过多标签页的方式提高并行洞进行检测的方法因为其效率受到符号执行和浏览器度予以解决。
本身语言特性的制约,尚未有成熟的项目出现,但是涌6.2逻辑漏洞检测方法展望
现出了大量具有参考价值和尝试性工作,可以给类似JavaScript漏洞作为软件漏洞的一种,其检测的关
JavaScript引擎的高级语言解释器漏洞检测和其本身发键问题也反映了所有应用软件漏洞检测技术的关键问展带来指导和启迪。
题。在之后的JavaScript引擎漏洞乃至普通软件的检测6.1JavaScript引擎检测方法总结
方法当中,利用机器学习的方式可以有效地提高样本生已有的JavaScript引擎漏洞检测方法和实现的工具
成的效率以及可用性,获得的样本更加真实。
种类繁多,各有优势,在静态漏洞检测工具中uchex[63]是利用机器学习乃至深度学习的方式智能分析已有经典的通过语义分析和符号执行的检测工具。chrome-的JavaScript语言样本内的生成规律和逻辑关系,总结uchex,typy[]等工具是在uchex的基础上针对JavaScript样本生成的规律,发现可能存在的变异点。并针对这些引擎的API进行适配并进行了性能上的优化;Dachshund、变异点通过设置好的变异规则进行变异以求得更高的StateFuzzer[65]、GramFuzz[66]、JFF[43]是对模糊测试方法中代码覆盖率。通过智能化的样本模式分析和生成弥补的样本生成针对不同的漏洞类型进行改进,检测相应漏了现有漏洞检测技术中的样本模板单一,变异简单的洞。Dachshund是针对漏洞利用过程中关键的JIT代码短板。
编译时的常量绑定方式进行模糊测试,增大了大整数在6.3未来发展
生成样本中出现的机率。StateFuzzer是在样本生成的在现有的研究中,研究人员主要通过静态分析和动
时候破坏了原本的文件格式打破原本的文件格式扰乱态执行的方式对JavaScript引擎中可能存在的漏洞进行执行流,主要检测JavaScript引擎在处理非常规文件格检测,做了很多有针对性的效率提升和性能优化的工式时候的容错率。JFF通过将已有的1day漏洞样本进
作,取得了显著的效果。但是在已有的方法中,仍然存
表2
JavaScript引擎漏洞检测工具汇总
工具方法
性能检测效率
误报率uchex静态对部分代码进行语法结构解析生成语法树
快高低ShapeChecker静态针对C++特性改进符号执行的效率快高低Dachshund
静态在JIT代码搜寻样本中的大整数
快高高PostconditionedSymbolicExecution
静态减少符号执行的分支
中低低StateFuzzer动态将JavaScript引擎的状态当作覆盖率
中低高GramFuzz动态分析已有样本的语法树并
中低高JFF动态将已有的JavaScript代码进行变异映射到内存中执行
快高低sigpwn
动态
增加语法级别的覆盖率反馈信息
快
低
低
林宏阳,等:JavaScript引擎漏洞检测方法综述2019,55(11)23
在可以继续深入研究和发展的空间。将这两种方法结合起来,在动态模糊测试的时候即时获6.3.1智能精确的初始语料生成
得当前执行的代码覆盖率,并和静态的代码分析方法结在现有的检测方法中,用于进行模糊测试的初始语合,将相应的信息反馈至变异处指导程序输入的变异,料生成都是通过API将对应的标签或者JavaScript函数能够大大优化JavaScript引擎的漏洞检测。但是复杂的或者语句随机排列而生成的。这种方法能够涵盖样本JavaScript引擎代码给方法的实现带来了严峻的挑战。
空间中更多的样本,但是相对的,生成的样本很难具有完整的语法结构并符合ECMA语法标准,不符合标准的参考文献:
初始语料会直接被JavaScript引擎舍弃,大大降低了模[1]tunz/js-vuln-db[EB/OL].[2019-04-15].https://github.com/
糊测试的效率。使用自适应的方法进行初始语料的生tunz/js-vuln-db.
成是值得借鉴的一种尝试。
[2]BöhmeM,PhamVT,RoychoudhuryA.Coverage-based
最近的灰盒模糊测试研究工作中,部分研究人员已greyboxfuzzingasMarkovchain[J].IEEETransactionson经开始尝试通过自适应的方式对初始语料生成阶段存SoftwareEngineering,2017.
在的对样本格式缺乏认知的问题进行改进。例如:[3]FanningMC,GuerreraN.Iterativestaticanddynamic
SGF[66]针对过程中输入文件在解析阶段就直接被舍弃softwareanalysis:U.S.Patent7,975,257[P].2011-07-05.的问题,对种子文件采用高级的结构化表示方式,并定[4]SuttonM,GreeneA,AminiP.Fuzzing:bruteforcevulner-义了一种新的变异操作针对虚拟结构在语法层级进行abilitydiscovery[M].[S.l.]:PearsonEducation,2007.变异从而生成初始语料。这种初始语料生成方式相对[5]ReisC,DunaganJ,WangHJ,etal.BrowserShield:vulnerability-drivenfilteringofdynamicHTML[J].ACMTransactions于传统基于字典变异的方法和动态污点分析的方法,能ontheWeb(TWEB),2007,1(3):11.
更有效地探索被测试软件的样本输入空间。NEUZZ[67][6]SmailbegovicFS,GaydadjievGN,VassiliadisS.Sparse
则使用前馈神经网络,能够逐步学习复杂程序的分支行matrixstorageformat[C]//Proceedingsofthe16thAnnual为,预测程序的控制流走向,生成对应的输入样本对预WorkshoponCircuits,SystemsandSignalProcessing,测进行矫正。通过深度学习的方式在生成初始就获得2005:445-448.
更高的代码覆盖率,大大提高了检测的效率和准确性。[7]CVE-2016-7202[EB/OL].[2019-04-15].https://www.cvede-6.3.2高效的反馈信息获取
tails.com/cve/CVE-2016-7202/.
普通的应用软件可以通过在程序中插入“探针”的[8]CVE-2016-3386[EB/OL].[2019-04-15].https://www.cvede-方式探测程序执行时的覆盖信息。但是部分JavaScripttails.com/cve/CVE-2016-3386/.
引擎因为其未开源导致难以在编译的时候进行插桩。[9]CVE-2016-7190[EB/OL].[2019-04-15].https://www.cvede-并且由于JavaScript引擎庞大的代码量,在编译的时候tails.com/cve/CVE-2016-7190/.
进行了插桩就意味着执行时效率的下降,这两者之间的[10]SpenglerB.Pax:theguaranteedendofarbitrarycode
平衡是在对JavaScript引擎进行模糊测试的时候需要把execution[EB/OL].[2019-04-15].http://grsecurity.net/PaX-presentation_files/frame.htm.
握的一个要点。大多数的研究都没有单独针对JavaScript[11]Pwn2Own[EB/OL].[2019-04-15].https://en.wikipedia.org/
引擎中的覆盖率反馈进行,研究的是生成样本的方法。wiki/Pwn2Own.
实际上,这几年在CPU的硬件虚拟化技术高速发展的[12]CVE-2017-6980[EB/OL].[2019-04-15].https://www.cvede-情况下,通过IntelPT,虚拟机的自省技术进行高效的反tails.com/cve/CVE-2017-6980/.
馈信息获取是一个非常好的思路。能够从更底层的地[13]CVE-2017-7056[EB/OL].[2019-04-15].https://www.cvede-方更快更清楚地获得执行时各个寄存器的状态以内存tails.com/cve/CVE-2017-7056/.
中的数据为程序,无疑为漏洞检测提供了巨大的便利。[14]CVE-2017-5121[EB/OL].[2019-04-15].https://www.cvede-6.3.3静态分析和动态分析方法的结合
tails.com/cve/CVE-2017-5121/.
JavaScript引擎漏洞自从浏览器这种应用软件出现[15]NVD-CVE-2017-0236[EB/OL].[2019-04-15].https://nvd.
开始就一直存在,研究人员在近二十年的漏洞检测研究nist.gov/vuln/detail/CVE-2017-0236.
中尝试了各种不同的研究方法。主要可以分为静态分[16]SerebryanyK,BrueningD,PotapenkoA,etal.Address-析方法和动态分析方法,使用的更多的是动态模糊测试Sanitizer:afastaddresssanitychecker[C]//USENIXAnnualTechnicalConference,2012:309-318.
的方法。这两种方法各自都存在不足的地方,对于静态[17]BishopM,DilgerM.Checkingforraceconditionsin
分析方法而言,无法即时地获取内存以及寄存器的状态fileaccesses[J].ComputingSystems,1996,2(2):131-152.是对分析效率一个最大的制约。对于动态分析方法而[18]MolinyaweM,HaririAA,SpelmanJ.$hellonearth:
言,无法准确地引导输入内容朝着代码覆盖率增大的方frombrowsertosystemcompromise[Z].TrendMicro向进行变异是对漏洞检测效率的主要。如果能够
Inc,2016.
242019,55(11)ComputerEngineeringandApplications计算机工程与应用
[19]NVD-CVE-2017-5116[EB/OL].[2019-04-15].https://nvd.
andPrivacy,2015:725-741.
nist.gov/vuln/detail/CVE-2017-5116.
[38]YiQ,YangZ,GuoS,etal.Eliminatingpathredundancy
[20]Nvd.nist.gov.NVD-CVE-2018-6061[EB/OL].[2019-04-15].
viapostconditionedsymbolicexecution[J].IEEETransac-https://nvd.nist.gov/vuln/detail/CVE-2018-6061.tionsonSoftwareEngineering,2018,44(1):25-43.[21]NetzerRHB,GhoshS.Efficientraceconditiondetec-[39]TakanenA,DemottJD,MillerC.Fuzzingforsoftware
tionforshared-memoryprogramswithpost/waitsyn-securitytestingandqualityassurance[M].[S.l.]:Artechchronization[R].UniversityofWisconsin-Madison.Com-House,1988.
puterSciencesDepartment,1992.
[40]MinJ.AddingAFLbloomfiltertodomatoforfun[EB/
[22]MeadowsC.Aprocedureforverifyingsecurityagainst
OL].[2019-04-16].https://sigpwn.io/blog/2018/5/13/adding-typeconfusionattacks[C]//16thIEEEComputerSecurityafl-bloom-filter-to-domato-for-fun.
FoundationsWorkshop,2003:62-72.
[41]Blackhat.com[EB/OL].[2019-04-16].https://www.blackhat.
[23]NVD-CVE-2017-5070[EB/OL].[2019-04-15].https://nvd.
com/docs/eu-14/materials/eu-14-Lu-The-Power-Of-Pair-nist.gov/vuln/detail/CVE-2017-5070.
One-Template-That-Reveals-100-plus-UAF-IE-Vulnerabili-[24]NVD-CVE-2018-6106[EB/OL].[2019-04-15].https://nvd.
ties.pdf.
nist.gov/vuln/detail/CVE-2018-6106.
[42]Hitcon.org[EB/OL].[2019-04-16].https://hitcon.org/2014/
[25]CVE-CVE-2018-6122[EB/OL].[2019-04-15].http://cve.
downloads/.
mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-6122.[43]Conference.hitb.org[EB/OL].[2019-04-16].https://conference.
[26]CVE-CVE-2018-6136[EB/OL].[2019-04-15].http://cve.
hitb.org/hitbsecconf2018ams/FuzzingJavascriptForFunAnd-mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-6136.Pwnage,pdf.
[27]HallerI,JeonY,PengH,etal.TypeSan:practicaltype
[44]MaisuradzeG,BackesM,RossowC.Dachshund:digging
confusiondetection[C]//Proceedingsofthe2016ACMforandsecuringagainst(non-)blindedconstantsinJITSIGSACConferenceonComputerandCommunicationscode[C]//Proceedingsofthe15thConferenceonNetworkSecurity,2016:517-528.
andDistributedSystemSecuritySymposium(NDSS),[28]BellardF.QEMU,afastandportabledynamictranslator[C]//
2017.
USENIXAnnualTechnicalConference,2005,41:46.[45]HaJ,HaghighatM,CongS,etal.Aconcurrenttrace-[29]BrueningD,GarnettT.Buildingdynamicinstrumentation
basedjust-in-timecompilerforJavaScript:TR-09-06[R].toolswithDynamoRIO[C]//ProcIntConfIEEE/ACMAustin:UniversityofTexas,2009.
CodeGenerationandOptimization(CGO),Shenzhen,[46]DuranJW,NtafosS.Areportonrandomtesting[C]//
China,2013.
Proceedingsofthe5thInternationalConferenceon[30]UhGR,CohnR,YadavalliB,etal.Analyzingdynamic
SoftwareEngineering,1981:179-183.
binaryinstrumentationoverhead[C]//WBIAWorkshopat[47]GriecoG,CeresaM,BuirasP.Quickfuzz:anautomatic
ASPLOS,2006.
randomfuzzerforcommonfileformats[C]//Proceedings[31]GodefroidP,LevinMY,MolnarD.SAGE:whitebox
ofthe9thInternationalSymposiumonHaskell,2016:fuzzingforsecuritytesting[J].Queue,2012,10(1):20.13-20.
[32]KingJC.Symbolicexecutionandprogramtesting[J].
[48]Peachfuzzer:discoverunknownvulnerabilities[EB/OL].
CommunicationsoftheACM,1976,19(7):385-394.[2019-04-16].https://www.peach.tech/.
[33]NagappanN,BallT.Staticanalysistoolsasearlyindi-[49]McNallyR,YiuK,GroveD,etal.Fuzzing:thestateof
catorsofpre-releasedefectdensity[C]//Proceedingsoftheart[R].Australia:DefenceScienceandTechnologythe27thInternationalConferenceonSoftwareEngi-OrganisationEdinburgh,2012.
neering,2005:580-586.
[50]ZalewskiM.Americanfuzzylopfuzzer[EB/OL].(2005).
[34]BrownF,NötzliA,EnglerD.Howtobuildstaticchecking
http://lcamtuf.coredump.cx/afl/.
systemsusingordersofmagnitudelesscode[J].ACM[51]GitHub[EB/OL].[2019-04-17].https://github.com/mboehme/
SIGPLANNotices,2016,51(4):143-157.
aflfast.
[35]BrownF,NarayanS,WahbyRS,etal.Findingandpre-[52]WangJ,ChenB,WeiL,etal.Skyfire:data-drivenseed
ventingbugsinJavaScriptbindings[C]//201738thIEEEgenerationforfuzzing[C]//2017IEEESymposiumonSymposiumonSecurityandPrivacy(SP),2017:559-578.SecurityandPrivacy(SP),2017:579-594.
[36]孙文全.基于符号执行技术的C++程序静态分析[J].电子
[53]HuangR,DengDY,SuhGE.Orthrus:efficientsoftware
技术,2018(8):7-15.
integrityprotectiononmulti-cores[C]//ACMSIGARCH[37]ChaSK,WooM,BrumleyD.Program-adaptivemuta-ComputerArchitectureNews,2010:371-384.
tionalfuzzing[C]//2015IEEESymposiumonSecurity
(下转第34页)
342019,55(11)ComputerEngineeringandApplications计算机工程与应用
regionproposalgenerationandjointobjectdetection[C]//neuralnetworkforobjectdetection[C]//ProceedingsofIEEEInternationalConferenceonComputerVisionandCVPR2018,2018.
PatternRecognition,2016:845-853.
[52]LawH,DengJ.CornerNet:detectingobjectsaspaired
[43]FuCY,LiuW,RangaA,etal.DSSD:deconvolutionalsingle
keypoints[C]//ProceedingsofECCV2018,2018.shotdetector[J].arXivpreprintarXiv:1701.06659,2017.[53]ZhouXingyi,ZhuoJiacheng,KrähenbühlP.Bottom-up
[44]LinT,DollarP,GirshickR,etal.Featurepyramidnet-objectdetectionbygroupingextremeandcenterpoints[J].worksforobjectdetection[C]//ProceedingsofCVPRarXivPreprintarXiv:1901.08043v2,2019.
2017,2017.
[]ShenZ,LiuZ,LiJ,etal.DSOD:learningdeeplysuper-[45]ShrivastavaA,SukthankarR,MalikJ,etal.Beyondskip
visedobjectdetectorsfromscratch[C]//Proceedingsofconnections:topdownmodulationforobjectdetection[C]//CVPR2017,2017:1937-1945.
ProceedingsofCVPR2017,2017.
[55]HeKaiming,GirshickR,DollárP.RethinkingImageNet
[46]ZhouP,NiB,GengC,etal.Scaletransferrableobject
pre-training[J].arXiv:1811.08883v1,2018.
detection[C]//ProceedingsofCVPR2018,2018.[56]BodlaN,SinghB,ChellappaR,etal.Soft-NMS—
[47]SinghB,NajibiM,DavisLS.SNIPER:efficientmulti-improvingobjectdetectionwithonelineofcode[C]//scaletraining[C]//AdvancesinNeuralInformationPro-ProceedingsofICCV2017,2017.
cessingSystems,2018:9310-9320.
[57]DaiJifeng,QiHaozhi,XiongYuwen,etal.Deformable
[48]LiYanghao,ChenYuntao,WangNaiyan,etal.Scale-aware
convolutionalnetworks[J].arXivPreprintarXiv:1703.06211v3,tridentnetworksforobjectdetectiond[J].arXivPreprint2017.
arXiv:1901.012,2019.
[58]WangXinglong,ShrivastavaA.A-Fast-RCNN:hardposi-[49]LinT,GoyalP,GirshickR,etal.Focallossfordense
tivegenerationviaadversaryforobjectdetection[C]//objectdetection[C]//ProceedingsofCVPRICCV2017,ProceedingsofCVPR2017,2017:3039-3048.
2017.
[59]LiZ,PengC,YuG,etal.DetNet:abackbonenetwork
[50]OuyangWanli,WangKun,ZhuXin,etal.Chainedcas-forobjectdetection[C]//ProceedingsofECCV2018,2018.cadenetworkforobjectdetection[C]//Proceedingsof[60]GaoMingfei,YuRuichi,LiAng,etal.Dynamiczoom-in
ICCV2017,2017.
networkforfastobjectdetectioninlargeimages[C]//[51]ZhangS,WenL,BianX,etal.Singleshotrefinement
ProceedingsofCVPR2018,2018.
(上接第24页)
chromium-security/bugs/using-clusterfuzz.
[]RawatS,JainV,KumarA,etal.Vuzzer:application-[61]AnnouncingOSS-Fuzz:continuousfuzzingforopen
awareevolutionaryfuzzing[C]//ProceedingsoftheNetworksourcesoftware[EB/OL].[2019-01-13].https://security.andDistributedSystemSecuritySymposium(NDSS),2017.googleblog.com/2016/12/announcing-oss-fuzz-continuous-[55]RebertA,ChaSK,AvgerinosT,etal.Optimizingseed
fuzzing.html.
selectionforfuzzing[C]//USENIXSecuritySymposium,[62]PengH,ShoshitaishviliY,PayerM.T-Fuzz:fuzzingby
2014:861-875.
programtransformation[C]//2018IEEESymposiumon[56]StephensN,GrosenJ,SallsC,etal.Driller:augmenting
SecurityandPrivacy(SP),2018:697-710.
fuzzingthroughselectivesymbolicexecution[C]//NDSS,[63]uchex[EB/OL].https://cseweb.ucsd.edu/~dstefan/cse291-2016,16:1-16.
fall16/.
[57]ChaSK,AvgerinosT,RebertA,etal.Unleashingmay-[]OmarC,AldrichJ.Programmablesemanticfragments:the
hemonbinarycode[C]//2012IEEESymposiumondesignandimplementationoftypy[J].ACMSIGPLANNotices,2016,52(3):81-92.
SecurityandPrivacy(SP),2012:380-394.、
[65]Deepsec[EB/OL].[2019-04-16].https://deepsec.net/docs/
[58]SerebryanyK.Continuousfuzzingwithlibfuzzerand
Slides/2012/Taking_Browsers_Fuzzing_to_the_next_(DOM)_AddressSanitizer[C]//2016IEEECybersecurityDevelop-Level.pdf.
ment(SecDev),2016.
[66]GuoT,ZhangP,WangX,etal.GramFuzz:fuzzingtesting
[59]XuW,KashyapS,MinC,etal.Designingnewoperating
ofwebbrowsersbasedongrammaranalysisandstruc-primitivestoimprovefuzzingperformance[C]//Proceed-turalmutation[C]//2013SecondInternationalConferenceingsofthe2017ACMSIGSACConferenceonCom-onInformaticsandApplications(ICIA),2013:212-215.puterandCommunicationsSecurity,2017:2313-2328.[67]SheD,PeiK,EpsteinD,etal.NEUZZ:efficientfuzzing
[60]Chromium.org.UsingClusterFuzz-thechromiumproj-withneuralprogramlearning[J].arXivpreprintarXiv:ects[EB/OL].[2019-01-13].https://www.chromium.org/Home/
1807.05620,2018.
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- jqkq.cn 版权所有 赣ICP备2024042794号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务