收藏 分销(赏)

学士学位论文--基于错误注入的组件安全性测试研究.doc

上传人:可**** 文档编号:2666066 上传时间:2024-06-04 格式:DOC 页数:75 大小:3.20MB
下载 相关 举报
学士学位论文--基于错误注入的组件安全性测试研究.doc_第1页
第1页 / 共75页
学士学位论文--基于错误注入的组件安全性测试研究.doc_第2页
第2页 / 共75页
学士学位论文--基于错误注入的组件安全性测试研究.doc_第3页
第3页 / 共75页
学士学位论文--基于错误注入的组件安全性测试研究.doc_第4页
第4页 / 共75页
学士学位论文--基于错误注入的组件安全性测试研究.doc_第5页
第5页 / 共75页
点击查看更多>>
资源描述

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 LipingHuazho

2、ng University of Science and TechnologyWuhan 430074, P. R. ChinaJune, 2008独创性声明本人声明所呈交的学位论文是我个人在导师指导下进行的研究工作及取得的研究成果。尽我所知,除文中已经标明引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写过的研究成果。对本文的研究做出贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律结果由本人承担。 学位论文作者签名: 日期: 年 月 日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,即:学校有权保留并向国家有关部门或机构送交论文的复

3、印件和电子版,允许论文被查阅和借阅。本人授权华中科技大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。保密,在_年解密后适用本授权书。本论文属于不保密。(请在以上方框内打“”)学位论文作者签名: 指导教师签名: 日期: 年 月 日 日期: 年 月 日华 中 科 技 大 学 硕 士 学 位 论 文摘 要随着基于组件的软件开发技术的出现,组件特别是第三方组件的使用,大大提高了软件开发的效率。组件技术的基础是存在大量的组件,因此,组件的可靠性和安全性就显得尤为重要。然而有关组件的软件测试技术的研究还相对薄弱,组件的安全性测试更是软件测

4、试理论一个新的研究方向,其理论和技术的研究对于促进组件技术的发展具有重要的理论价值和现实意义。由于不同于传统的软件模块,组件以第三方复用为目的进行开发,多数情况下源代码不可见,对组件尤其是第三方组件只能采用基于“黑盒”的安全性测试方法。在当今黑盒安全性测试领域,错误注入技术作为一种模拟攻击和动态执行分析的有效技术,在软件测评和系统安全性分析方面具有明显的优势。它根据软件代码运行所产生的行为而不是简单地从其结构来研究软件的安全漏洞,这种方法有利于发现那些通过静态结构分析所无法发现的新的潜在安全漏洞来源。SDFI(Static and Dynamic Fault Injection)是一种基于错误

5、注入技术的针对组件特别是第三方组件的安全性测试方法。SDFI建立在安全漏洞分类学研究的基础之上,给出一种组件安全错误注入测试模型FIM(Fault Injection Model)。FIM针对组件运行前和运行时两个不同时机,选择两种不同的错误注入检测方法接口参数错误注入和动态环境错误注入,从而达到有针对性地高效率测试组件安全漏洞的目的。SDFI分别针对接口参数错误注入及动态环境错误注入测试用例“组合爆炸”问题,给出相应的EEC(Exceptional Elements Coverage)和DSW(Division and Sorting by Weight)测试用例约减算法。在研究项目COM组

6、件安全测试系统CSTS(Component Security Testing System)中,设计和实现了自动化错误注入子系统,并使用第三方COM组件进行测试,验证了SDFI的有效性。关键词:组件,错误注入,安全漏洞,接口错误注入,环境错误注入I华 中 科 技 大 学 硕 士 学 位 论 文AbstractAlong with the appearance of software development technology based on component, the component, especially the third party component, raised the

7、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 the software testing, its th

8、eory 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 code is not visible, the sec

9、urity 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 evaluation and analysis of system

10、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 one kind of component security

11、 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 methods interface parameter fault i

12、njection 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, SDFI gave the corresponding te

13、st-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 COM components as testing exa

