首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于覆盖率的JavaScript应用模糊化

基于覆盖率的JavaScript应用模糊化
EN

Stack Overflow用户
提问于 2020-08-24 20:15:02
回答 1查看 292关注 0票数 0

American Fuzzy Lop和概念上相关的LLVM libfuzzer不仅生成随机模糊字符串,而且还观察测试代码的分支覆盖率,并使用遗传算法尝试覆盖尽可能多的分支。这增加了下游更有趣的代码的命中频率,否则大多数生成的输入将在某些反序列化或验证过程中提前停止。

但是这些工具在本机代码级别工作,这对JavaScript应用程序没有用处,因为它将试图覆盖解释器,而不是真正的解释代码。

那么,有没有一种方法可以模糊JavaScript (最好是在浏览器中运行,但在node.js中运行的测试也会有所帮助)的覆盖率指导?

我查看了this old question中提到的工具,但那些使用javascript的工具似乎没有提到任何关于覆盖率分析的内容。虽然radamsa提到可以选择将它与覆盖率分析配对,但我还没有找到任何关于如何实际做到这一点的文档。

一个fuzz-test java-script (在浏览器中)如何使用覆盖率指导?

EN

回答 1

Stack Overflow用户

发布于 2020-08-29 16:01:36

模糊JavaScript引擎吸引了大量的关注,因为浏览器用户的数量约为40亿。已经做了一些工作来发现JS引擎中的错误,包括流行的大型引擎,如v8,webkit,chakracore,gecko,或一些小型嵌入式引擎,如jerryscript,QuickJS,jsish,mjs,mujs。

使用AFL很难找到bug,因为AFL提供的变异机制对于JS文件来说是不实用的,例如,bitflip几乎不是一个有效的变异。由于JS是一种结构化语言,有几种使用ECMAScript语法来变异/生成JS文件(种子):

LangFuzz解析示例JS文件并将其拆分成代码片段。然后,它重新组合片段以生成测试用例。

jsfunfuzz从手动编写的JS语法中随机生成语法上有效的JS语句。

Dharma是一个基于生成的、上下文无关的语法模糊器,根据给定的语法生成文件。

Superion使用JS文法指导下的基于树的变异来扩展AFL。

上述工作可以很容易地通过语法检查,但在语义检查中失败。很多生成的JS种子在语义上是无效的。

CodeAlchemist使用基于静态类型分析的语义感知方法来生成代码段。

与JS引擎相关的错误有两个级别:简单的解析器/解释器错误和深层的逻辑错误。最近,有一种趋势,简单的bug数量减少,而越来越多的深层bug出现。

DIE使用方面保留突变来保留CVE的期望属性。它还使用类型分析来生成语义有效的bug。

一些作品专注于突变中间表示法。

Fuzzilli是一种基于IR级别突变的覆盖率制导模糊器。IR上的突变可以保证语义有效性,并可以转移到JS上。

模糊JS是近年来安全/SE顶级会议上的一个有趣而热门的话题。希望这些信息能对你有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63560866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档