CodeAlchemist:用于在JavasScript引擎中查找漏洞的代码生成工具

栏目: JavaScript · 发布时间: 5年前

作者: {fr4nk}@ArkTeam

原文作者: HyungSeok Han DongHyeon Oh Sang Kil Cha

原文标题: CodeAlchemist: Semantics-Aware Code Generation to Find Vulnerabilities in JavaScript Engines

原文会议: 2019 NDSS

JavaScript(JS)引擎已日益成为现代Web浏览器的核心组件,鉴于针对其构建漏洞利用的过程较为灵活,JS 引擎逐渐成为一个对攻击者有吸引力的目标。目前最先进的用于查找 JS 引擎漏洞的模糊器主要集中在基于预定义的上下文无关语法或训练的概率语言模型生成语法上正确的测试用例。然而,语法上正确的 JS 语句在运行时通常在语义上无效。

本文提出了一种新的测试用例生成算法,实现了模糊测试工具CodeAlchemist。该 工具 可以生成任意的JavaScript代码片段,这些代码片段在语义和语法上都是正确的,并且它有效地产生了可以导致 JS 引擎崩溃的测试用例。最后,作者基于该工具发现了数个最新版本 JS 引擎的漏洞,并向供应商报告了这些漏洞。

为了生成在语法和语义上都有效的 JS 代码片段,作者提出了基于语义感知的代码块组合技术(semantic-aware assembly),这是一种用于 JS 引擎模糊测试的新型测试用例生成算法。该方法最关键的部分是将 JS代码作为 seeds ,将其拆分成可组合的构建块(代码块),每个代码块都代表了一个有效的 JS 抽象语法树。同时也要为 每个代码块标记出一个组合约束条件,这是将代码块与其他代码块互连时要遵循的一组规则。具体而言,组合约束条件包含两种:先决条件和后置条件。先决条件是一组变量及其类型,需要预先定义这些符号从而可以在没有运行时错误的情况下执行代码块。后置条件描述了在代码块的末尾定义了哪种变量,并在后面可被其他代码块使用。从一个小代码块开始,语义感知组合技术通过反复合并不同代码块来进行扩展。

CodeAlchemist:用于在JavasScript引擎中查找漏洞的代码生成工具

图 1 CodeAlchemist 架构图

文中提出了模糊测试工具 CodeAlchemist 的体系架构(如图 1),它将一组 JS seeds 文件、一组用户可配置的参数作为输入测试目标 JS 引擎,并输出在引擎中的一组错误。其主要包含三个部分:Seed Parser 模块将 JS seeds 分解为不同的代码块,Constraint analyzer 模块为每个代码块推断出其组合约束条件,Engine fuzzer 则根据组件约束条件池中的代码块,生成测试用例并针对目标 JS 引擎执行生成的测试用例。如果引擎崩溃,它会在文件系统上存储相应的测试用例。

CodeAlchemist:用于在JavasScript引擎中查找漏洞的代码生成工具

算法1 代码生成算法

其中代码生成算法如算法 1,其中 i max 表示生成算法的最大迭代轮数,p blk 代表重新生成代码块的概率,i blk 表示生成块的最大迭代轮数,d max 则代表冲组合块的最大嵌套层数。

CodeAlchemist:用于在JavasScript引擎中查找漏洞的代码生成工具

表 1 截至 2018 年 7 月 10 日最新 JS 引擎上发现的程序崩溃次数

作者对工具进行了实验评估,评估角度包含了可用的测试用例数量、造成程序崩溃的错误数量以及与 jsfunfuzz、IFuzzer 经典工具的效果对比。最终效果对比如表1所示。

CodeAlchemist:用于在JavasScript引擎中查找漏洞的代码生成工具

表 2 CodeAlchemist 发现的 bug

最后,在证明了 CodeAlchemist 可以有效地在受控环境中查找JS引擎中的错误基础上,作者在使用的同一台服务器上针对最新的 JS 引擎也运行了 CodeAlchemist,并使用各种不同的参数测试大约一周,共发现 19 个程序错误,其中11个可被进一步利用。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

素数之恋

素数之恋

(美)约翰·德比希尔 / 陈为蓬 / 上海科技教育出版社 / 2008-12-01 / 34.00元

1859年8月,没什么名气的32岁数学家黎曼向柏林科学院提交了一篇论文,题为“论小于一个给定值的素数的个数”。在这篇论文的中间部分,黎曼作了一个附带的备注——一个猜测,一个假设。他向那天被召集来审查论文的数学家们抛出的这个问题,结果在随后的年代里给无数的学者产生了近乎残酷的压力。时至今日,在经历了150年的认真研究和极力探索后,这个问题仍然悬而未决。这个假设成立还是不成立? 已经越来越清楚,......一起来看看 《素数之恋》 这本书的介绍吧!

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具