问:我听说一个叫“模糊测试”(Fuzzing)的新技术。这种技术是不是查找出软件漏洞的一个有效方法呢?
答:模糊测试,事实上不是一种新技术。它早在1989年就被威斯康星州的麦迪逊大学BartonMiller教授发明。由于目前人们聚焦于开发更加安全的软件,模糊测试才被更加广泛应用并成为公认的代码测试方法。
在软件测试过程中,一个程序被随机产生的数据大量验证,称为模糊测试。假如一个程序在应对任一的这类数据上失效,开始出现冲突、锁住、消耗大量内存或者产生不可控制的程序错误,开发者就知道代码中某处出现了bug。因此这个缺陷可能在程序发布或者配置前被定位并予以矫正,从而使可能的程序漏洞不出现在程序最终发行版本中。软件测试被频繁地用于测试缓冲区溢出漏洞,而这种溢出在输入字符的数量超出可用的缓冲区空间时候发生。
软件程序有许多种的输入方式,比如鼠标、键盘和触摸屏。另外还包括调用其它程序或植入实用系统中的控制器数据。模糊测试可以有效地找出漏洞,是由于输入一个程序的数据是随机的,因此不会被任何的关于软件应该如何运行的偏见所束缚。当人们自己测试软件的时候,可能作出软件被如何使用的假设,而造成只对特定的输入进行测试。
一个彻底的模糊测试是对有效数据和随机数据的联合调试。有效数据测试防止程序在抵达一个欠缺的代码块前出现拒绝信息。
你必须意识到,虽然通过一个模糊测试,这并不意味着一个程序完全没有bug。软件测试仅仅是随机测试的模拟,是程序行为的一个有限样本的测试。测试可能只展现那些软件可以处理的没有冲突的例外。还有,模糊测试不能测试出开发中出现的逻辑错误。
模糊测试一个大的优点在于它的成本效率;测试通常是自动化的,而且容易配置。模糊测试是一种有效的软件测试方法,但它也只是众多软件测试方法中的一种。静态分析、相互评价和安全代码方法学都是安全软件开发的方法。