Fuzzing Configurations of Program Options

摘要:

尽管许多真实世界的项目都附带配置启用/禁用功能,fuzz大多被用于测试单配置这些项目。在这项工作中,我们首先进行实证研究,以了解程序配置影响起毛性能。我们发现限制竞选一个配置会导致未能覆盖大量的代码。我们还观察到不同的项目配置贡献不同的大量的代码覆盖率,挑战,每一个可以单独有效地晕。出于这两个观测结果,我们建议ConfigFuzz,模糊配置以及正常输入。ConfigFuzz转换目标程序编码其程序选项内fuzzable输入的一部分,所以可以重用现有fuzz的变异算子模糊程序配置。我们实例化ConfigFuzz六个可配置的,常见的模糊目标,并集成在FuzzBench处决。在我们的评估中,ConfigFuzz优于两个基线fuzz四目标,而结果混杂在其他目标由于程序大小和配置空间。我们也分析了期权晕ConfigFuzz以及它们是如何影响性能。

1 介绍

问题:

大多数模糊器(及其科学评估)集中在给定单个固定程序配置(例如,引用[16,19]),因此可能无法正确测试程序功能的重要部分。因此,潜在的罕见缺陷可能会逃过检测,对模糊化性能的科学评估可能无法说明全貌。

现状

对此问题的简单补救方法是模糊所有有效的程序配置。然而,现实世界的程序的配置空间通常很大,这使得彻底模糊所有配置是不可行的。软件测试文献对这个问题进行了广泛的研究。一个广泛采用的解决方案是组合测试[17,18],其提出测试覆盖配置空间的某些属性的配置样本(例如,所有选项对出现在样本中的一些配置中)。此外,已经开发了基于字典或语法的方法来模糊程序配置[27,29].由这些技术生成的程序配置可以用作输入来模糊程序的输入文件。
然而,由于缺乏进一步的预先了解,现有技术将在每个配置上花费相同的时间,即使不同的配置实现不同数量的可达代码;这样的平等待遇浪费资源。 AFL有一个实验性的argv_fuzzing特性[2]模糊程序的argv和程序的输入数据。虽然可以通过argv_fuzzing将程序配置建模为argv中的无界字符串来模糊程序配置,但我们发现这种方法浪费了大部分时间来试图获得有效的配置

ConfigFuzz

上述观察促使我们设计ConfigFuzz,它能够同时有效地模糊程序配置和输入数据(第4).ConfigFuzz将程序的输入空间分成两部分:配置字节和数据字节。我们将程序选项编码到转换程序的配置字节中,并允许fuzzer的变异算子在fuzzing活动中决定何时以及如何变异程序的配置。由于配置空间是高度结构化的,ConfigFuzz的编码确保程序选项的变化总是生成有效的配置。同时,数据字节(即正常输入数据)也被模糊器变异,并作为目标程序主函数的输入给出。
具体来说,ConfigFuzz将程序的选项规范——本质上是选项的语法——作为输入。该规范区分不同的选项类型(即布尔型、选择型、数字型和字符串型),并指定每个选项的有效值。例如,数值选项的有效值是可以用范围指定的整数或实数。该规范的设计方式使用户可以自由控制模糊哪些选项,并可以禁用某些选项组合。这是因为有时模糊的程序配置可能没有帮助。有些命令行选项不是为在安全关键的上下文中使用而开发的,例如实验性功能的选项。此外,程序选项之间可能存在依赖或冲突关系,在模糊配置时,应避免这些选项的某些组合。

实验

我们使用ConfigFuzz来转换六个常见的模糊目标,并使用Google的FuzzBench [7]框架,运行AFL和AFL++ [19]模糊器(部分5).我们将ConfigFuzz的模糊化性能与两种基线进行了比较:(1)当总是模糊化单个默认

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值