我有一个 IoT 系统,它有一个基于命令行的交互式 shell,可用于配置系统。在检查反汇编/反编译时,我意识到 CLI 有很多功能/代码,程序中有很多可能的逻辑路径。因此,我还没有完全确定任何内存损坏漏洞,但我怀疑可能存在可能导致错误的边缘情况。这是我通常会应用模糊测试来加强我的覆盖范围的地方。
但是,我无法确定一种创建合适的输入语料库进行模糊测试的方法。CLI 支持许多命令,其中一些命令甚至会生成自己的交互式 CLI,其中包含许多级别的命名空间。可能需要几个命令才能到达程序的某些部分。
关于如何解决这个问题,我有两个想法:
- 创建一个全面的语料库,包括大量的命令和可能的路径。构建起来会很乏味;不可能涵盖一切。
- 无输入语料库;使用完全反馈驱动的模糊测试(如果在这种情况下甚至可能的话)。看起来这会非常低效,因为 fuzzer 要学习的路径很多。
我能够通过模糊器运行二进制文件,并且我相信模糊器正确地将输入传递给它,所以这不是问题。我打算为此使用 honggfuzz,但我认为这对问题并不重要。我没有源代码,所以这将是黑盒和未检测的模糊测试。
我的问题是,我应该如何创建输入语料库来模糊具有许多可能输入的黑盒程序?