[NOTE] Full-speed Fuzzing: Reducing Fuzzing Overhead through Coverage-guided Tracing (S&P 19)

这篇文章试图解决在fuzz过程中的这样一个问题:fuzzer对每个testcase的覆盖率都进行了追踪与计算,借此判断此testcase是否覆盖了新的块;但是,大多数testcase都是无法覆盖新块的,因此,大多数计算得到的覆盖率信息都是无用的,反而造成了overhead。

为了解决这一问题,作者将目标程序插桩成两个版本,一个是interest oracle,另一个是tracer。

将目标程序的每一个基本块处插入一个中断,就得到了interest oracle。当运行产生中断时,便是覆盖了新的基本块。此时,使用tracer进行覆盖信息的收集,并移除interest oracle中被覆盖基本块处的中断。随着测试的进行,未被覆盖的块越来越少,interest oracle和原始目标程序也就越来越像。如果testcase的运行没有产生中断,说明没有新的块被覆盖,则跳过覆盖信息收集,直接测试下一个testcase。

这样,大大减少了覆盖信息收集的次数,进而减少了测试过程的overhead。

我的问题:移除中断产生新interest oracle的overhead有多大?

No Comments

Leave a Reply

Your email address will not be published. Required fields are marked *