模糊测试面面观 | 模糊测试是如何准确定位问题的?

2023-09-05 09:39


 前几期我们介绍了常见的模糊测试工具、模糊测试的优势及异常发掘,本期我们就来聊一下模糊测试是如何准确定位问题的。我们知道模糊测试是一种通过向目标系统提供非预期的“坏数据”输入并监视异常结果来发现软件漏洞的方法,能否准确定位问题是模糊测试工具的重要考核指标,测试者必须能够知道使目标程序状态变化所对应的测试数据是什么,如果不具备重现测试结果的能力,那么整个过程就失去了意义。


准确定位问题是模糊测试的一个挑战性任务,因为模糊测试通常是基于黑盒测试的方法,无法直接查看内部源代码。然而,通过一些技巧和策略,可以在模糊测试中更准确地定位问题。



发现问题,收集信息




首先,当模糊测试运行后发现问题,关键是收集问题相关的信息。这些信息包括:

输入数据样本

收集导致问题的输入数据样本,这是重现问题的关键。尽可能保存多个触发问题的样本,因为不同的输入可能导致不同的问题。


触发条件

记录问题发生的环境和条件。这可能包括操作步骤、应用程序状态、用户角色等。触发条件有助于在后续的分析中重现问题。


错误信息和堆栈跟踪

如果应用程序崩溃或报错,就需要记录错误消息和堆栈跟踪信息。这些信息提供了关于问题所在位置的线索。


日志记录

如果应用程序生成日志文件,检查和保存与问题相关的日志。日志记录可能提供问题发生时的更多背景信息。




准确定位问题




一旦问题信息收集完毕,即可采取以下策略来准确定位问题。

最小复现样本

尝试从模糊测试中生成问题的最小复现样本,即一个能够触发问题的最简单的输入样本。有助于更快地重现问题,而不必依赖于模糊测试生成的大量输入。


静态分析

如果你有访问源代码的权限,可以使用静态代码分析工具来分析模糊测试发现的问题。这些工具可以帮助你定位问题的源代码位置,以及导致问题的潜在原因。


动态分析

使用调试器、性能分析工具和内存分析工具来观察程序的行为。这可能会揭示问题发生时的程序状态、数据流和内存情况。


输入数据分析

分析触发问题的输入数据,尤其是与问题相关的数据部分。这可能有助于确定问题的根本原因。


回归测试

修改程序以修复问题后,进行回归测试以确保修复不会引入新的问题。如果模糊测试生成了问题的输入样本,可以使用这些输入进行回归测试。


协作与共享

如果问题无法准确定位,可以将问题的信息和数据与开发团队共享,以寻求其他人的帮助。有时其他开发人员可能具有不同的视角和经验,有助于问题的定位。


需要强调的是,模糊测试可能会找到许多问题,其中一些可能是误报或低优先级的问题,定位问题需要耐心、技巧和实践。虽然模糊测试问题的准确定位具有挑战性,但结合静态分析、动态分析、输入数据分析以及协作,可以提高问题定位的准确性和效率,从而更好地解决软件中的安全问题。