使用克朗Libfuzzer覆盖引导引导引擎与Nim

2021-06-06 06:53:13

模糊是一种自动化测试,连续操纵输入TOA程序,以查找诸如恐慌或错误之类的问题。这些半随机数据变化可以发现现有的单元测试可能会错过的新代码覆盖率,以及否则将被忽视的未发现案例错误。由于模糊可以达到SpeedEdge案例,因此模糊测试对于寻找安全利用和漏洞特别有价值。

有关更多信息,请观看谈话消毒您的C ++代码[4]测试目录中有演示。

在95%的案例中,您需要的是定义文件中的过程TestOneInput。

PROC FUZZME(数据:OpenArray [Byte]):Bool =结果=数据。 len> = 3和数据[0]。 char ==' f'和数据[1]。 char ==' u'和数据[2]。 char ==' z'和数据[3]。 char ==' z' #: - < proc testoneinput(数据:OpenArray [Byte]):CINT {。 exportc:" llvmf​​uzzerteStoneinput"} =结果= 0 discard fuzzme(数据)

包括用于模糊目标的独立主程序。按照测试覆盖示例的说明进行操作。运行可执行文件时,通过作为参数的参数列表测试单元列表。

但是,输入语法的缺乏也可以导致复杂输入类型的低效模糊,其中任何传统突变(例如BitFlippe)导致目标API在解析的上阶段拒绝的无效输入。然而,通过一些额外的努力,可以将LibfuzzerCan变成一个语法感知(即结构感知)模糊引擎,为特定输入类型。