论文部分内容阅读
随着软件功能的不断强大,软件的规模和复杂性也变得越来越大,开发安全、健壮的软件越来越难,网络技术的发展更使得软件的漏洞暴露在大量的恶意攻击和入侵事件中,因此软件的安全性值得引起足够的重视和研究。在对比研究常见漏洞挖掘技术的优缺点的基础上,深入分析研究了Fuzzing技术的原理、方法和步骤,探讨了进行有效Fuzzing需要注意的问题。重点研究了网络协议的Fuzzing技术和漏洞挖掘。在分析网络协议Fuzzing的一般方法的基础上,提出了模块化编写Fuzzing工具以提高移植性、预定义测试数据集以提高效率、开发调试器代理以提高Fuzzer的自动化和智能化、自动化解析数据包以提高通用性和智能性、Fuzzing过程中牺牲一些自动化而加入用户参与以提高效率等新的方法,并针对TFTP协议,按照提出的方法逐步实现了一个高效、智能、通用的Fuzzer。其间分别用硬编码方法、基于块的方法和通用方法实现了3种TFTP协议Fuzzer,对5种典型的TFTP服务器进行了Fuzzing测试实验,并对实验结果进行了分析研究,比较了三种实现的优点和缺点,得出了以下结论:硬编码的实现方法比较适合一些规模较小、规范说明比较简单、易于研究的协议,这时候采用硬编码方法不需要花很多时间又能达到很高的效率;基于块的实现方法比较适合有明确的Fuzzing目标,只需要了解或关注协议的一个或几个方面的情况;通用实现方法适用于私有协议等更广泛的范围。没有一种方法是完美的,综合硬编码实现和通用实现的优点,能提高Fuzzer的效率、智能化和通用性。最后研究了目前最流行的Web应用程序Fuzzing与漏洞挖掘。深入分析研究了Web应用程序Fuzzing不同于一般网络协议Fuzzing的特点,重点研究了实现Web应用程序Fuzzer的难点,包括确定Fuzzing变量、发送畸形数据、监测服务器错误等方面,最后设计实现了一个简单的Web Fuzzer进行了实验,实验结果说明了Fuzzing的可行性。