论文部分内容阅读
随着通信协议的日益复杂,以及针对协议漏洞的攻击手段和技术的不断发展,因协议出错而引起的网络异常甚至崩溃现象层出不穷,危害了整个网络的信息安全。协议测试是协议工程的重要组成部分,是保证协议正常运行的关键技术。传统协议测试方法以一致性测试为代表,主要关注于协议的功能性,无法保证协议实现的安全性,因此需要进行协议安全测试的研究。协议存在的安全漏洞可以分为两类,一类是协议设计错误,例如导致使用者可以通过非法手段获取到不合法的权限。另一类是协议实现错误,由于通信协议是软件的一种,其实现过程不可避免的引入错误。本文中主要研究针对协议实现错误的安全测试理论和方法。现有针对协议安全测试的研究大都基于传统形式化模型如有限状态机等,采用随机或手动方法生成安全测试用例,通过观察待测协议实现在测试过程中是否崩溃来检测协议错误。现有方法中存在以下不足之处:首先,安全测试大都针对协议的数据流,而传统形式化模型描述协议数据流能力有限,不能满足安全测试的需求。其次,协议实现中可能存在的错误集合是无穷的,现有方法无法分析和评估测试的覆盖率。最后,协议崩溃只是协议错误可能导致的结果之一,现有方法更接近于鲁棒性测试,检错能力有限。本文中对基于构造类别代数的协议安全测试理论和方法进行了研究,主要工作集中在以下几个方面:1)提出了扩展的构造类别代数模型构造类别代数是代数规范的一个扩充,适用于描述协议的数据流。本文对构造类别代数的基本定义进行了扩展:首先增加了对协议控制流状态的描述,并将其同内部环境变量结合,给出了协议状态的定义。而后根据协议测试过程中报文的不同流向,重新定义了可控制和可观察操作,给出了可控制函数的一般形式。最后,对公理形式进行了扩展,增强其描述协议行为的能力。扩展后的模型具有同EFSM相同的控制流描述能力,但数据流描述能力更强,可用于协议安全测试的研究。2)提出了基于变异分析的协议安全测试方法变异分析是基于错误模型的测试方法,将其应用于基于构造类别代数的协议规范中,可以得到一系列规范的变异体,每个变异体对应于一类协议实现可能存在的错误。通过设计变异算子,可以限制协议实现中可能错误的规模,此外可以更有针对性构造测试用例,有效解决现有研究中存在的问题。本文对变异分析在构造类别代数中的应用进行了研究。首先设计了几类针对构造类别代数的变异算子,分析了应用算子以生成变异体的过程。而后分析了产生等价变异体的原因,给出了一个基于公理优先级动态递推,生成非等价变异体及其对应变异单元集合的算法。3)提出了协议安全测试序列生成方法本文中研究了基于变异体生成协议安全测试序列的方法,由于构造类别代数中同时描述了协议的控制流和数据流,因此在生成协议安全测试序列的过程中,需要同时考虑到控制流状态的可达性和数据流状态的可执行性。本文中分析了变异单元同安全测试序列的关系,先后给出了基于公理代入和逆向推导,以及基于可执行树正向推导安全测试序列生成方法。最后提出了一个结合主动和被动测试的协议安全测试序列生成方法,实验证明该方法可以有效减少协议测试序列的总长度,降低测试代价。4)设计并实现了分布式协议测试系统本文中设计并实现了一个分布式的协议安全测试系统,包括了一个主控中心和多个代理节点。系统基于底层支撑库的支持,将协议测试过程描述为对应的测试用例,并通过协调主控中心和分布式代理节点的行为,提供了对协议自动化测试的支持。该系统可用于协议的一致性测试和安全测试的研究中,大大提高测试用例开发和执行的效率。