【摘要】漏洞挖掘是网络攻防技术的重要组成部分。 首先介绍
了漏洞的概念、漏洞的成因、漏洞的主要分类以及 漏洞挖掘一般流程,然后研究了补丁分析和测试技术两种漏 洞挖掘方法,重点对二进制补丁比较、白盒测试、黑盒测试 等具体漏洞挖掘技术进行了分析,比较了各种漏洞挖掘技术 的优缺点。
【关键词】漏洞;漏洞挖掘;测试技术
1 引言
目前,无论从国家层面的网络安全战略还是社会层面的 信息安全防护,安全漏洞已成为信息对抗双方博弈的核心问 题之一。然而,针对具体安全漏洞, 安全研究者往往进行 大量的重复工作, 研究效率和效果上也有相当的局限性。 因此,应该加大对漏洞挖掘的研究力度,以便对各类漏洞采 取更为主动合理的处理方式。
2 漏洞的概念及分类 2.1 什么是漏洞
任何系统和软件的运行都会假定一个安全域,这个安全 域是由安全策略规定的,在该域内的任何操作都是安全的、 可控的,一旦超出了该域或者违反了安全策略,系统或者软
件的运行就是不可控的、未知的。漏洞是由安全域切换到非 安全域的触发点,即在计算机安全领域因设计不周而导致的
系统或软件存在的缺陷,从而可以使攻击者在非授权的情况 下访问或者破坏系统。漏洞是静态的、被动的,但是可触发 的。
2.2 漏洞的分类 每一个漏洞都有多个特征,而根据不同的特征可
以将漏 洞按照不同的方式分类。一般情况下,漏洞信息应包括漏洞 名称、漏洞成因、漏洞级别、漏洞影响、受影响的系统、漏 洞解决方案、漏洞利用类型和漏洞利用方法等。本文根据漏 洞的成因对漏洞进行分类,具体可分为:
缓冲区溢出错误( Buffer Overflow ),未对输入缓冲区的 数据进行长度和格式的验证;
输入验证错误 ( Input Validation Error ),未对用户输入的 数据进行合法性验证;
边界条件错误( Boundary Condition Error ),未对边界条 件进行有效性验证;
访问验证错误( Access Validation Error ),访问验证存在 逻辑上的错误;
意外条件错误( Exceptional Condition Error ),程序逻辑 未考虑意外和特例;
配置错误( Configuration Error ),系统或软件的参数或 策略配置错误;
其他错误( Others)。
3 漏洞挖掘技术的概念及分类
漏洞的研究主要分为漏洞挖掘与漏洞分析两部分。漏洞 挖掘技术是指对未知漏洞的探索,综合应用各种技术和工 具,尽可能地找出软件中的潜在漏洞。然而这并非一件很容 易的事情,在很大程度上依赖于个人经验。根据分析对象的 不同,漏洞挖掘技术可以分为基于源码的漏洞挖掘技术和基 于目标代码的漏洞挖掘技术。
基于源码的漏洞挖掘的前提是必须能获取源代码,对于 一些开源项目,通过分析其公布的源代码,就可能找到存在 的漏洞。例如对
Linux 系统的漏洞挖掘就可采用这种方法。 使用源码审核技术,对软
件的源代码进行扫描,针对不安全 的库函数使用以及内存操作进行语义上的检查,从而发现安 全漏洞,静态分析技术是其中的典型技术。
然而大多数的商业软件其源码很难获得,不能从源码的 角度进行漏洞挖掘,只能采用基于目标代码的漏洞挖掘技 术。对目标码进行分析涉及编译器、指令系统、可执行文件 格式等多方面的知识,难度较大。基于目标代码的漏洞挖掘 首先将要分析的二进制目标代码反汇编,得到汇编代码;然 后对汇编代码进行切片,即对某些上下文关联密切有意义的 代码进行汇聚,降低其复杂性;最后通过分析功能模块来判
断是否存在漏洞。
4 漏洞挖掘一般流程
M. Sutton 等提出了模糊( Fuzzing )测试的一般流程, 他将模糊
测试的流程划分为识别目标、识别输入、生成模糊 测试数据、执行模
糊测试数据、监视异常、确定可利用性等 六个流程, 如图 1左侧所示。 文献[4]提出的漏洞挖掘流程如 图 1 右侧所示。
5 常见的漏洞挖掘方法 目前,还不存在漏洞自动挖掘的解决方
案,更没有漏洞 自动挖掘程序,只有一些漏洞挖掘的思路、方法和漏洞挖掘 的辅助工具,主要以人工分析为主,漏洞挖掘在很大程度上 是个人行为,漏洞挖掘的思路和方法因人而异,但漏洞挖掘 的方法还是有迹可寻的,归纳起来,漏洞挖掘方法主要有二 进制比对技术即补丁比较和测试技术两种。
5.1 二进制比对技术 二进制比对技术又可称为补丁比对技术,它
主要是被用 以挖掘已经发现的漏洞,因此在一定意义上也可被认为是一 种漏洞分析技术。由于安全公告中一般都不指明漏洞的确切 位置和成因,使得漏洞的有效利用比较困难。但漏洞一般都 有相应的补丁,所以可以通过比较补丁前后的二进制文件, 确定漏洞的位置和成因。补丁比较主要包括源码补丁比较和 二进制补丁比较两种。
5.1.1 源码补丁比较
源码补丁比较主要是针对开源软件或系统,例如 等。当有漏洞出现后官方会发布源码补丁文件。采取逐行对 比的方式,比较补丁前和补丁后的文本文件的异同处,以发 现源码的不同处,进而找到漏洞产生的原因。以下是一个有 漏洞的程序:
Linux
#include
Int main (int argc , char*argv[] ) {char buff[16] ; if ( argc>1)
{ Strcpy (buff , argv[1] );
}
printf (“buff is %s\\n”, buff) return();
}
下面是对上述程序修补漏洞后的版本:
#include Int main ( int argc,{char buff[16] ; if( argc>1)
{if (, strlen(argv[1]>15); return();
strcpy (buff, argv[1] ) ;
}
char*argv[]
)printf (“buff is %s\\n”, buff); return();
}
将两个源程序进行对比以后可以得出如下结果:
If(strlen(argv[1]) >15); return();
可以看出,在程序的原版本中没有判断而直接进行字符 串拷贝, 这就存在缓冲区溢出漏洞,而修补漏洞后的版本 中增加的代码是判断传入参数的字符长度,这就避免了此类 缓冲区溢出漏洞。
由此可以看出,只要找到程序的不同之处,并代人源程 序分析,就可以定位漏洞的位置并查明漏洞的机理。
5.1.2 二进制补丁比较 目前常用的二进制补丁比对方法主要分为
三类。
( 1 ) 基于文本的比对。基于文本的比对是最为简单的 一种补
丁比对方式,通过对两个二进制文件(补丁前和补丁 后)进行对比,对文件比对中出现的任何一点差异,都不做 处理地写人结果之中。这种方法的后果是最后输出的结果范 围很大,容易出现极多的误报情况,漏洞定位精度极差,且 结果不容易被漏洞分析人员理解,因此仅适用于文件中产生 变化较少的情况。
( 2) 基于汇编指令的比对。基于汇编指令的二进制文 件比对是先对二进制文件进行反汇编,然后将两个反汇编之 后的文件进行对比, 具有代表性的工具如 eEye 发布的 EBDS ( eEye Binary
Diffing Suite )软件工具中的 Binary Diffing Starter。这种方式虽然较
直接的二进制文本比对要进步,比 对结果更容易被分析人员理解, 但是仍然存在输出结果范 围大,误报情况多和漏洞定位不精确的缺点。更重要的是基 于汇编指令的补丁比对方法很容易受编译器编译优化的影 响,结果会变得非常复杂。
( 3)基于结构化的比对。 基于结构化比对的方法是 Halva
Flake 在 2004 年提出的,这种方法的基本思想是:给定两个 待比对
的文件 A1 和 A2, 将 A1 和 A2 的所有函数用控制流 图来表示,通过比对两个图是否同构来建立函数之间一对一 的映射。该方法从逻辑结构的层次上对补丁文件进行了分 析,但当待比对两个二进制文件较大时, 由于提取签名信息、 进行结构化比对的运算量和存储量非常巨大,程序的执行效 率非常低。 D.Brumley 等人在此基础上,提出了基于程序控 制流程图 (CFG )的约束规约分析方法, 一定程度上提高了 漏洞定位精度。总之,目前基于结构化的补丁比对在执行效 率和漏洞定位的精确性方面还存在很大的发展空间。
5.2 测试技术 5.2.1 白盒测试
白盒测试是基于源码的测试技术,直接面对程序中的数 据和算法,进行控制流分析和数据流分析。在此需要说明的 是,很多漏洞都是数据和算法共同造成的,并非单是数据或 者算法的原因。控制流分析一般要得出程序的控制流图,就 是程序的调用、跳转结构,是程序从入口到出口的路径图。 数据流分析一般是跟踪数据的产生、传输、
处理和存储等。 在安全性测试的应用中,这两种分析方法应该结合。下面以 针对数组越界的测试进行分析。
数组是程序语言中一种数据类型,它的数据在内存中连 续存放。数组变量所拥有的内存空间可以在程序运行前确 定,也可以在程序运行时动态决定。然而如果数组的赋值或 引用长度超出分配长度,就会导致程序异常。这种异常一方 面是由于程序员的错误编码造成的,另一方面是由于一些弱 函数,例如 strcpy 、strcat、 memcpy 等造成的。这种情况下, 要跟踪数组变量的定义、赋值、引用等,此外还要考虑这些 变量所在的环境和上下文,例如在 strcpy 之前,如果已经作 了长度检测(比如调用了 strlen), 就不会出现数组越界的 情况。如果说针对 C/C++ 的源码对 strcpy 或 strlen 作跟踪是 属于数据流分析的话,那么为了处理数组变量程序的各种调 用和跳转就属于控制流分析了。
如果源码是C/ C++语言,需
要进行预编译、词法分析和语法分析,得出控制流图,然后 在每个分支上跟踪数组变量。
总之, 白盒测试是基于源码的,也就是在人可以理解 程序或者测试工具可以理解程序的条件下,对程序安全性进 行测试。这种测试其实是一种对已有漏洞模式的匹配,只可 能发现已知模式的漏洞,而对于未知模式为力。同时, 这种测试还会产生误报。对这种测试而言,了解的程序细节 越详细测试的结果也就越准确。本文认为,基于白盒测试技 术的安全性测试关注的是数据操作和算法逻辑,对这两方面 进行跟踪、抽象和分析,然后去匹配已知的不安全模式,而 得出结论。
5.2.2 黑盒测试
在软件的设计和开发过程中,无论是设计者还是开发者 都会作一个隐含假设,即软件存在输入域,用户的输入会限 定在该输入域中。然而在软件的实际应用中,没有可以将用 户的输入在一定范围内的机制,特别是一些恶意用户, 他们会通过各种方法寻找输入域之外值,以期发现软件的漏 洞。黑盒测试就是利用各种输入对程序进行探测,并对运行 程序进行分析,以期发现系统漏洞的测试技术。这种测试技 术仅仅需要运行的程序而不需要分析任何源代码,测试者对 软件内部一无所知,但是清楚地知道软件能做什么,能够对 程序基于输入和输出的关联性进行分析。
黑盒测试最关键的问题是测试数据的选取。既然知道软 件能做什么,那么也就大概知道该软件的安全输入域的范 围。所以测试最好是选择软件安全输入域之外的数据。当然 这还是不够的,测试人员必须有知识和经验的积累,例如, 溢出漏洞在漏洞总量中占了很大比例,并且这类漏洞多是由 特殊字符或者超长字符串导致的,如果分析总结以往溢出漏 洞的利用方法,研究这些超长字符或者特殊字符串的构造方 式,同样有利于测试数据的选取。 黑盒测试的步骤 是这样的:首先,分析相同领域或者相似软件的安全问题, 归纳总结出一些规则或者模板;其次根据规则或模板构造测 试数据对软件进行测试;再次验证软件输出的正确性;最后 确定一些疑似的漏洞点。总之,黑盒测试属于功能测试,对 程序内部不予考虑。这种测试更像是一次攻击,也可以较直 接地测出一些问题,但缺点是测试数据不好选择,很难穷尽 软件的所有可能输人。
5.2.3 灰盒测试 灰盒测试综合了白盒测试和黑盒测试的优点。灰
盒测试 表现为与黑盒测试相似的形式,然而测试者具有程序的先验 知识,它对于程序的结构和数据流都有一定的认识。这种测 试可以直接
针对数据流中感兴趣的边界情况进行测试,从而 比黑盒测试更高效。典型的灰盒测试有二进制分析,二进制 分析往往首先通过逆向过程 ( ReversEngineering ,RE )来获 得程序的先验知识,然后通过反编译器、反汇编器等辅助工 具确定有可能出现漏洞的行,反向追踪以确定是否有利用的 可能性。常用的反汇编器有 IDA Pro ,反编译器有
Boomerang , 调试器有 OllyDbg 、WinDbg 等。灰盒测试具有比黑
盒测试更 好的覆盖性,然而逆向工程非常复杂, 要求熟悉汇编语言、 可执行文件格式、编译器操作、操作系统内部原理以及其他 各种各样的底层技巧。
5.2.4 结束语 无论是黑盒测试、白盒测试还是灰盒测试得到的都
是一 些漏洞的疑似点,至于这些疑似点是否是漏洞,还需要人工 分析。但是使用这些技术来辅助发现漏洞是必要的,节省了 大量的人力,将人员的精力转移到分析几个疑似漏洞点上。 白盒测试的难点是如何有效分析软件的数据操作和算法逻 辑,如何判定一个漏洞; 黑盒测试的难点是测试数据的选 取,这一部分需要经验和知识积累;灰盒测试的难度在于逆 向工程非常复杂,对测试人员的专业水平要求较高。
6 结束语 漏洞挖掘是网络攻防技术的重要组成部分。本文介绍了
漏洞的概念、漏洞的成因、漏洞挖掘流程等,重点研究了几 种常见的漏洞挖掘方法,各种方法都有其优缺点,在实际的 工作中,漏洞挖掘并不单纯的只使用一种方法,而是多种分 析技术相互结合、优势互补的综合运用过程。
参考文献
[1] 王丰辉 . 漏洞相关技术研究 [D]. 北京: 北京邮电大
学, 2009.
[2] 袁江 . 基于 CVE 知识库的危急漏洞挖掘与分析技 术研究 [D]. 哈尔滨: 哈尔滨理工大学, 2008.
[3] 迟强, 罗红, 乔向东 . 漏洞挖掘分析技术综述 [J]. 计算机
与信息技术, 2009(07) .
[4] 徐良华, 孙玉龙,高丰等 . 基于逆向工程的软件漏 洞挖掘
技术 [J]. 微计算机信息, 2006, 22( 8-3) .
[5] SUTTON M , GREEN A , AMINI P. Fuzzing : Bruce Force Vulnerability Discovery[M]. Addison-Wesley Professional, 2007.8-15.
[6] 文伟平, 吴兴丽 . 软件安全漏洞挖掘的研究思路与 发展趋
势 [J]. 信息网络安全, 2009, 27( 10)78-81.
作者简介:
王希忠( 1968- ),男,汉族,哈尔滨工程大学计算机应 用技术专业,硕士研究生,现任黑龙江省电子信息产品监督 检验院院长,研究员级高工,黑龙江省“数据安全与计算机 安全”领军人才梯队带头人;主要研究方向和关注领域:网 络与信息安全、物联网、信息系统风险评估等。
黄俊强( 1974- ),男,汉族,沈阳工业学院,本科,黑 龙江省电子信息产品监督检验院,信息安全测评中心主任, 高级工程师;
主要研究方向和关注领域:网络与信息安全、 风险评估与等级保护测评。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- awee.cn 版权所有 湘ICP备2023022495号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务