ImageVerifierCode 换一换
格式:DOCX , 页数:82 ,大小:1.41MB ,
资源ID:12526429      下载积分:5 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-12526429.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(COM组件栈缓冲区溢出漏洞检测技术研究硕士学位论文.docx)为本站会员(b****6)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

COM组件栈缓冲区溢出漏洞检测技术研究硕士学位论文.docx

1、COM组件栈缓冲区溢出漏洞检测技术研究硕士学位论文硕士学位论文 COM组件栈缓冲区溢出漏洞检测技术研究学位申请人: 学科专业: 计算机软件与理论指导教师: 答辩日期: A Dissertation Submitted to Huazhong University of Science andTechnology for the Degree of Master of EngineeringThe Research on stack buffer overflow detection of COM componentCandidate: Zhang Chao Major: Computer So

2、ftware and TheorySupervisor: Prof. Lu YanshengHuazhong University of Science and TechnologyWuhan 430074, P.R.C.January, 2007独创性声明本人声明所呈交的学位论文是我个人在导师指导下进行的研究工作及取得的研究成果。尽我所知,除文中已经标明引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写过的研究成果。对本文的研究做出贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到,本声明的法律结果由本人承担。 学位论文作者签名: 日期: 年 月 日学位论文版权使用授权书本学

3、位论文作者完全了解学校有关保留、使用学位论文的规定,即:学校有权保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权华中科技大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。本论文属于 保密 ,在_年解密后适用本授权书。不保密。(请在以上方框内打“”)学位论文作者签名: 指导教师签名: 日期: 年 月 日 日期: 年 月 日摘 要为了解决软件复用,缩短软件开发时间,降低维护成本和实现程序动态升级,软件设计领域产生了组件化程序设计结构,并且日益成为发展趋势。微软的COM组件对象模型是当今比较成熟的软件

4、组件模型之一,被广泛应用于Windows操作系统和应用程序中。随着COM组件技术的大量使用,COM组件暴露出越来越多的安全问题,其中,缓冲区溢出安全问题占了很大比例。 缓冲区溢出漏洞一直是安全漏洞最常见的一种形式。缓冲区溢出问题主要出现在C/C+这类非类型安全语言中,而在新一代的编程语言,例如Java、C#中不存在。一个重要的原因就是C/C+允许通过指针进行间接内存访问但没有缓冲区边界检查和提供了大量对缓冲区可能存在不安全操作的库函数,在Windows操作系统中也存在类似的函数。因此,如果能采用有效的手段对COM组件的缓冲区溢出漏洞进行检测,将能极大地提高组件软件的安全性。 根据COM组件多数

5、情况下源代码未可知的测试特点,基于COM组件的二进制代码实现对其可能存在的栈缓冲区溢出漏洞的检测。检测方法是将检测缓冲区溢出问题转化为整数范围分析问题。建立适用COM组件的危险函数库,在汇编代码中识别危险函数的调用位置,然后根据危险函数参数的类型通过扫描识别不同的缓冲区,将声明的缓冲区大小和使用的缓冲区大小等价为整数范围,依据制定的缓冲区溢出标准检测溢出漏洞。根据COM组件使用虚表定位函数的结构特点,实现了COM组件中用户函数的精确定位;同时利用IDC脚本语言提取了COM组件中的函数依赖关系图。基于以上工作,实现了一个COM组件栈缓冲区溢出漏洞检测原型系统。关键词:缓冲区溢出,静态分析,二进制

6、代码,COM组件,危险函数AbstractIn order to solve the problem of software reuse, shorten software developing period, reduce maintenance cost and realize software automatic updating, component software design is put forward and has become an inevitable developmental trend. Microsofts Component Object Model (COM

7、) is a relatively mature one of software component models, which is widely used in Windows operating system and application programs. Along with the prevalence of COM, more and more security problems are exposed, of which buffer overflow constitutes a high proportion.Buffer overflow has been one of