14、mples, confirmed the validity of SDFI.Keywords:Component, Fault Injection, Security Vulnerability, Interface Fault Injection, Environment Fault InjectionII华 中 科 技 大 学 硕 士 学 位 论 文目 录摘 要IAbstractII1绪 论1.1研究背景和意义(1)1.2国内外研究现状(2)1.3研究目标和方法(7)1.4本文的组织结构(7)2组件安全错误注入测试方法2.1组件安全性测试(9)2.2错误注入测试方法(13)2.3基于错误注

15、入的组件安全测试方法(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)5CSTS中错误注入子系统实现5.1组件安全测试系统(41)5.2错误注入子系统设计(45)5.3系统实现关键技术(47)5.4本章小结(50)6COM组件测试及效果评估6.1COM组件测试(51)6.2测试效果评估(58)6.3本章小结(60)7结

16、束语7.1本文工作总结(61)7.2后续工作展望(62)致 谢(63)参考文献(64)附录 攻读学位期间参与的科研项目(69)IV1 绪 论1.1 研究背景和意义随着计算机技术的迅猛发展,计算机硬件性能越来越高,由于较少考虑硬件的局限以及人们的实际需求,相应的软件规模越来越庞大、结构也越来越复杂。传统面向过程的软件开发技术,已无法胜任软件开发过程中对效率和资源充分利用的要求。为了提高软件开发的效率,面向对象及建立在面向对象技术基础之上的组件技术得到广泛应用,已成为软件开发技术主流1。组件技术的应用引入了封装和可重用等概念,特别是第三方组件的使用,大大提高了软件开发的效率、降低了软件开发的成本,

17、但同时也增加了软件可靠性和安全性的风险。不可靠或不安全的组件往往成为软件系统中最薄弱的环节,该环节的断裂将导致整个系统的崩溃2。因此,组件的可靠性和安全性是不容忽视的重要问题,它的好坏与否将直接关系到整个系统的可靠性和安全性以及质量的优与劣。作为保证安全性的重要手段,组件安全性测试也自然成为重要的研究内容。然而,与在组件化程序分析、设计方法以及如何构筑组件系统等方面获得的丰富研究成果相比,有关组件和基于组件的软件测试技术的研究还相对薄弱3,尤其是组件的安全性测试,更是软件测试理论一个新的研究方向,其理论和技术的研究将对于促进组件化技术的发展具有重要的理论价值和现实意义。错误注入作为一种有效的安

18、全性测试技术,在评估硬件和软件领域的可靠性和安全性方面都获得了充分的肯定4,是一个强大的技术工具,可以在很大程度上改善软件的可靠性和安全性。其最大优势在于不仅可以模拟对软件应用的恶意攻击,加速待测软件故障的发生,其实施过程还可以实现自动化5。更为重要的是,错误注入从软件代码运行所产生的行为而不是简单地从其结构来研究软件的安全漏洞,这种方法有利于使测试者发现那些通过静态结构分析所无法发现的新的潜在安全漏洞来源6。因此,错误注入安全性测试方法在软件测评和系统安全性分析方面具有明显的优势,值得进一步研究将其应用到组件安全性测试当中。1.2 国内外研究现状1.2.1 组件安全性测试目前,组件安全性测试

19、模型、方法和技术,国内外只有为数不多的研究,并且没有任何已实现的组件安全性测试工具。国内,张勇2提出一种基于规格说明的组件安全性测试方法,该方法通过对组件规格的说明分析提取出组件安全性相关的属性,形成安全性测试规格说明,设计出不同的违反安全性测试规格的错误注入测试案例,从而进行安全性测试。然而,从组件规格说明当中如何提取组件安全性相关属性文中却缺乏可操作的步骤,只是简单说明需要结合测试者对组件可能存在漏洞的了解以及设计者自身的经验产生,显然,该方法的有效性依赖于人工的知识和经验,因而不是一种通用的测试方法,不利于组件安全性测试的自动化。国外,Reliable Software Technolo

