漏洞挖掘技术研究.doc
《漏洞挖掘技术研究.doc》由会员分享,可在线阅读,更多相关《漏洞挖掘技术研究.doc(29页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-date漏洞挖掘技术研究漏洞挖掘技术研究漏洞挖掘技术研究 【摘要】漏洞挖掘是网络攻防技术的重要组成部分。首先介绍了漏洞的概念、漏洞的成因、漏洞的主要分类以及漏洞挖掘一般流程,然后研究了补丁分析和测试技术两种漏洞挖掘方法,重点对二进制补丁比较、白盒测试、黑盒测试等具体漏洞挖掘技术进行了分析,比较了各种漏洞挖掘技术的优缺点。 【关键词】漏洞;漏洞挖掘;测试技术 1引言 目前,无论
2、从国家层面的网络安全战略还是社会层面的信息安全防护,安全漏洞已成为信息对抗双方博弈的核心问题之一。然而,针对具体安全漏洞, 安全研究者往往进行大量的重复工作, 研究效率和效果上也有相当的局限性。因此,应该加大对漏洞挖掘的研究力度,以便对各类漏洞采取更为主动合理的处理方式。 2漏洞的概念及分类 2.1什么是漏洞 任何系统和软件的运行都会假定一个安全域,这个安全域是由安全策略规定的,在该域内的任何操作都是安全的、可控的,一旦超出了该域或者违反了安全策略,系统或者软件的运行就是不可控的、未知的。漏洞是由安全域切换到非安全域的触发点,即在计算机安全领域因设计不周而导致的系统或软件存在的缺陷,从而可以使
3、攻击者在非授权的情况下访问或者破坏系统。漏洞是静态的、被动的,但是可触发的。 2.2漏洞的分类 每一个漏洞都有多个特征,而根据不同的特征可以将漏洞按照不同的方式分类。一般情况下,漏洞信息应包括漏洞名称、漏洞成因、漏洞级别、漏洞影响、受影响的系统、漏洞解决方案、漏洞利用类型和漏洞利用方法等。本文根据漏洞的成因对漏洞进行分类,具体可分为: 缓冲区溢出错误(Buffer Overflow),未对输入缓冲区的数据进行长度和格式的验证; 输入验证错误(Input Validation Error),未对用户输入的数据进行合法性验证; 边界条件错误(Boundary Condition Error),未对
4、边界条件进行有效性验证; 访问验证错误(Access Validation Error),访问验证存在逻辑上的错误; 意外条件错误(Exceptional Condition Error),程序逻辑未考虑意外和特例; 配置错误(Configuration Error),系统或软件的参数或策略配置错误; 其他错误(Others)。 3漏洞挖掘技术的概念及分类 漏洞的研究主要分为漏洞挖掘与漏洞分析两部分。漏洞挖掘技术是指对未知漏洞的探索,综合应用各种技术和工具,尽可能地找出软件中的潜在漏洞。然而这并非一件很容易的事情,在很大程度上依赖于个人经验。根据分析对象的不同,漏洞挖掘技术可以分为基于源码的漏
5、洞挖掘技术和基于目标代码的漏洞挖掘技术。 基于源码的漏洞挖掘的前提是必须能获取源代码,对于一些开源项目,通过分析其公布的源代码,就可能找到存在的漏洞。例如对Linux系统的漏洞挖掘就可采用这种方法。使用源码审核技术,对软件的源代码进行扫描,针对不安全的库函数使用以及内存操作进行语义上的检查,从而发现安全漏洞,静态分析技术是其中的典型技术。 然而大多数的商业软件其源码很难获得,不能从源码的角度进行漏洞挖掘,只能采用基于目标代码的漏洞挖掘技术。对目标码进行分析涉及编译器、指令系统、可执行文件格式等多方面的知识,难度较大。基于目标代码的漏洞挖掘首先将要分析的二进制目标代码反汇编,得到汇编代码;然后对
6、汇编代码进行切片,即对某些上下文关联密切有意义的代码进行汇聚,降低其复杂性;最后通过分析功能模块来判断是否存在漏洞。 4漏洞挖掘一般流程 M. Sutton 等提出了模糊(Fuzzing)测试的一般流程,他将模糊测试的流程划分为识别目标、识别输入、生成模糊测试数据、执行模糊测试数据、监视异常、确定可利用性等六个流程,如图 1左侧所示。文献4提出的漏洞挖掘流程如图1右侧所示。 5常见的漏洞挖掘方法 目前,还不存在漏洞自动挖掘的解决方案,更没有漏洞自动挖掘程序,只有一些漏洞挖掘的思路、方法和漏洞挖掘的辅助工具,主要以人工分析为主,漏洞挖掘在很大程度上是个人行为,漏洞挖掘的思路和方法因人而异,但漏洞
7、挖掘的方法还是有迹可寻的,归纳起来,漏洞挖掘方法主要有二进制比对技术即补丁比较和测试技术两种。 5.1二进制比对技术 二进制比对技术又可称为补丁比对技术,它主要是被用以挖掘已经发现的漏洞,因此在一定意义上也可被认为是一种漏洞分析技术。由于安全公告中一般都不指明漏洞的确切位置和成因,使得漏洞的有效利用比较困难。但漏洞一般都有相应的补丁,所以可以通过比较补丁前后的二进制文件,确定漏洞的位置和成因。补丁比较主要包括源码补丁比较和二进制补丁比较两种。 5.1.1 源码补丁比较 源码补丁比较主要是针对开源软件或系统,例如Linux等。当有漏洞出现后官方会发布源码补丁文件。采取逐行对比的方式,比较补丁前和
8、补丁后的文本文件的异同处,以发现源码的不同处,进而找到漏洞产生的原因。以下是一个有漏洞的程序: #include Int main(int argc, char*argv) char buff16; if(argc1) Strcpy(buff, argv1); printf(“buff is %sn”, buff) return(); 下面是对上述程序修补漏洞后的版本: #include Int main(int argc, char*argv) char buff16; if(argc1) if(,strlen(argv115); return(); strcpy(buff, argv1);
9、 printf(“buff is %sn”, buff); return(); 将两个源程序进行对比以后可以得出如下结果: If(strlen(argv1)15); return(); 可以看出,在程序的原版本中没有判断而直接进行字符串拷贝, 这就存在缓冲区溢出漏洞,而修补漏洞后的版本中增加的代码是判断传入参数的字符长度,这就避免了此类缓冲区溢出漏洞。 由此可以看出,只要找到程序的不同之处,并代人源程序分析,就可以定位漏洞的位置并查明漏洞的机理。 5.1.2 二进制补丁比较 目前常用的二进制补丁比对方法主要分为三类。 (1) 基于文本的比对。基于文本的比对是最为简单的一种补丁比对方式,通过对两
10、个二进制文件(补丁前和补丁后)进行对比,对文件比对中出现的任何一点差异,都不做处理地写人结果之中。这种方法的后果是最后输出的结果范围很大,容易出现极多的误报情况,漏洞定位精度极差,且结果不容易被漏洞分析人员理解,因此仅适用于文件中产生变化较少的情况。 (2) 基于汇编指令的比对。基于汇编指令的二进制文件比对是先对二进制文件进行反汇编,然后将两个反汇编之后的文件进行对比,具有代表性的工具如eEye发布的EBDS (eEye Binary Diffing Suite)软件工具中的Binary Diffing Starter。这种方式虽然较直接的二进制文本比对要进步,比对结果更容易被分析人员理解,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 漏洞 挖掘 技术研究
限制150内