模糊交互式 CLI 的方法

逆向工程 模糊测试
2021-07-03 20:22:45

我有一个 IoT 系统,它有一个基于命令行的交互式 shell,可用于配置系统。在检查反汇编/反编译时,我意识到 CLI 有很多功能/代码,程序中有很多可能的逻辑路径。因此,我还没有完全确定任何内存损坏漏洞,但我怀疑可能存在可能导致错误的边缘情况。这是我通常会应用模糊测试来加强我的覆盖范围的地方。

但是,我无法确定一种创建合适的输入语料库进行模糊测试的方法。CLI 支持许多命令,其中一些命令甚至会生成自己的交互式 CLI,其中包含许多级别的命名空间。可能需要几个命令才能到达程序的某些部分。

关于如何解决这个问题,我有两个想法:

  1. 创建一个全面的语料库,包括大量的命令和可能的路径。构建起来会很乏味;不可能涵盖一切。
  2. 无输入语料库;使用完全反馈驱动的模糊测试(如果在这种情况下甚至可能的话)。看起来这会非常低效,因为 fuzzer 要学习的路径很多。

我能够通过模糊器运行二进制文件,并且我相信模糊器正确地将输入传递给它,所以这不是问题。我打算为此使用 honggfuzz,但我认为这对问题并不重要。我没有源代码,所以这将是黑盒和未检测的模糊测试。

我的问题是,我应该如何创建输入语料库来模糊具有许多可能输入的黑盒程序?

1个回答

感谢@julian 的评论,我能够搜索到更多相关的术语。

对于这种特殊情况,我决定使用AFL 的 字典模式,您可以在其中为其提供组成目标应用程序可接受语法的单词列表。

例如,让我们假设目标应用程序是一个交互式计算器,它支持所有基本的数学运算符,例如4 + 5500 / 2为此,我将创建一个包含以下内容的字典文件:

"+"
"-"
"*"
"/"
"^"
...

除了一组典型的输入案例,这个文件(或一个文件目录,每个文件都有一个有效的语法)将通过-x选项传递给 AFL ,AFL 将尝试创建有效的语法以提高模糊测试的覆盖率。