COM组件栈缓冲区溢出漏洞检测技术研究-硕士学位论文(68页).doc
《COM组件栈缓冲区溢出漏洞检测技术研究-硕士学位论文(68页).doc》由会员分享,可在线阅读,更多相关《COM组件栈缓冲区溢出漏洞检测技术研究-硕士学位论文(68页).doc(68页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-COM组件栈缓冲区溢出漏洞检测技术研究-硕士学位论文-第 61 页硕士学位论文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: Com
2、puter Software 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组件的缓冲区溢出漏洞进行检测,将能极大地提高组件软件的安全性。根据C
5、OM组件多数情况下源代码未可知的测试特点,基于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 Mode
7、l (COM) 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 o
8、ne of 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
9、 and provide 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 bina
10、ry code 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 distingu
11、ish unsafe 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 t
12、hesis 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
13、 system that can detch stack buffer overflow of COM is realised.Keywords: buffer overflow,static analysis, binary code, COM component,unsafe function目 录摘 要IABSTRACTII1 绪 论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)3 CO
14、M组件栈缓冲区溢出漏洞检测技术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 测试结果(53)6 总结与展望6.1 工作总结(5
15、9)6.2 工作展望(60)致谢(61)参考文献(62)附录 攻读学位期间参与的科研项目(67)1 绪 论1.1 课题背景继面向对象的软件设计方法之后,基于组件的软件设计方法正在逐渐成为新的趋势1。按照组件化程序设计的思想,复杂的应用程序被设计成一些小的、功能单一的组件模块,这些模块可以运行在同一机器上,也可以运行在不同的机器上,每台机器的运行环境可以不同,甚至可以是不同的操作系统。为了实现这样的应用软件,组件需要一些细致的规范,只有组件程序遵守这些共同的规范,组件软件才能正常运行。目前流行的组件规范有三种,它们是OMG(Object Management Group)提出的CORBA(Com
16、mon 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%以上。经过十几年的发展,缓冲区溢出已经成为一种成熟和最有效的黑客攻击手段。并且在接下来的许多年里,情况仍然会是这样。随着COM
18、组件的广泛应用,COM组件中暴露的缓冲区溢出的安全问题的数量也是逐年上升。因此检测COM组件的缓冲区溢出漏洞具有十分重要的意义。COM组件多数情况下源代码不可知,目前常用的测试方法是黑盒测试。按照经验和一般规律设计大量测试用例,以期望触发组件的漏洞和异常。这种方法在某些时候会起到较好的效果,但效率太低,而且对测试人员的经验和技术水平要求很高。为了改进已有的COM组件测试方法,提高对COM组件安全漏洞的检测,本论文研究并实现了COM组件栈缓冲区溢出漏洞检测原型系统。同时,对COM组件进行静态分析获取其结构信息和安全漏洞信息是实验室正在研发的针对COM组件的安全漏洞自动检测工具的需要。所以本论文研
19、发的原型系统可以很好与实验室研发的自动检测工具结合,以完善该工具的效率和功能。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远程攻击代码的作者dark spyrit AKA Ba
22、rnaby 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、基于二进制代码的静态检测技术:该技术的研究目前比较少见,目前典型的研究是通过一些反汇编工具对目标代码进行处理,然后再依赖一些源代码静态
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- COM 组件 缓冲区 溢出 漏洞 检测 技术研究 硕士学位 论文 68
限制150内