模糊器如何处理无效输入?

时间:2018-03-29 10:55:30

标签: fuzzing

假设我有一个程序以指针作为输入。如果没有关于指针的结构的先验知识,模糊器如何创建实际上可以命中程序内部的有效输入?为了使这更具体,想象一个人工C程序

<div class="bg-primary">
  <p>Some text</p>
</div>

<div class="bg-secondary">
  <p>Hello World</p>

</div>

<div class="bg-primary">
  <select class="selector">
          </select>
</div>

在某些情况下,测试程序首先检查输入格式。如果输入格式不好,则会引发异常。在这种情况下,除了异常提升声明之外,模糊器如何才能达到程序点?

2 个答案:

答案 0 :(得分:3)

大多数模糊器对程序的内部结构一无所知。不同的模糊器以各种方式解决了这个问题:

  1. 根本不处理它。只是抛出随机输入,希望产生一个输入,通过一些/所有检查。 (例如 - radamasa
  2. 改变一个有效的输入 - 取一个已知的有效输入,并改变它(翻转位,删除部分,添加部分等),在许多情况下,它足以通过部分或全部检查。例如 - 如果你想模糊VLC,你将获取一个有效的电影文件作为模糊器的输入,它将为VLC提供它的突变。这些通常被称为基于突变的模糊器。 (例如 - zzuf
  3. 如果您事先了解输入结构,请构建输入模型,然后改变其中的特定字段。这种方法的一大优点是能够处理非常特定类型的字段 - 校验和,哈希,大小等。这些通常被称为基于生成的模糊器。 (例如 - 加标,sulleytheir successorspeach
  4. 然而,近年来,一种新型的模糊器得到了发展 - 基于反馈的模糊器 - 这些模糊器在有效(或非有效)输入上执行突变,并根据他们从模糊程序收到的反馈,他们决定如何以及如何变异下一个。通过在编译时通过注入跟踪,通过在运行时修补程序注入跟踪代码或使用硬件跟踪机制来检测程序执行来接收反馈。其中首先是AFL(你可以阅读更多关于它here)。

答案 1 :(得分:1)

模糊器会在攻击面上抛出各种输入的随机组合。目的是寻找任何机会让“黄金BB”通过输入检查并得到可以进一步探索的回应。