8、the commonest forms of security holes. It mainly exists in the non type-safe languages, such as C and C+. However, new generation languages, such as Java and C#, do not have this problem. One of the most important reasons is that C allow indirect memory access by pointer without boundary check and p

9、rovide many unsafe functions which may cause buffer overflow. Meanwhile, there are such functions in Windows operating system. Therefore, if effective means can be adopted to detect buffer overflow, security of component software will be greatly enhanced.Buffer overflow detection based on binary cod

10、e is thoroughly studied in this thesis because in most cases the source code of COM is unknown. A detection algorithm is proposed by modeling the buffer overflow problem and transform it to ranges comparison of integers. First, establish an unsafe function library of COM and use it to distinguish un

11、safe function calls in assembly code. Second, according to types of arguments passed to unsafe functions, different buffers are distinguished. Third, obtain ranges of integers based on the size of declared buffers and allocated ones. Last, use buffer overflow detection criterion made by this thesis

12、to detect buffer overflow. COM uses virtual table to locate functions. According to this structural characteristics, this thesis realise accurate positioning of user functions and extract their dependence relations by means of IDC script language. Based on the work mentioned above, a prototype syste

13、m that can detch stack buffer overflow of COM is realised.Keywords: buffer overflow,static analysis, binary code, COM component,unsafe function目 录摘 要 IAbstract II1 绪 论1.1 课题背景 (1)1.2 国内外概况 (2)1.3 论文主要研究工作 (4)1.4 论文结构 (5)2 COM组件及栈缓冲区溢出漏洞检测方法基础2.1 COM组件 (6)2.2 缓冲区溢出原理 (8)2.3 栈缓冲区溢出检测技术 (11)2.4 小结 (19)

14、3 COM组件栈缓冲区溢出漏洞检测技术3.1 函数的识别 (21)3.2 参数的识别 (25)3.3 函数的返回值 (25)3.4 变量的识别 (27)3.5 COM组件危险函数库建立 (30)3.6 小结 (34)4 COM组件栈缓冲区溢出漏洞检测系统设计与实现4.1 模块结构和功能 (35)4.2 主要数据结构 (36)4.3 函数定位模块实现 (37)4.4 栈溢出静态分析模块实现 (38)4.5 结果输出模块实现 (47)4.6 与CSTS的接口 (49)4.7 小结 (50)5 实验与测试5.1 实验目的 (51)5.2 实验环境 (51)5.3 测试用例 (52)5.4 测试结果

15、(53)6 总结与展望6.1 工作总结 (59)6.2 工作展望 (60)致谢 (61)参考文献 (62)附录 攻读学位期间参与的科研项目 (67)1 绪 论1.1 课题背景继面向对象的软件设计方法之后,基于组件的软件设计方法正在逐渐成为新的趋势1。按照组件化程序设计的思想,复杂的应用程序被设计成一些小的、功能单一的组件模块,这些模块可以运行在同一机器上,也可以运行在不同的机器上,每台机器的运行环境可以不同,甚至可以是不同的操作系统。为了实现这样的应用软件,组件需要一些细致的规范,只有组件程序遵守这些共同的规范,组件软件才能正常运行。目前流行的组件规范有三种,它们是OMG(Object Man

16、agement Group)提出的CORBA(Common Object Request Breaker Architecture);微软提出的COM(Component Object Model);还有SUN公司提出的EJB(Enterprise Java Bean)。Cai2给出了三种规范的详细比较。微软的COM组件对象模型是当今比较成熟的软件组件规范之一,被广泛应用于Windows操作系统和应用程序中。在分布式计算、Internet网络、三层体系结构开发以及音视频处理等前沿领域,COM组件技术正在被大量使用。COM组件在受到广泛应用的同时,自身的安全问题也日益暴露。其中,缓冲区溢出安全问

