论文部分内容阅读
软件安全漏洞是威胁网络与信息系统安全的关键因素之一。恶意的攻击者可以利用安全漏洞访问未授权资源,破坏敏感数据,进而威胁信息系统的安全。如果能在软件发布之前发现安全漏洞,或者在软件运行时检测到漏洞并阻止漏洞被利用,则可大大提高软件的安全性。软件漏洞测试技术旨在预先发现软件潜在的安全漏洞,是保证信息安全的重要技术,近20年来一直受到学术界和工业界的高度关注。实践证明,软件测试是挖掘软件漏洞的有效方法。本文从软件测试的角度出发,在充分调研了现有的软件测试技术的基础上,对软件测试尤其是漏洞测试的若干关键问题进行了深入分析,提出了相应的解决方案并用实例验证了方案的有效性。论文的主要工作和创新之处如下:(1)提出了用包裹函数实现软件故障注入测试的方法。论文从分析基于EAI模型的软件故障注入测试的具体实现所面临的关键技术入手,针对如何高效灵活地在被测进程中注入软件故障的问题,提出了用包裹函数替换安全相关函数以实现故障注入和安全检测的方法,通过实验证明了该方法的可行性。(2)提出了基于广义EAI模型的软件测试方法。论文提出了把漏洞测试经验总结为知识库,利用先验知识构造测试用例的思想,可以在一定程度上避免软件漏洞测试的盲目性,从而提高测试用例的揭错能力;针对很难控制和监测被测进程的状态问题,论文提出了基于“虚拟执行机”的动态测试方法,可以解决被测试进程的状态可观测和可控制问题。论文用Xen实现基于广义EAI模型的软件测试,证实了该模型的有效性。(3)提出了基于属性相关分析的测试集缩减方法。针对测试用例集合中存在大量冗余测试用例的问题,论文从分析测试需求中各个属性的相互关系入手,提出了基于属性相关性分析的测试用例集合缩减方法。实验结果表明,论文提出的方法可以大幅度地缩减测试用例集合。(4)提出了利用进程完整性实现漏洞检测的方法。论文从脆弱性类别的安全关系出发,定义了一种进程完整性度量,在此基础上提出了基于函数调用的脆弱性测试方法,利用源码转换和函数调用状态信息来测试程序的脆弱性。论文利用该方法实现了对缓冲区溢出攻击的检测,结果表明该方法简单而且高效。