20、gies公司的Anup K. Ghosh 和 Gary McGraw7提出了一种CSC(Component Security Certification,组件安全验证)管道模型:该模型包括测试计划、“白盒”测试、“黑盒”测试和验证通过后的数字签名四个顺序子管道,组成了一个全面和标准的组件安全性测试架构。其中,无论是“白盒”还是“黑盒”测试方法,进行组件的安全性测试最主要的手段都是错误注入方法,即利用错误的输入或结构作用于被测组件,观察组件在错误的情况下是否能正确运行,从而得出组件的安全性结论。然而,对组件源代码进行“白盒”测试,姑且不论组件的源代码是否可获得,基于源代码的错误注入是否对应于现实

21、的漏洞攻击也是一个关系到测试有效性的重要问题8;同样,对组件进行不知道源代码的“黑盒”测试,只对组件公开的接口注入“恶意”的输入值从而触发安全漏洞又是不充分的测试方法。因此,CSC作为一种理论模型,有一定的局限性,需要进一步的加以创新和完善。在组件安全性测试相关领域,Nimal Nissanke9等人讨论了影响组件安全的因素,利用一种简单的Sendmail安全模型,提出了一种对组件安全进行建模和分析的框架,是一种确保组件安全的形式化方法。而Khaled Md.Khan10, 11和Jun Han12, 13等人则从提高组件安全的可测性角度出发,提出对组件的安全性特征进行描述,将组件的安全需求规

22、格嵌入到组件的“功能性”需求规格当中,从而方便组件的安全性测试,但是针对不同的组件完备而规范地描述其所有应用环境下的安全属性是很困难的,尤其是对不知道使用方的第三方组件而言,因而组件的安全需求规格目前未能形成一种可行的标准。另外,Bertolino 和 Polini14将一个“间谍”类植入到待测组件之中,以便收集和比较待测组件运行时的状态和资源分配情况,从而提出了一种组件部属的集成测试框架;Jennifer M. Haddox15提出了一种在一个特定系统中观察和测试第三方组件的“Wrapper”(包裹器)方法,该方法使用包裹器来截获系统传递给组件的输入或者组件返回给系统的输出,用以检测组件的异

23、常行为并防止商业软组件的错误传播到整个系统。这些研究虽然取得了一定的成果,为组件的安全性测试提供了一些思路并带来了一定的启发意义,然而对组件安全性测试而言,仍然是路途遥远,缺乏实际可行的方法和技术。1.2.2 错误注入技术错误注入(Fault Injection)作为一种测试技术在评估硬件和软件领域的可靠性和安全性方面都获得了充分的肯定,被认为是一个强大的技术工具,可在很大程度上改善软件的可靠性和安全性16。错误注入技术是指按照特定的错误模型,用人为的、有意识的方式产生错误,并施加于待测系统中,用以加速该系统的错误和故障的发生,同时观测并反馈系统对所注入错误的响应信息,通过分析对系统进行验证和

24、评价的过程17。错误注入概念很早由容错技术派生而来。19世纪70年代,当时首次用来在硬件级别引入故障18。这种类型的错误注入称之为硬件实现的错误注入(Hardware Implemented Fault Injection,缩写为HWIFI),其主要用来作为测试硬件系统的可靠性。第一个硬件错误注入实验中所涉及到的仅仅是将电路板上的连接短路,以观察桥接故障对系统的影响。后来扩展该项技术,诸如轰击一个电路板的某个特定区域。不久发现,错误其实可以通过软件技术引入,而且通过软件技术引入错误对评估软件系统更为有效。对应的,将之称为软件实现的错误注入(Software Implemented Fault

25、Injection,缩写为SWIFI),简称软件错误注入(SFI)。软件错误注入19是一种通过在软件系统中人为地、有计划地引入错误,分析系统是否能检测并且从错误中恢复来,加速测评其容错机制的技术。最早将软件错误注入技术引入软件测试领域可以追溯到1972年Harlan Mill20 (IBM)提出的错误种子技术(Fault seeding approach)。该方法是预先将一些错误注入到程序中,通过计算测试程序中发现的错误数量,来评估程序中还有多少实际的错误。该技术是软件错误注入技术的前身。后来,发展成为分析系统是否能检测并且从错误中恢复以评估其容错能力的技术。为了充分测试代码路径,尤其是用其他