17、题占了很大的比例。在安全日益被人们所关注的今天,缓冲区溢出毫无疑问是最大的安全威胁之一。1988年,Internet上的第一例蠕虫(Morris)攻击,就是利用Vax和Sun机器fingerd中的缓冲区溢出漏洞。SANS评选出的2005年威胁最大的20个漏洞中,有8个跟缓冲区溢出有关。国内绿盟科技根据安全漏洞的严重程度、影响范围等因素综合评出2006年度的十大安全漏洞,缓冲区溢出漏洞占4个。绿盟科技在2006年发布CVE漏洞8个,而缓冲区溢出漏洞就占了5个。根据CERT的统计数据,近几年与缓冲区溢出有关的安全事件在50%以上。经过十几年的发展,缓冲区溢出已经成为一种成熟和最有效的黑客攻击手段。

18、并且在接下来的许多年里,情况仍然会是这样。随着COM组件的广泛应用,COM组件中暴露的缓冲区溢出的安全问题的数量也是逐年上升。因此检测COM组件的缓冲区溢出漏洞具有十分重要的意义。COM组件多数情况下源代码不可知,目前常用的测试方法是黑盒测试。按照经验和一般规律设计大量测试用例,以期望触发组件的漏洞和异常。这种方法在某些时候会起到较好的效果,但效率太低,而且对测试人员的经验和技术水平要求很高。为了改进已有的COM组件测试方法,提高对COM组件安全漏洞的检测,本论文研究并实现了COM组件栈缓冲区溢出漏洞检测原型系统。 同时,对COM组件进行静态分析获取其结构信息和安全漏洞信息是实验室正在研发的针

19、对COM组件的安全漏洞自动检测工具的需要。所以本论文研发的原型系统可以很好与实验室研发的自动检测工具结合,以完善该工具的效率和功能。1.2 国内外概况软构件技术提供了一种较面向对象方法更为有效的软件设计模式,构件软件被广泛应用并成为一种主流软件形态3(本段及后两段中的“构件”与论文中的“组件”概念一样,只是翻译的不同)。然而,构件的内部信息屏蔽、演变速度快以及构件间的异质、松耦合等特点给构件及构件软件的测试工作带来一系列的问题4,5:对于构件提供者,问题在于需要使用相当充分的覆盖准则进行测试以提高构件的可复用性;对用户使用构件的上下文环境并不完全了解;并且不能很好的获得构件的错误报告。对于构件

20、使用者而言,问题在于源代码不可见性给测试设计和用例生成带来了极大的障碍6;系统中构件的异质性不利于测试标准的统一及自动化的实现;构件版本更新快以及不确定性迫使要对构件系统进行较为频繁的回归测试等。构件软件测试通常分为构件测试、子系统测试、系统测试三个阶段7,分别与传统软件测试过程的单元测试、集成测试和系统测试相对应。Harrold8认为应该从构件开发者和构件使用者两个不同的角度来看待构件软件的测试问题。一般来讲,构件测试主要由构件的开发者完成,而后两个阶段的测试则由使用者实施。总之,根据构件自身的特点,寻求高效的构件软件测试技术和开发实用的测试工具是当今软件业界一个亟待解决的问题。相对于构件测

21、试的研究,针对缓冲区溢出攻击的研究比较成熟。缓冲区溢出攻击可追溯到1988年臭名昭著的Morris蠕虫, 在随后的1989年里,Spafford提交了一份关于运行在VAX机上的BSD版UNIX的fingerd的缓冲区溢出程序的技术细节的分析报告,这引起了一部分安全人士对这个研究领域的重视。但真正让众人认识缓冲区溢出攻击的论文是1996年11月Aleph One在Phrack杂志第49期发表的论文“Smashing the stack for fun and profit”9。该论文阐述了Linux系统中栈的结构和如何利用栈缓冲区溢出,并首次提出shellcode的概念。1999年,IIS4.0

