论文部分内容阅读
目前基于构件的软件工程(Component-based Software Engineering,CBSE)已成为软件工程领域的研究热点。各种新型构件开发技术进一步提高了构件开发效率及构件性能,但构件的可靠性和安全性问题始终没有得到较好的解决,并一直困扰着构件的开发方和使用方。对构件和构件系统进行测试是保障和提高系统正确性、可靠性和安全性的重要途径。当前构件测试方法和技术集中于功能性测试,在一定程度上保证了构件功能的正确性及完备性。但甚少将构件安全性测试作为一个专门课题进行研究,缺少一些有效检测构件安全漏洞的模型、方法和技术。目前仅有的一些构件安全测试方法也主要采用传统的软件安全测试方法,但软件安全测试技术本身并不成熟。另外大部分构件源代码不可知及其高度独立性,给构件特别是第三方构件的安全性测试带来了挑战。基于软件错误注入技术,研究构件安全测试错误注入模型,并基于接口错误注入及化学抽象机研究构件安全性测试方法及其原型系统具有重要的理论和实际意义。错误注入技术作为一种非传统的软件测试技术是指按照特定的故障模型,用人为的有意识的方式产生故障,并施加特定故障于被测系统中,从而加速被测系统错误和失效的发生。构件安全漏洞通常是一些小概率故障,有一定的故障模型并通常跟环境有关。鉴于构件安全漏洞的特点,在构件安全测试中可以首先建立相应的构件安全错误注入测试模型,然后根据模型及其相应的算法注入相应的错误于被测构件,从而加速暴露构件安全漏洞以达到安全性测试的目的。在建立一种构件安全测试错误注入模型FIM(Fault Injection Model)的基础上,通过错误注入测试用例生成算法TGSM(Test-cases Generating based on Solution Matrix)生成满足K因素覆盖的解矩阵,则解矩阵的所有行数据组成了错误注入测试用例。实验表明,FIM生成的3因素覆盖错误注入测试用例效果显著,能用适当的测试用例触发绝大部分构件安全异常。鉴于大部分构件安全漏洞由于非常规或超长等输入参数所导致,因而,可针对性的研究一种基于接口错误注入的构件安全性测试方法。该方法首先给出构件脆弱性错误注入算子、断言规则库及其脆弱因子,然后基于错误注入算子和断言规则库给出一种构件安全测试算法。该算法根据错误注入算子有针对性地产生测试用例并执行测试,动态监测机制能实时监测构件运行状态及异常信息。算法根据断言规则库、脆弱性因子及异常信息给出构件安全异常报告及构件安全等级。实验结果表明,这种接口错误注入测试方法可操作性强,对由输入参数导致的构件安全异常具有较好的检测效果。基于化学抽象机的构件安全测试方法能有效测试构件显式及隐式安全异常。该方法首先引入构件的扩展化学抽象机模型,然后根据模型导出构件状态迁移树并生成测试序列,进一步结合接口错误注入方法测试构件显式安全异常。同时,根据给定的构件条件变异及状态变异算法对生成的测试序列进行变异测试,以测试构件隐式安全异常,并根据测试结果得出构件安全异常报告。该方法不但能有效检测构件显式安全异常,而且对构件隐式安全漏洞也具有较好的检测效果。显然,研制自动化的构件安全测试工具将对基于构件的软件工程产生一定影响,并能有效保障构件软件的安全性和和可靠性,是当今软件业界一个极具现实意义和挑战的课题。研究一个针对不同构件标准的构件安全测试基本框架,并针对广泛使用的微软第三方COM构件,设计和实现一个构件安全性测试的原型系统CSTS(Component Security Testing System),CSTS对构件主要从静态和动态两个级别进行安全性测试。在静态级别上,先分析出构件接口信息,然后对接口方法从参数个数、参数顺序、参数范围和参数类型等方面进行错误注入测试;在动态级别上,先执行测试驱动,然后对构件所依赖的内存、磁盘文件系统和注册表等环境进行错误入,再通过强大的监测机制监视错误注入后构件执行情况来判断构件安全异常。该原型系统CSTS具有自动化程度高,操作简单及较好的测试效果等优点。