26、方法很难测试到错误和异常处理(Error and exception handling)代码路径,错误注入也是一种提高测试覆盖率的有效技术21。它常用于压力测试中,并被广泛认为是开发健壮性软件的一种重要技术22。在过去的30多年中,错误注入技术的研究对容错系统的设计和应用起到了重要的作用。在操作系统的健壮性测试方面,错误注入技术已经取得了空前的成功23。其应用背景也从容错系统,向分布式系统、嵌入式系统以及Internet领域渗透。其分析模拟包括Markov模型、Petri网和故障树等。最近十年的发展则是把它应用到了测试系统的安全属性上。在软件安全性测试领域,Anup K. Ghosh等人4提出

27、了一种可适应脆弱性分析法( Adaptive Vulnerability Analysis,简称AVA ),该方法利用错误注入技术对软件源代码进行自动的“白盒”动态安全测试与评估;WenLiang Du等人24则提出了另外一种基于“黑盒” 的环境错误注入方法来检测软件内部的安全漏洞(下文“环境错误注入”进一步阐述)。美国Reliable Software Technologies公司在90年代末根据上述AVA算法研究开发了一套软件安全测试评估系统错误注入安全测试工具(Fault Injection Security Tool,简称FIST)25。这套工具可以自动化的对用C或C+语言编写的程序进

28、行“白盒”安全性分析。其他与 FIST或AVA类似的错误注入测试工具和方法还包括:基于代码的分析方法StackGuard,它通过判断推出堆栈的返回地址是否被重写进而决定是否中止程序运行的办法来保护缓冲区免受“stack smashing”攻击26,以及Fuzz工具27。Fuzz虽然也可以用于缓冲区溢出的测试,但由于其输入是随机生成的,因此无法对程序的安全漏洞给出确定性的结论。将错误注入技术应用于组件安全性测试,由于组件尤其是第三方组件源代码不可知,错误注入只能从如下三种途径进行考虑:(1)二进制代码(Binary Code);(2) 接口(Interface);(3) 环境(Environme

29、nt)。在二进制代码错误注入方面,Joo Dures和Henrique Madeira28提出的G-SWFIT(Generic Software Fault Injection Technique,通用软件错误注入技术)是一种对COTS组件的二进制代码进行变异的错误注入技术,它通过扫描二进制代码反转的汇编代码匹配特定的低级指令模式,然后根据与这些模式对应的高级源代码中的错误产生二进制代码变异版本并执行。实际上,该方法是一种变异测试,主要用于评价组件所在系统的容错机制,即用于集成测试,而远非对组件进行复杂的安全性测试。采用二进制代码扫描组件安全漏洞的方法29,首先其本质是一种检测技术,而非测试技

30、术;其次涉及的技术要求比较高,如反汇编技术、模式识别技术等;最后,误报率高,检测出来的潜在漏洞非常多,需要人工去验证,效率比较低。相比于二进制方法,接口和环境更具现实意义,因为这就是漏洞攻击者通常所竭力利用的地方30,如通过标准输出或通过环境,注入非法的输入数据。因此,通过以上分析,对组件安全性测试本文主要采用接口错误注入和环境错误注入方法。1.2.3 接口错误注入(Interface Fault Injection)组件接口错误注入中,错误是通过影响组件的输入、输出参数或返回结果来引入一个组件的接口。其思想是组件内部的错误可以反映到接口上,错误的传播也是通过这些接口。在源代码不可知的情况下进

31、行组件测试,这个技术是错误注入比较常用的方法。在目前的接口错误注入技术中,通过崩溃API参数的接口错误注入常用于评估一个操作系统组件的应用编程接口或COTS组件接口的“鲁棒性”或健壮性,即描述在高强度输入环境下或者在无效数据输入时,其各项功能能够保持正确运行的程度。在这方面,有两种可移植的方法特别针对于测试COTS组件的鲁棒性。一个是Fuzz测试26(“模糊测试”,最早源于1990年的一篇论文31,指的是用完全随机的输入数据来测试程序,所以也叫做“Monkey Testing”),该方法通过产生可能导致API出现问题的方式随机地构造输入数据流进行自动测试,但由于是随机检测因而时间开销较大,测试

