论文部分内容阅读
随着计算机网络的不断发展和各种接入互联网终端的广泛使用,网络和人们的生产生活关系日益紧密,因而网络安全也受到更加广泛的关注。网络协议是网络应用程序功能逻辑的核心,然而网络协议缺陷广泛存在,像“心血”、“毒液”等网络协议缺陷导致了整个互联网范围的安全危机。因而对于网络协议进行高效测试的重要性不言而喻。对网络应用程序进行测试,关键就在于对其协议一致性进行检验,即检验协议的实现和协议设计规范之间的一致性。但是网络协议测试复杂,覆盖协议处理程序的所有分支是一个组合爆炸问题,而且进行测试的测试用例必须符合网络协议的报文格式规范。另一方面,已有的协议测试方法,如形式化验证、模糊测试和基于动态测试用例生成的协议测试方法存在不足。形式化验证中,我们很难确保推理得到的协议实现模型的准确性;模糊测试在生成测试用例时具有很大程度的盲目性;而已有的基于动态测试用例生成的方法存在对操作系统函数调用等信息的依赖等问题,因而跨平台适用性不好。此外,由于协议测试中需要对协议处理程序的每个分支或协议状态进行反复测试,所以需要频繁地进行回退,同时就需要对协议处理程序执行的内存和磁盘信息记录下来。而已有的测试方法中,在对协议执行状态进行回放和重复测试时,执行状态的存储和恢复效率低,严重影响了自动化协议测试的效率。本文提出并实现了一种基于程序语义分析的协议测试方法,避免了已有系统对操作系统平台的依赖性。通过增量式快照文件系统大幅度提升了协议状态的存储和恢复效率,提升了网络协议自动化测试性能。本文主要的工作内容包括以下四点:1)采用结构化分析的方法对网络协议处理程序进行分析,得到程序底层的基本语义信息。通过不同的控制结构与报文字段之间的绑定分析,实现对协议报文的分割和语义推断,并且实现对网络协议报文格式的重构。在此基础上通过污点传播收集了与报文污点相关的控制条件约束,从而实现动态测试用例的生成和协议测试;2)将动态污点传播技术扩展到多个协议执行实体,通过考察正常协议交互时的污点传播关系,在协议测试中,检测异常的协议执行实体间污点传播关系,发现信息泄露等类型的网络协议缺陷;3)设计并实现了一套增量式快照文件系统,以分布式Key-Value数据库作为文件系统底层存储引擎,将协议执行状态快照所采用的层次化数据模型高效映射到Key-Value数据模型,采用基于线段树数据结构的优化方法,提升了协议状态存储和恢复的效率。该文件系统大幅度提升了测试平台自动化协议测试的效率;4)针对网络协议测试的特点,通过以上技术构造了一个基于程序语义分析的网络协议测试平台Pro Test,我们将该平台运用于测试真实的网络协议,发现了已有协议中存在的缺陷,验证了方法的有效性。