22、远程攻击代码的作者dark spyrit AKA Barnaby Jack10在Phrack Magzine(第55期)上提出了使用系统核心DLL中的“jmp esp”的指令来完成到shellcode跳转的想法,从此开创了Win32平台下缓冲区溢出的新思想,大量Windows平台下的缓冲区溢出漏洞也被利用。在缓冲区溢出漏洞挖掘和检测方面,国外已经有一些较为深入的研究工作,并且这些技术都能应用到在Win32平台下开发的软件中,而国内的研究还处于初级阶段。通过对目前国内外相关研究文献的搜集整理,按照各种技术的研究对象的不同,可将缓冲区溢出漏洞检测的研究工作进行如下分类11,12,13:1、基于源代

23、码的静态检测技术:将源代码作为输入,通过建立漏洞库,扫描源代码,匹配漏洞模式来检测缓冲区溢出漏洞。目前关于此方面的研究较多,典型的工具有ITS414、BOON15、Splint16,17、ARCHER18等。2、基于源代码的动态检测技术:可通过扩展编译器功能和直接修改源代码来完成溢出漏洞的检测,如StackGuard19,20和STOBO21等工具。3、基于二进制代码的动态检测技术:通过静态或动态修改二进制代码和采用“黑盒测试”的方法实现栈溢出漏洞检测,如RAD22、libverify23和Fuzz24等工具。4、基于二进制代码的静态检测技术:该技术的研究目前比较少见,目前典型的研究是通过一些

24、反汇编工具对目标代码进行处理,然后再依赖一些源代码静态检测技术进行处理25,26,27,如Terry Eruce Cillette28、bugscam29,30等工具。漏洞检测方法各有利弊,需要根据具体情况选择相应的方法来确保最大程度上挖掘出缓冲区溢出漏洞。在上述的研究工作中,基于二进制代码的静态检测技术对于针对COM组件的缓冲区溢出检测具有指导意义。论文中的检测技术就是归属于基于二进制代码的静态检测技术的。1.3 论文主要研究工作论文的主要工作为:在研究已有缓冲区溢出检测技术,分析现存成熟的缓冲区溢出检测工具,研究C/C+程序的逆向技术以及参加实验室的针对COM组件的安全漏洞自动化检测工具的

25、开发的基础上,设计了一种针对COM组件二进制代码的栈缓冲区溢出漏洞检测算法SBOD-BC-CC(stack buffer overflow detection based on binary code of COM component),并最终实现一个COM组件栈缓冲区溢出检测原型系统。具体工作包括:1、现有的栈缓冲区溢出检测技术的总结对现有的栈缓冲区溢出检测技术进行了深入的研究,将溢出检测技术分为四大类:基于源码的静态检测、基于源码的动态检测、基于二进制代码的静态检测和基于二进制代码的动态检测。详细分析了这四类技术并介绍了各自的代表自动化工具。在分析现有检测技术的基础上,提出论文研究的检测技

26、术。2、C/C+程序的逆向技术研究熟悉反汇编工具IDA、OllyICE和Win32dsm,熟练掌握IDC脚本语言。研究在汇编代码中识别程序流程,识别函数(库函数和用户编写的函数),识别函数的参数,识别函数的变量等技术,在研究识别库函数的过程中提出了一个切实可行的算法。3、函数定位模块的实现为了减少扫描汇编代码得到的无用信息,提高检测效率。根据COM组件结构特点,设计了一种自动识别接口函数的算法,并实现了一个函数定位模块,可以将COM组件中用户函数名和该函数在汇编代码中的线性地址实现精确定位。4、COM组件危险函数库的建立栈缓冲区溢出通常发生在字符串操作函数中,对于一般的C/C+程序,使用的是C

27、字符串,所以危险函数库主要是由常规字符串操作函数(如strcpy、strcat等)的子集构成。但COM组件中使用的是混合字符串。常规的字符串操作函数无法处理该类型字符串。因此必须建立适用COM组件的危险函数库。5、栈溢出检测算法的实现在详细分析bugscam的基础上,对其两大核心函数SHeapBuffSize和函数StckBuffSize做了改进。利用IDA的脚本语言IDC实现了一个完整的栈溢出检测算法SBOD-BC-CC。该算法可以根据危险函数的参数类型,识别不同的赋值操作指令,从而较准确的得到参数代表的缓冲区的分配长度和使用长度。依据缓冲区溢出的标准,判断栈溢出漏洞。同时通过识别函数调用的