32、效率不高;另一个是卡耐基梅隆大学的Ballista方法32,该方法通过使用有效和异常混合的输入流在接口级别自动执行错误注入,例如一个用来读取的文件句柄传递到一个文件写函数的参数中,以检测函数调用是否会导致系统崩溃和挂起,由于该方法是基于参数数据类型而非行为规格说明,实现上又结合面向对象方法,因而具有很强的可扩展性。基于接口错误注入的方法开发了一些有效的健壮性测试工具,如Ballista33、 JACA Fault Injection Tool34等。然而,因为针对的是健壮性测试,与安全性测试有一定差别:软件使用过程中,软件安全漏洞被攻击往往都是使用了一些非常规、语义上非安全或有潜在危害的输入参

33、数35,与常规的软件正确性测试(如健壮性测试)相比,软件安全性测试对测试用例的要求要高得多,既要考虑字符集本身,也要考虑字符集的语义及潜在危害性。因而对组件安全测试还需要进一步研究。1.2.4 环境错误注入(Environment Fault Injection)环境错误注入是一种非常好的自动化软件测试方法,这种方法在协议安全测试领域中都已经得到了广泛应用。它是一种动态的测试软件安全漏洞的技术,建立在对系统安全漏洞分类模型的基础上,通过选择一个恰当的错误模型,测试系统有意识地触发软件内部存在的安全漏洞。这方面的一篇经典文章是普渡大学WenLiang Du和Aditya P.Mathur的“Vu

34、lnerability Testing of Software System Using Fault Injection” 24,其思想出发点是:由于各种原因,程序员总是假定认为他们的程序会在正常环境中正常地运行。当这些假设成立时,他们的程序当然是正确运行的。但是,由于作为共享资源的环境,常常被其它主体所影响,尤其是恶意的用户,这样,程序员的假设就可能是不正确的。程序是否能够容忍环境中的错误是影响程序健壮性和安全性的一个关键问题。该方法将所有被不属于运行程序的代码都看作“环境”,并按照直接和间接环境错误进行错误分类,进而提出了环境应用程序交互错误模型 (Environment Applicat

35、ion Interaction, 简称EAI)及相应抽象实现算法,这对“不可独立运行”的组件进行环境错误注入而言,奠定了一定的理论基础。目前,国外的环境错误注入工具有美国Berkeley大学和Stanford大学的联合研究开发的FIG36和美国佛罗里达软件工程研究中心实验室开发(现已成为商业工具)的Holodeck37;国内,信息安全国家重点实验室(安天实验室)在环境错误注入测试方面已取得了一定的研究成果,发表了数篇论文38, 39。在参考国际容错和诊断技术的思路和成果基础上,该实验室开发了基于Linux系统的错误注入原型系统Injecter,这个系统通过掩饰注入错误达到自动测试软件缺陷的目的

36、。但是由于建立在Linux上,因而对其他平台缺乏可移植性,在Windows平台上进行安全性测试有待研究。1.3 研究目标和方法本文研究的目标是利用当今最有效的软件安全性检测模式基于错误注入的测试模式,提出一种适应于组件、尤其是第三方组件的安全性测试方法,并设计和开发一套基于错误注入的组件安全性测试系统,简称为:CSTS(Component Security Testing System),实现对任何COM组件的自动化安全测试。本文的方法基于假设:计算机安全违背的绝大部分原因是软件设计和编码所引入的缺陷。本文采用的方法是利用错误注入技术,动态执行分析,全面模拟各种漏洞攻击。在组件运行之前,通过静

37、态的错误注入,构造恶意的输入数据,对组件接口参数进行自动“崩溃”;在组件执行期间,通过动态的错误注入,故意扰动环境状态,触发组件潜在的安全漏洞。针对不同的时机,选择不同的错误注入检测模式,从而达到有针对性地高效率测试组件安全漏洞的目的。1.4 本文的组织结构本文的结构安排如下:第1章:介绍本课题的立题背景和研究意义,简述了国内外组件安全性测试和错误注入领域的研究现状,并提出了本文的主要研究目标和方法。第2章:明确本文的研究对象、研究内容和研究难点,阐述了利用错误注入进行安全性测试的优点和现有方法。然后分三个关键点提出了一种基于错误注入的组件安全总体测试模型、策略和方法。第34章:承接第2章提出

