1、 硕士学位论文 基于模糊测试的 ActiveX 控件 漏洞挖掘研究 专 业 名 称 : 软 件 工 程 研究生姓名 : 导 师 姓 名 : 校外导师姓名 : 摘要 I 摘要 关键字: ABSTRACT I ABSTRACT Key Words: I 目 录 摘要 . I ABSTRACT . II 第一章 绪论 . 1 1.1 研究背景 . 1 1.2 相关研 究现状 . 1 1.2.1 ActiveX 控件技术的发展 . 1 1.2.2 模糊测试技术的研究现状 . 2 1.2.3 缓冲区溢出漏洞研究现状 . 2 1.3 研究目的和意义 . 3 1.4 主要工作与创新点 . 3 1.5 本文的
2、章节安排 . 4 第二章 ACTIVEX 控件安全性分析与模糊测试技术 . 5 2.1 ACTIVEX 控件原理分析 . 5 2.1.1 ActiveX 控件加载原理 . 5 2.1.2 ActiveX 控件的加载条件 . 5 2.2 ACTIVEX 控件漏洞形成分析 . 6 2.2.1 软件漏洞的定义 . 6 2.2.2 软件漏洞的原理与分类 . 6 2.2.3 ActiveX 控件的漏洞的特点与形成原因 . 10 2.3 模糊测试技术 . 12 2.3.1 传统的漏洞挖掘方法 . 12 2.3.2 模糊测试的定义 . 13 2.3.3 模糊测试技术的原理 . 13 2.3.4 模糊测试的优
3、点和缺点 . 14 2.3.5 进化模糊测试思想 . 15 2.4 本章小结 . 16 第三章 漏洞分析相关技术 . 17 3.1 调试器原理 . 17 3.2 关键调试技术分析 . 18 3.2.1 调试技术基础 . 18 3.2.2 调试相关的 API . 20 3.3 自动化动态分析技术 . 20 3.4 静态分析技术 . 22 3.4.1 IDA Pro 及其插件开发 . 22 3.4.2 利用 IDA Pro 实现静态代码分析 . 22 3.5 本章小结 . 23 第四章 ACTIVEX 控件漏洞挖掘分析系统 . 24 4.1 系统总体设计 . 24 II 4.2 漏洞挖掘模块 .
4、24 4.2.1 ActiveX 控件分析子模块 . 25 4.2.2 启发式静态分析子模块 . 28 4.2.3 二进制代码覆盖率分析子模块 . 29 4.2.4 测试数据生成子模块 . 31 4.2.5 模糊测试执行子模块 . 32 4.3 漏洞分析模块 . 32 4.3.1 调试器子模块 . 33 4.3.2 反汇编子模块 . 35 4.3.3 溢出检测与定位子模块 . 36 4.3.4 单步跟踪子模块 . 41 4.3.5 漏洞代码分析子模块 . 43 4.5 本章小结 . 43 第五章 ACTIVEX 控件漏洞挖掘分析系统 . 44 实验验证及结果分析 . 44 5.1 实验验证 .
5、 44 5.1.1 实验环境 . 44 5.1.2 存在漏洞的控件 . 44 5.2 漏洞分析 . 44 5.2.1 SetList(栈溢出漏洞) . 44 5.2.2 SetLogInfo2(堆溢出漏洞) . 48 5.3 漏洞自动挖掘系统的优缺点 . 51 5.3.1 系统优点 . 51 5.3.2 系统缺点 . 52 5.4 本章小结 . 52 第六章 总结与展望 . 53 6.1 本文工作总结 . 53 6.2 未来研究展望 . 53 致谢 . 54 参考文献 . 55 1 第一章 绪论 1.1 研究背景 自从万维网诞生以来,针对浏览器的攻击就愈演愈烈,一刻也不曾停歇过。浏览器作为广大
6、网民接触网络的主要工具,是网民踏入 互联网世界的主要入口之一。一旦这个入口受到恶意攻击,将有大量电脑沦为黑客的“肉鸡”,轻则电脑运行缓慢、不断弹出广告页面,重则帐号、金钱被盗,重要资料失窃等等。 随着软件工程理论和软件工业的发展,愈来愈多的软件漏洞被发现,软件安全问题日益严重。由于利益的关系,越来越多的黑客将注意力转移到了浏览器软件领域,致使不断出现浏览器的安全漏洞。作为 Windows 自带的浏览器, IE 到目前为止依然占有超过 50%的市场份额。这一数字使得大量黑客在不断寻找 IE浏览器的漏洞,而随着 IE 的诸多新版本推出,寻找并利用新漏洞的难度也 越来越大。 作为 IE 浏览器唯一支
7、持的插件形式, ActiveX 控件的安全性一直受到很大的关注。由于 ActiveX 控件一般会带有自身的类型库信息,而类型库中包含了控件所能提供的所有方法和属性,以及它们的参数信息,因此这些方法和属性成为了优良的模糊测试的对象。黑客借助于 Comraider、 Axman 等工具可以轻易发现ActiveX 控件中存在的漏洞,从而利用这些漏洞达到破坏、窃取信息以及非法牟利的目的。 经历了 2007、 2008 年 ActiveX 控件漏洞出现高峰之后,各个厂商都开始注重 ActvieX 控件的安全问题 ,由于没有判断输入参数长度而导致的缓冲区溢出漏洞也大大减少。但是,如 Comraider 这
8、种半自动化工具已越来越难以满足漏洞挖掘的需要,而且,对于一些隐藏的漏洞也无能为力。 1.2 相关研究现状 1.2.1 ActiveX 控件技术的发展 ActiveX是微软公司 1996 年提出的基于 COM 组件和 OLE技术的一种通用的开放程序接口,使用该技术开发的 ActiveX 控件可以直接集成到 IE 浏览器或其它第三方程序中 1。 由于 ActiveX 控件可以方便地扩展浏览器功能,因此许多软件厂商都喜欢开发自己的 ActiveX 控 件。例如,各大网银为了保证自己的登录和交易安全,都会让用户安装自己的 ActiveX 控件登录;一些电子商务网站,如淘宝,也会建议用户安装登录安全控件
9、。此外,网络视频软件、在线杀毒软件等也都会安装自己的ActiveX 控件。 这些控件一旦出现安全问题,黑客便可以构造恶意页面,诱使用户访问,而用户一旦访问,黑客就可以轻易植入木马和病毒,盗取用户银行账户,对企业和个人造成重大损失。 2 1.2.2 模糊测试技术的研究现状 模糊测试的思想最早产生于 1989 年美国威斯康星大学的一个研究计划,Barton Miller 教授( 被成为模糊测试之父)最初是用来测试 UNIX 应用程序的健壮性 2。 1999 年,芬兰 Oulu 大学开始研发基于 Fuzzing 的网络协议测试工具PROTOS,并于 2002 年发布了用于 SNMP 测试的版本。 P
10、ROTOS 综合了黑盒测试和白盒测试的特点,是模糊测试发展过程中的一个里程碑 3。 2002 年, Dave Aitel 发布了一个开放源代码的模糊测试工具 SPIKE5,它使用了基于块的模糊处理器,用于测试基于网络的应用程序。作为第一个可以实现自定制的模糊测试器框架, SPIKE 的发布标志着模糊测试一个新的里程碑 4。 2004 年, File Fuzzing 开始出现。 Mu Dynamics(原 Mu Security)公司开始开发一种硬件模糊装置,其目的是让网络中传输的协议数据发生变异。这个商业产品供应商的出现,恰好吻合当前人们关注 Fuzzing 的潮流 3。 同年,两个类似 SP
11、IKE 的基于块的 Fuzzer 工具发布: Peach 和 smudge。这两个工具都是使用 python 开发,从而提供了易于使用的快速开发框架。 Peach 是近年来较受外界关注的模糊测试框架,适用于多个平台。 Peach 要先对测试的协议或文件格式进行建模,并用 XML语言描述出这种数据模型,然后数据生成引擎通过解析 XML 文件来构造测试数据集 5。 2006 年, ActiveX 控件的 Fuzzing 开始流行, David Zimmer 发布了COMRaider, H.D.Morre 发布了 AxMan16。 ActiveX 控件由于其中接口、函数原型的公开性,是一种优秀的模糊
12、测试目标,允许对其实施自动化的智能测试。这使得 ActiveX 控件漏洞的挖掘一时间风靡整个黑客界,不断会爆出某些软件的0day 漏洞。比如 2007 年底迅雷 5 的 PPLAYER.DLL 控件中溢出漏洞; 2008 年初的联众 GLChat.ocx 控件溢出漏洞; 2009 年的暴风影音 mps.dll 控件远程栈溢出漏洞; 2011 年的 QQ 旋风中 QQIEHelper.dll 控件的远程栈溢出漏洞; 2011 年的淘宝阿里旺旺中 imageMan.dll 控件的远程栈溢出漏洞等等。 国外对模糊测试的研究较早也较深,有多款成熟的模糊测试框架推出,相对于此,国内对模糊测试的研究起步较
13、晚,尚未出现成熟的测试框架。文献 9介绍了使用模糊测试挖掘 MP3 播放软件中的漏洞,文献 10介绍了使用模糊测试挖掘 Word 软件中的漏洞,文献 11介绍了使用模糊测试挖掘 PNG 格式解析软件的漏洞,以上三种都属于文件 Fuzzing 的范畴,而文献 12介绍了使用模糊测试挖掘 TFTP 中的漏洞,这是种网络协议的模糊测试。 1.2.3 缓冲区溢出漏洞研究现状 缓冲区溢出攻击起源于 1996 年的一篇文章 “ Smashing The Stack For Fun And Profit” 14,这篇文章清楚地阐述了缓冲区溢出攻击的原理。这使得缓冲区溢出攻击不断被世人所了解。 1998 年来
14、自“ Cult of the Dead cow”的 Dildog 详细3 介绍了如何利用 Windows 的溢出 15,这篇文章的最大贡献在于提出了利用栈指针的方法来完成跳转,避免了因进程、线程的不同造成的栈位置不固定。 1999年, Dark Spyrit 提出使用系统核心 DLL 中的 Jmp ESP 指令完成跳转 16。同年,w00w00 安全小组的 Matt Conover 写了基于堆的缓冲区溢出的专著 17,从而使人们意识到堆溢出的危害性。 与此同时,缓冲区溢出保护技术也在不断发展。 2000 年, Arash Baratloo 和 Tzi-cker Chiueh 等实现的 Stac
15、kShield 原型系统通过保留返回地址的副本来检测溢出的发 生 18。同年, Hiroaki Etoh 和 Kunikazu Yoda 提出 Etoh 和 Yoda 技术,使用随机数保护和栈中的数组重定位技术来防止对局部变量的溢出 19。 2002 年 12 月, Chew 和 Song 对栈的基地址、系统调用表和库函数入口指针进行了随机化,并达到了破坏溢出利用可靠性的目的 20。 2003年 5 月, Xu,Kalbarczyk 和 lyer 提出了透明实时随机化技术,对 Linux 的栈基址、堆基址以及 GOT 进行了随机化 21。 Windows 也从 XP SP2 开始引入随机化 P
16、EB 基址、 SEH 保护、堆栈 Cookie保护等技术。这些技术的引进会增大缓冲区溢出攻击利用的难度,但是并不能从本质上消除缓冲区溢出的出现。正如黑客技术与反黑客技术一样,溢出研究与溢出保护研究也在对抗之中不断发展与前进。 1.3 研究目的和意义 本文的研究目的主要有以下三点: 1、寻找到一种智能、高效的基于模糊测试的漏洞挖掘方法,能够挖掘出ActiveX 控件中的缓冲区溢出漏洞 2、研究出一种动态分析与静态分析相结合的漏洞分析方法,对漏洞进行高效、准确的分析,获取到漏洞形成的相关信息 3、实现一套基于模糊测试的自动化 ActiveX 控件的 漏洞挖掘分析系统,以完成从控件接口分析到漏洞挖掘
17、到漏洞分析的自动化过程 本文的研究意义主要有: 1、通过对 ActiveX 控件进行自动化漏洞挖掘和分析,以帮助软件开发者或安全人员尽早地发现、定位和分析漏洞,减少已发布软件中漏洞的数量及生存期,从而避免漏洞对企业和个人造成重大的损失。 2、通过对 ActiveX 控件的漏洞挖掘研究,掌握漏洞挖掘过程的技巧和方法,以应用到其它类型的软件安全漏洞挖掘中去。 1.4 主要工作与创新点 本文的主要工作与创新点主要有以下三点: 4 1、使用本人独立开发的调试器,研究并实现了 一套高效的自动化单步跟踪算法,大大减少了普通单步调式造成的性能影响,并在此基础上实现了计算二进制代码覆盖率的方法。 2、研究了基
18、于遗传算法的智能模糊测试技术,并使用二进制代码覆盖率作为适应度函数,来指导测试数据的生成。 3、研究并提出了一种基于逆向工程的,动态分析为主、静态分析为辅的缓冲区溢出漏洞自动检测、定位、分析技术。 1.5 本文的章节安排 本文的组织结构如下: 第 1 章绪论,概述了选题的背景和意义,选题相关内容的研究现状,概述了本文的研究内容、研究意义以及主要工作,最后介绍了论文的章节安排。 第 2 章 ActiveX 控件安全性分析与模糊测试技术,介绍了 ActiveX 控件的原理技术,常见软件漏洞的分类以及 ActiveX 控件漏洞自身的特点,然后介绍了传统的漏洞挖掘方法和模糊测试技术的定义、原理以及优缺
19、点,最后提出了使用进化算法改进模糊测试。 第 3 章漏洞分析相关技术,介绍了漏洞分析相关的技术,包括基于调试技术的动态分析方法,在此基础上研究出一套高效、可控的动态分析方法用于计算二进制文件的代码覆盖率,最后介绍了基于 IDA Pro 的静态分析方法。 第 4 章 ActiveX 控件漏洞挖掘分析系统实现,介绍了漏洞自动 挖掘系统的模块组成以及模块间的关系,还有系统运行的流程图,最后分析了该系统现在的优缺点。 第 5 章 ActiveX 控件漏洞挖掘分析系统实现验证及结果分析,使用了一款用户量很大的网络电视软件作为案例,使用漏洞自动挖掘系统对该软件进行测试分析,最后发现了 6 个缓冲区溢出漏洞。 第 6 章总结与展望,总结了本文的工作,并分析了本文工作的不足和需要改进的地方。