最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

漏洞挖掘技术研究

来源:动视网 责编:小OO 时间:2025-09-29 06:25:29
文档

漏洞挖掘技术研究

漏洞挖掘技术研究作者:王希忠黄俊强来源:《信息安全与技术》2014年第06期        【摘要】漏洞挖掘是网络攻防技术的重要组成部分。首先介绍了漏洞的概念、漏洞的成因、漏洞的主要分类以及漏洞挖掘一般流程,然后研究了补丁分析和测试技术两种漏洞挖掘方法,重点对二进制补丁比较、白盒测试、黑盒测试等具体漏洞挖掘技术进行了分析,比较了各种漏洞挖掘技术的优缺点。        【关键词】漏洞;漏洞挖掘;测试技术        1引言        目前,无论从国家层面的网络安全战略还是社会层面的信息安
推荐度:
导读漏洞挖掘技术研究作者:王希忠黄俊强来源:《信息安全与技术》2014年第06期        【摘要】漏洞挖掘是网络攻防技术的重要组成部分。首先介绍了漏洞的概念、漏洞的成因、漏洞的主要分类以及漏洞挖掘一般流程,然后研究了补丁分析和测试技术两种漏洞挖掘方法,重点对二进制补丁比较、白盒测试、黑盒测试等具体漏洞挖掘技术进行了分析,比较了各种漏洞挖掘技术的优缺点。        【关键词】漏洞;漏洞挖掘;测试技术        1引言        目前,无论从国家层面的网络安全战略还是社会层面的信息安
漏洞挖掘技术研究

作者:王希忠 黄俊强

来源:《信息安全与技术》2014年第06期

        【摘要】漏洞挖掘是网络攻防技术的重要组成部分。首先介绍了漏洞的概念、漏洞的成因、漏洞的主要分类以及漏洞挖掘一般流程,然后研究了补丁分析和测试技术两种漏洞挖掘方法,重点对二进制补丁比较、白盒测试、黑盒测试等具体漏洞挖掘技术进行了分析,比较了各种漏洞挖掘技术的优缺点。

        【关键词】漏洞;漏洞挖掘;测试技术

        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*argv[])

        {char buff[16];

        if(argc>1)

        {if(,strlen(argv[1]>15);

        return();

        strcpy(buff, argv[1]);

        }

        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-),男,汉族,沈阳工业学院,本科,黑龙江省电子信息产品监督检验院,信息安全测评中心主任,高级工程师;主要研究方向和关注领域:网络与信息安全、风险评估与等级保护测评。

文档

漏洞挖掘技术研究

漏洞挖掘技术研究作者:王希忠黄俊强来源:《信息安全与技术》2014年第06期        【摘要】漏洞挖掘是网络攻防技术的重要组成部分。首先介绍了漏洞的概念、漏洞的成因、漏洞的主要分类以及漏洞挖掘一般流程,然后研究了补丁分析和测试技术两种漏洞挖掘方法,重点对二进制补丁比较、白盒测试、黑盒测试等具体漏洞挖掘技术进行了分析,比较了各种漏洞挖掘技术的优缺点。        【关键词】漏洞;漏洞挖掘;测试技术        1引言        目前,无论从国家层面的网络安全战略还是社会层面的信息安
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top