38、的总体测试模型及方法,按照组件运行前和运行时两个不同的时机,采用不同的错误注入检测模式,分别提出了测试组件安全漏洞的接口参数错误注入方法和动态环境错误注入方法。第5章:在以上理论研究的基础上,针对普遍使用的COM组件,设计和实现了CSTS错误注入子系统,并详细给出了系统实现的关键技术。第6章:使用CSTS对当今各种有漏洞的COM组件进行安全测试,分析安全漏洞产生的原因,并对错误注入子系统的有效性进行评估。第7章:总结本文所做的工作并对进一步的工作进行了展望。最后是致谢和参考文献。82 组件安全错误注入测试方法2.1 组件安全性测试2.1.1 组件技术软件组件(Software Componen

39、t)是软件系统中具有相对独立功能、可以明确辨识、接口由契约指定、和语境有明显依赖关系、可独立部署、且多由第三方提供的可组装软件实体40。更广泛的说,组件是一个独立的可发布的功能模块,它通过接口提供对组件服务的访问。组件分为开发人员根据特定的组件标准专门开发或把原有的程序代码封装而成的内部(in-house)组件和通过购买获得的由独立的第三方机构开发的COTS(Commercial-Off-The-Shelf)组件两种。组件是具有特定功能,能够跨越进程边界实现网络、语言、应用程序、开发工具和操作系统的“即插即用”独立对象。在设计过程中,组件是可替换的软件单元,它封装了设计决策,可作为更大单元的一

40、部分和其他组件组合,能方便地由第三方集成到软件系统中,不需要修改代码和重新编译。接口(interface) 是客户与组件发生交互的连接渠道,组件通过接口实现与其他组件或系统的交互,因此接口是组件的核心部分。实际上,组件对外表现出来就是一个黑盒,对它的任何操作只能通过由公共方法和属性组成的接口进行。组件接口的定义是自描述的,不依赖于具体的实现。这种将实现与接口分离的方式消除了接口定义和接口实现之间的耦合关系,增强了信息封装程度,进一步降低了软件开发者之间的耦合程度。对组件客户而言,只需要提取组件的元数据,就能获得组件所包含的类、接口、方法的信息,无需关心源代码的实现。基于组件的软件开发技术(Co

41、mponent-Based Development, CBD)是将大而复杂的软件应用分成一系列的可先行实现、易于开发、理解和维护的软件单元,也就是组件,然后通过自开发组件或使用第三方组件,完成组件的准备工作,最后利用组件的组装机制将所有组件组装成为一个应用系统41。基于组件的软件系统的总体结构如图2.1所示。图2.1 基于组件系统的总体结构图组件之间主要通过接口实现相互的协作和信息交流,当然,有些情况下要在组件之间插入起中介作用的组件或程序(称为连接器)。为适应不同软件开发商提供的组件模块能够可以互相操作的需求,组件之间的连接和调用要通过标准的协议来完成。现今主要的组件技术42有微软公司的CO

42、M、对象管理组织的CORBA/ORB、以及SUN公司的J2EE。CORBA技术是最早出现的,1991年OMG颁布了CORBA 1. 0标准,成为当时的组件开发的标准;微软的COM系列,从最初的COM发展到现在的DCOM,逐渐形成了微软的分布式对象计算平台框架.NET;SUN公司从最早的Java平台到JavaBeans,到现在的J2EE,形成了除了语言外还有组件的标准以及组件之间协同工作通讯框架的完整体系架构,并以其平台无关性及高效性等优势得到了更为广泛的应用。2.1.2 组件安全漏洞在RFC282843中对漏洞的定义如下:“a flaw or weakness in a systems des

