当前位置: 代码迷 >> 综合 >> USENIX 2021-The Use of Likely Invariants as Feedback for Fuzzers
  详细解决方案

USENIX 2021-The Use of Likely Invariants as Feedback for Fuzzers

热度:67   发布时间:2023-12-14 02:31:55.0

摘要

虽然模糊测试被证明是发现软件缺陷的一种非常有效的技术,但开放性挑战仍然存在。它的一个主要局限性是,流行的覆盖率引导设计经过优化,可以覆盖受测程序的不同部分,但当仅可访问性不足以触发漏洞时,这种设计会遇到困难。实际上,许多bug需要一个特定的程序状态,该状态不仅涉及控制流,还涉及一些程序变量的值。不幸的是,过去提出的用于捕获项目状态的替代勘探策略在实践中几乎没有帮助,因为它们会立即导致状态爆炸。
在本文中,我们提出了一种新的反馈机制,通过考虑程序变量之间的常用值和关系来增加代码覆盖率。为此,我们在基本块级别学习了大量不变量,并相应地划分了程序状态空间。我们的反馈可以区分输入何时违反一个或多个不变量并奖励它,从而重新定义代码覆盖率通常提供的程序状态近似值。
我们在名为INVSCOV的原型中实现了我们的技术,该原型是在LLVM和AFL的基础上开发的。我们的实验表明,相对于使用纯代码覆盖率反馈的模糊器,我们的方法可以发现更多不同的bug。此外,他们还发现了一个每天在OSS Fuzz上测试的库中的两个漏洞,目前仍然存在于最新版本中。

内容

问题:事实上,只有当i.)程序执行达到给定的指令,ii.)应用程序的状态满足某些条件。在极少数情况下,状态没有条件,因为LAVA-M[22]数据集中的大多数错误都是人工创建的,只需到达目标应用程序中的某个点即可触发[38]。一方面,这一方面非常重要,因为使用代码覆盖率来奖励探索结果,而事实上模糊者没有任何动机来探索已经观察到的一组控制流事实(例如分支及其频率)的更多状态。因此,对于现有工具来说,检测涉及程序状态复杂约束的bu