American Fuzzy Lop和概念上相关的LLVM libfuzzer不仅生成随机模糊字符串,而且还观察测试代码的分支覆盖率,并使用遗传算法尝试覆盖尽可能多的分支。这增加了下游更有趣的代码的命中频率,否则大多数生成的输入将在某些反序列化或验证过程中提前停止。
但是这些工具在本机代码级别工作,这对JavaScript应用程序没有用处,因为它将试图覆盖解释器,而不是真正的解释代码。
那么,有没有一种方法可以模糊JavaScript (最好是在浏览器中运行,但在node.js中运行的测试也会有所帮助)的覆盖率指导?
我查看了this old question中提到的工具,但那些使用javascript的工具似乎没有提到任何关于覆盖率分析的内容。虽然radamsa提到可以选择将它与覆盖率分析配对,但我还没有找到任何关于如何实际做到这一点的文档。
一个fuzz-test java-script (在浏览器中)如何使用覆盖率指导?
发布于 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顶级会议上的一个有趣而热门的话题。希望这些信息能对你有所帮助。
https://stackoverflow.com/questions/63560866
复制相似问题