43、ign, implementation,or operation and management that could be exploited to violate the systems security policy. ”也就是说安全漏洞可以被恶意攻击者用来突破系统的安全策略,从而访问未授权的资源和数据。漏洞也叫脆弱性(Vulnerability)44,是计算机系统在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷和不足。漏洞一旦被发现,就可利用这个漏洞获得计算机系统的额外权限,使攻击者能够在未授权的情况下访问或破坏系统,从而导致危害计算机系统安全。漏洞是软件缺陷的一个子集。组件安全漏

44、洞就是组件在安全性上存在的可被利用的缺陷或漏洞。根据漏洞分类学的研究45,导致组件安全漏洞的主要因素归纳起来有两个:一个是组件设计和实现时存在的缺陷;另一个是人为非法代码的植入。(1) 组件设计和实现时存在的缺陷。设计时考虑不全面、结构不严谨或由于程序员的疏忽或懒惰都可能导致组件中存在漏洞,如对除数是否为零缺少检查,对输入的字符串长度未以加控制等。经验证,在测试过程中最容易忽视的代码路径是异常处理46,有缺陷的异常处理是组件安全漏洞存在的主要原因。受编程设计人员的能力、经验和安全技术所限,组件在设计中出现逻辑错误是不可避免的,而且开发人员不可能考虑到各种可能出现的情况,有些错误和漏洞就是由于疏

45、忽而引起的。对输入数据的有效性、合法性、完整性没有进行验证是绝大部分安全漏洞产生的原因。以最具普遍性的“系统缓冲区溢出”和“格式化字符串”漏洞为例,前者由于开发人员在编写代码时没有判断输入数据的实际长度,导致系统堆栈被恶意数据覆盖,程序流程转向;后者由于开发人员在调用sprintf等函数时偷懒,直接把用户输入数据作为参数传入格式化串,导致精心编写的 shell code可以直接访问内存并控制程序流向。再以现实的组件安全漏洞为例,今年年初著名的IM软件QQ连续出现几个安全漏洞,这些漏洞的主要原因是由于腾讯程序员的粗心,对QQ目录中的一个COM组件函数的第一个参数没有进行长度检查,当出现超长字符串

46、时就会造成一个栈溢出漏洞,使得黑客通过构建恶意代码的网页诱骗用户浏览,即可打开本地系统端口并远程植入木马到用户系统中,从而轻而易举的远程控制用户电脑。类似的例子还有新浪UC,最近的百度搜霸、暴风影音组件安全漏洞等等。由以上例子可以看出,只要在组件中对所有由用户输入的数据进行必要判断,过滤掉非法数据就能杜绝大部分安全隐患。(2) 人为非法代码的植入。所使用的第三方组件的设计者别有用心地在组件中放置一些有特殊目的的后门或木马,这些代码在输入某些特殊的数据或程序运行满足特定的条件时被触发,从而为对使用该组件系统的非法访问或控制提供途径,引发组件甚至所开发系统的不安全。在这两个因素中,组件的安全问题大

47、部分是由第一个因素引起的;但就其危害性来说,第二个因素可能更甚。影响组件安全性的因素除了以上两个外,也和设计组件的环境和语言有关,如在C+中指针的使用往往会导致堆栈或内存的溢出,而JAVA中则无此类问题。引起组件安全性问题的因素主要有两个,但现实当中爆发的绝大部分安全漏洞是由于第一个原因。因此,本文主要针对第一个因素引起的组件安全性问题检测技术进行研究。2.1.3 组件安全性测试的问题组件安全是与防止对程序及数据的非授权的故意或意外访问的能力有关的软件属性47。组件安全性是组件在受到恶意攻击时仍提供所需功能的能力。组件安全性测试目的发现被测试组件中存在的安全缺陷和漏洞,随后修改这些缺陷和漏洞,从而提高组件的安全性。组件安全性测试的关键问题是如何以最小的时间或空间代价发现尽可能多的组件安全漏洞。组件安全性测试不同于一般的组件测试,其最大问题在于源代码未知3。组件一旦开发出来就几乎是一个“黑盒”,所有基于源码的安全性测试方法失去用武之地。由于组件只是完整软件系统的一个组成单元,不能独立运

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服