1、硕 士 学 位 论 文基于错误注入的组件安全性测试研究A Thesis Submitted in Partial Fulfillment of the Requirementsfor the Degree of Master of EngineeringResearch on Security Testing of Software Component Based on Fault InjectionCandidate : Yuan ChanglongMajor : Computer Software and TheorySupervisor : Associate Prof. Xu Lipi
2、ngHuazhong University of Science and TechnologyWuhan 430074, P. R. ChinaJune, 2008独创性声明本人声明所呈交的学位论文是我个人在导师指导下进行的研究工作及取得的研究成果。尽我所知,除文中已经标明引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写过的研究成果。对本文的研究做出贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律结果由本人承担。学位论文作者签名: 日期: 年 月 日 学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,即:学校有权保留并向国家有关部门或
3、机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权华中科技大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。保密 ,在_年解密后适用本授权书。本论文属于 不保密 。(请在以上方框内打“”) 学位论文作者签名: 指导教师签名: 日期: 年 月 日 日期: 年 月 日 华 中 科 技 大 学 硕 士 学 位 论 文I摘 要随着基于组件的软件开发技术的出现,组件特别是第三方组件的使用,大大提高了软件开发的效率。组件技术的基础是存在大量的组件,因此,组件的可靠性和安全性就显得尤为重要。然而有关组件的软件测试技术的研究还相对薄弱
4、,组件的安全性测试更是软件测试理论一个新的研究方向,其理论和技术的研究对于促进组件技术的发展具有重要的理论价值和现实意义。由于不同于传统的软件模块,组件以第三方复用为目的进行开发,多数情况下源代码不可见,对组件尤其是第三方组件只能采用基于“黑盒”的安全性测试方法。在当今黑盒安全性测试领域,错误注入技术作为一种模拟攻击和动态执行分析的有效技术,在软件测评和系统安全性分析方面具有明显的优势。它根据软件代码运行所产生的行为而不是简单地从其结构来研究软件的安全漏洞,这种方法有利于发现那些通过静态结构分析所无法发现的新的潜在安全漏洞来源。SDFI(Static and Dynamic Fault Inj
5、ection)是一种基于错误注入技术的针对组件特别是第三方组件的安全性测试方法。SDFI 建立在安全漏洞分类学研究的基础之上,给出一种组件安全错误注入测试模型 FIM(Fault Injection Model)。FIM 针对组件运行前和运行时两个不同时机,选择两种不同的错误注入检测方法接口参数错误注入和动态环境错误注入,从而达到有针对性地高效率测试组件安全漏洞的目的。SDFI 分别针对接口参数错误注入及动态环境错误注入测试用例“组合爆炸”问题,给出相应的 EEC(Exceptional Elements Coverage)和 DSW(Division and Sorting by Weigh
6、t)测试用例约减算法。在研究项目 COM 组件安全测试系统 CSTS(Component Security Testing System)中,设计和实现了自动化错误注入子系统,并使用第三方COM 组件进行测试,验证了 SDFI 的有效性。关键词:组件,错误注入,安全漏洞,接口错误注入,环境错误注入华 中 科 技 大 学 硕 士 学 位 论 文IIAbstractAlong with the appearance of software development technology based on component, the component, especially the third p
7、arty component, raised the software development efficiency greatly. Component technology based on massive components, therefore the reliably and security of component are especially significant. However, the component testing is still weak, component security testing is a new research direction of t
8、he software testing, its theory and technology will have the important value and practical significance in the promotion of component technologys development.As is different from the traditional software modules, components developed for the third parties reusable purpose, in most cases the source c
9、ode is not visible, the security testing of component especially the third party component can only be based on the “black box“ methods. In todays black box security testing, fault injection as an effective technology of attack simulation and dynamic analysis has obvious advantages in software evalu
10、ation and analysis of system security. From the running behavior rather than simply the structure of software to study security flaws, this approach is conducive to find the new potential security vulnerabilities which cannot be found by static analysis.SDFI (Static and Dynamic Fault Injection) is o
11、ne kind of component security testing method based on fault injection. On the basis of the research in security vulnerabilities taxonomy, SDFI gave one kind of fault injection model-FIM (Fault Injection Model). Before running and after running, FIM respectively chose different fault injection method
12、s interface parameter fault injection and dynamic environment fault injection, to achieve the purpose of security testing of component vulnerability with high efficiency. For the problem of “Portfolio explosion” caused by interface parameter fault injection and dynamic environment fault injection, S
13、DFI gave the corresponding test-cases reduction algorithms EEC (Exceptional Elements Coverage) and DSW (Division and Sorting by Weight). In the project of COM component security testing system (CSTS), designed and implemented the automated fault injection subsystem, and took the typical third party
14、COM components as testing examples, confirmed the validity of SDFI.Keywords:Component, Fault Injection, Security Vulnerability, Interface Fault Injection, Environment Fault Injection华 中 科 技 大 学 硕 士 学 位 论 文III目 录摘 要 .IABSTRACT.II1 绪 论1.1 研究背景和意义 .(1)1.2 国内外研究现状 .(2)1.3 研究目标和方法 .(7)1.4 本文的组织结构 .(7)2 组
15、件安全错误注入测试方法2.1 组件安全性测试 .(9)2.2 错误注入测试方法 .(13)2.3 基于错误注入的组件安全测试方法 .(17)2.4 本章小结 .(22)3 接口参数错误注入方法3.1 接口参数错误注入概念 .(23)3.2 基于 Ballista 的接口参数错误注入方法 .(24)3.3 本章小结 .(28)4 动态环境错误注入方法4.1 动态环境错误注入概念 .(29)4.2 动态环境错误注入关键问题 .(30)4.3 基于 EAI 模型的动态环境错误注入方法 .(31)4.4 本章小结 .(40)华 中 科 技 大 学 硕 士 学 位 论 文IV5 CSTS 中错误注入子系
16、统实现5.1 组件安全测试系统 .(41)5.2 错误注入子系统设计 .(45)5.3 系统实现关键技术 .(47)5.4 本章小结 .(50)6 COM 组件测试及效果评估6.1 COM 组件测试 .(51)6.2 测试效果评估 .(58)6.3 本章小结 .(60)7 结束语7.1 本文工作总结 .(61)7.2 后续工作展望 .(62)致 谢 .(63)参考文献 .(64)附录 攻读学位期间参与的 科研项目 .(69)华 中 科 技 大 学 硕 士 学 位 论 文11 绪 论1.1 研究背景和意义随着计算机技术的迅猛发展,计算机硬件性能越来越高,由于较少考虑硬件的局限以及人们的实际需求,
17、相应的软件规模越来越庞大、结构也越来越复杂。传统面向过程的软件开发技术,已无法胜任软件开发过程中对效率和资源充分利用的要求。为了提高软件开发的效率,面向对象及建立在面向对象技术基础之上的组件技术得到广泛应用,已成为软件开发技术主流 1。组件技术的应用引入了封装和可重用等概念,特别是第三方组件的使用,大大提高了软件开发的效率、降低了软件开发的成本,但同时也增加了软件可靠性和安全性的风险。不可靠或不安全的组件往往成为软件系统中最薄弱的环节,该环节的断裂将导致整个系统的崩溃 2。因此,组件的可靠性和安全性是不容忽视的重要问题,它的好坏与否将直接关系到整个系统的可靠性和安全性以及质量的优与劣。作为保证
18、安全性的重要手段,组件安全性测试也自然成为重要的研究内容。然而,与在组件化程序分析、设计方法以及如何构筑组件系统等方面获得的丰富研究成果相比,有关组件和基于组件的软件测试技术的研究还相对薄弱 3,尤其是组件的安全性测试,更是软件测试理论一个新的研究方向,其理论和技术的研究将对于促进组件化技术的发展具有重要的理论价值和现实意义。错误注入作为一种有效的安全性测试技术,在评估硬件和软件领域的可靠性和安全性方面都获得了充分的肯定 4,是一个强大的技术工具,可以在很大程度上改善软件的可靠性和安全性。其最大优势在于不仅可以模拟对软件应用的恶意攻击,加速待测软件故障的发生,其实施过程还可以实现自动化 5。更
19、为重要的是,错误注入从软件代码运行所产生的行为而不是简单地从其结构来研究软件的安全漏洞,这种方法有利于使测试者发现那些通过静态结构分析所无法发现的新的潜在安全漏洞来源 6。因此,错误注入安全性测试方法在软件测评和系统安全性分析方面具有明显的优势,值得进一步研究将其应用到组件安全性测试当中。华 中 科 技 大 学 硕 士 学 位 论 文21.2 国内外研究现状1.2.1 组件安全性测试目前,组件安全性测试模型、方法和技术,国内外只有为数不多的研究,并且没有任何已实现的组件安全性测试工具。国内,张勇 2提出一种基于规格说明的组件安全性测试方法,该方法通过对组件规格的说明分析提取出组件安全性相关的属
20、性,形成安全性测试规格说明,设计出不同的违反安全性测试规格的错误注入测试案例,从而进行安全性测试。然而,从组件规格说明当中如何提取组件安全性相关属性文中却缺乏可操作的步骤,只是简单说明需要结合测试者对组件可能存在漏洞的了解以及设计者自身的经验产生,显然,该方法的有效性依赖于人工的知识和经验,因而不是一种通用的测试方法,不利于组件安全性测试的自动化。国外,Reliable Software Technologies 公司的 Anup K. Ghosh 和 Gary McGraw7提出了一种 CSC(Component Security Certification,组件安全验证)管道模型:该模型包
21、括测试计划、 “白盒”测试、 “黑盒”测试和验证通过后的数字签名四个顺序子管道,组成了一个全面和标准的组件安全性测试架构。其中,无论是“白盒”还是“黑盒”测试方法,进行组件的安全性测试最主要的手段都是错误注入方法,即利用错误的输入或结构作用于被测组件,观察组件在错误的情况下是否能正确运行,从而得出组件的安全性结论。然而,对组件源代码进行“白盒”测试,姑且不论组件的源代码是否可获得,基于源代码的错误注入是否对应于现实的漏洞攻击也是一个关系到测试有效性的重要问题 8;同样,对组件进行不知道源代码的“黑盒”测试,只对组件公开的接口注入“恶意”的输入值从而触发安全漏洞又是不充分的测试方法。因此,CSC 作为一种理论模型,有一定的局限性,需要进一步的加以创新和完善。在组件安全性测试相关领域,Nimal Nissanke 9等人讨论了影响组件安全的因素,利用一种简单的 Sendmail 安全模型,提出了一种对组件安全进行建模和分析的框架,是一种确保组件安全的形式化方法。而 Khaled Md.Khan10, 11和 Jun Han12, 13等人则从提高组件安全的可测性角度出发,提出对组件的安全性特征进行描述,将组件的