28、操作指令,并结合函数定位模块,可以提取用户函数的依赖关系,以XML格式输出的函数依赖关系为COM组件的后续分析提供良好的输入信息。1.4 论文结构第一章为绪论,主要介绍论文研究内容的一些背景情况,国内外研究现状和论文的主要内容。第二章首先介绍了COM组件,然后对缓冲区溢出的机理做了分析。重点介绍了栈缓冲区溢出的原因和分类,同时比较分析了现有的栈缓冲区溢出检测技术和工具。第三章重点介绍静态分析的理论基础,研究如何从二进制代码中识别高级语言的关键结构。介绍了在汇编代码中识别函数,识别函数参数,识别函数返回值以及识别函数变量的技术。同时讨论了COM组件危险函数库的建立。第四章详细介绍COM组件的栈缓

29、冲区溢出漏洞检测系统的设计与实现。第五章介绍对实现的原型系统进行的测试与分析。第六章是对本文工作的总结和展望。2 COM组件及栈缓冲区溢出漏洞检测方法基础COM组件在受到广泛应用的同时,自身的安全问题也日益暴露。其中,缓冲区溢出安全问题占了很大的比例。为了提高组件软件的健壮性,针对COM组件缓冲区溢出漏洞检测方法的研究具有十分重要的意义。本章首先简单介绍了COM组件,然后详细介绍了缓冲区溢出原理和目前成熟的检测方法及工具。2.1 COM组件COM组件是符合COM规范编写的组件。COM是由Microsoft提出的组件标准,不仅提供了组件之间的接口标准,还引入了面向对象的思想。在COM标准中,对象

30、是某个类的实例,称为COM对象。接口是一组方法的集合,其方法也称为接口成员函数。COM组件为COM对象提供活动空间,COM对象以COM接口方式提供服务。COM组件、COM对象和COM接口三者之间的关系如图2.1所示31。图2.1 COM组件、COM对象和COM接口关系COM组件有两种,一是进程内组件,是一个DLL(动态链接库)文件;二是进程外组件,是一个EXE(可执行程序)文件。当组件的客户程序调用组件的功能时,首先创建一个COM对象,然后通过该对象实现的COM接口调用所提供的服务。当所有的服务结束后,如果客户程序不再使用该COM对象,那么应该释放掉COM对象所占有的资源,包括对象本身。组件的

31、内部实现对客户程序是完全隐藏的。2.1.1 COM对象COM提供的是面向对象的组件模型,COM组件提供给客户的是以对象形式封装的实体。客户程序与COM组件通过COM对象交互。COM规范采用了128位全局唯一标识符GUID来标识COM对象。与C+对象相比两点不同:1、COM对象的数据成员的封装以组件模块为最终边界,对于对象用户是完全透明的;而C+对象的封装特性相比之较差,可能对于用户是可见的。2、COM对象的可重用性通过COM对象的包容和聚合来实现;而C+对象的可重用性是通过继承机制实现的。2.1.2 COM接口1、接口的定义接口是一组逻辑上相关的函数集合。COM对象通过接口成员函数对外提供服务。接口的传统命名前缀为I。COM模型中,客户程序通过接口获得对象的服务。每个接口由一个128位的全局唯一标识符IID来标识,客户通过IID获得接口的指针,再通过接口指针调用相应的接口成员函数。COM规范使用IDL(接口描述语言)来定义COM接口。Microsoft Visual C+提供了MIDL工具,可以把IDL接口描述文件编译成C/C+兼容的接口描述头文件(.h),该文件可以被组件程序和客户程序所使用。2、接口的内存结构客户程序用一个指向接口的指针来调用接口方法,接口指针又

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2