一种基于函数调用的缓冲区溢出漏洞动态检测方法技术

技术编号:11692354 阅读:96 留言:0更新日期:2015-07-08 11:40
本发明专利技术公开了一种基于函数调用的缓冲区溢出漏洞动态检测方法,包括如下步骤:首先获取被测程序的函数调用指令地址和返回指令地址,构建输入参数、运行被测程序;当函数调用发生,获取基址寄存器中的值EBP_B;在函数调用结束时,获取基址寄存器中的值EBP_A;若EBP_B≠EBP_A,则记录漏洞并报警;若EBP_B=EBP_A,则判断无漏洞;重复上述过程直至被测程序运行结束,继续获取该次运行的函数调用信息,与软件异常行为模型进行匹配,若匹配,记录可能漏洞;若不匹配,则该次输入下程序的行为没有体现出缓冲区溢出漏洞的特征。构造大量输入重复检测。该方法能够进行动态检测,并提高检测效率。

【技术实现步骤摘要】

本专利技术属于本专利技术涉及一种缓冲区溢出漏洞的检测方法,属于信息安全技术领 域。
技术介绍
随着计算机技术的迅速发展,人类社会的信息化程度越来越高,整个社会的政治、 经济、军事、文化以及其他领域对计算机信息系统的依赖程度也越来越高。在这种情况下, 计算机系统的安全性得到了人们越来越多的关注。然而,大型软件、系统的编写需要许许多 多程序员共同完成,他们将一个软件或系统分成若干板块,分工编写,然后再汇总,测试;最 后再修补、发布,因此在软件中存在安全漏洞几乎是不可避免的。软件安全漏洞指软件设计 实现过程中被引入的、在数据访问或行为逻辑等方面的缺陷。这些漏洞常常被攻击者利用, 从而使程序行为违背一定的安全策略。基于上述原因,目前对软件安全漏洞检测技术的研 宄越来越受到重视。 按照检测过程中是否需要执行程序的标准,软件安全漏洞检测技术分为动态检测 和静态检测。 (1)静态检测 静态检测方法大致可分为四类: 第一类是基于词法分析的检测方法。对应于早期检测工具,例如Grep工具等。它 出现的时间较长,且发展较成熟,其优点是:漏洞特征以数据的形式独立于分析程序存在, 可以灵活扩展;另外,词法分析可以保证较好的执行效率。但它的缺点非常明显:以数据形 式存在的特征库并不能对漏洞进行充分、完整的描述,从而造成漏洞信息收集的不完整,也 限制了与之配合的相关算法仅能进行词法分析,因此影响了检测能力。 第二类是注释驱动的约束分析和检测方法。它虽然引入了语法分析,却是基于程 序验证系统的思想和方法进行的。这要求操作人员对检测目标非常熟悉,甚至需人工编写 程序规范和注释,因此检测的自动化程度较低。DavidEvans以及DavidLarochelle所研 宄的Splint以及基于Splint所作的改进都是属于这种方法。 第三类方法为将源码的特征进行抽象、建模,将漏洞检测问题转化为约束分析和 求解的问题。它们一般基于已有的程序分析工具(如商业软件codesurfer)实现,其优点 是:这些程序分析工具的功能非常强大,能够生成抽象语法树、函数调用关系图、控制流图 甚至指针指向关系图等语法、语义信息。使用工具提供的编程接口,可以直接基于这些信息 进行分析,从而减小了设计上的复杂度。缺点是:生成的抽象语法树等信息中包含许多杂 乱信息,不利于分析,而且,对一个很小的编译单位,大概能产生其1000倍的抽象语法树文 本,最终产生的抽象语法树会占据整个内存。对于复杂的源程序,这些方法的检测效率将大 大降低。 第四类方法为反汇编扫描,反汇编对于不公开源代码的程序来说往往是最有效的 发现安全漏洞的办法。例如,利用一种优秀的反汇编程序IDA就可以得到目标程序的汇编 脚本语言,再对汇编出来的脚本语言使用扫描的方法,从而进一步识别一些可疑的汇编代 码序列。通过反汇编来寻找系统漏洞的好处是从理论上讲,不管多么复杂的问题总是可以 通过反汇编来解决的。它的缺点也是显然的,这种方法费时费力,对人员的技术水平要求很 高,同样不能检测到程序动态运行过程中产生的安全漏洞。 ⑵动态检测 动态检测是在程序运行过程中注入测试数据,通过对程序的运行环境(包括环境 变量、内存、堆和栈等)进行分析,观察程序运行是否正常、程序行为是否满足要求,来检测 程序是否存在漏洞。动态检测技术的优点是不直接面对源代码,不需要修改目标程序源代 码,这在一定程度上提高程序的保密性。但其明显的不足是动态检测技术对输入的依赖性, 只有当特定的输入是程序执行到危险点时,漏洞才会被发现,因此,定位不准确、漏报率高。
技术实现思路
有鉴于此,本专利技术提供了,能 够进彳丁动态检测,并提尚检测效率。 为了达到上述目的,本专利技术的技术方案包括如下步骤: 步骤一、将被测程序的可执行文件进行反汇编,然后通过静态分析,从反汇编所得 到的结果中获取函数调用指令地址和返回指令地址;其中函数调用指令地址仅保留被测程 序内部的函数调用指令。 步骤二、在函数调用地址和返回指令地址处设置断点,构建一定数量的输入参数, 并在每个输入参数下运行被测程序执行如下步骤三~步骤四,获取在每个输入参数下,函 数调用过程中是否发生缓冲区溢出以及是否具有缓冲区溢出漏洞的可能: 步骤三、当被测程序运行到函数调用地址时,函数调用发生,在断点处暂停,获取 基址寄存器中的值EBP_B;在函数调用结束时,在断点处暂停,获取基址寄存器中的值EBP_ A。 若在函数调用结束时,EBP_B辛EBP_A,则该函数在本次函数调用过程中存在缓冲 区溢出漏洞,记录该漏洞并报警;若在函数调用结束时,EBP_B=EBP_A,则该函数在本次函 数调用过程中没有缓冲区溢出漏洞。 判断被测程序运行是否结束,如果结束,以所记录的漏洞作为当前输入参数下漏 洞动态检测结果,并继续执行步骤四,如果没结束,继续执行被测程序,返回步骤三。 步骤四、通过本步骤获取当输入参数不能确切造成程序缓冲区溢出时,被测程序 在进行函数调用时存在缓冲区溢出漏洞的可能: 被测程序运行结束后,获取该次运行的函数调用信息,将所获取的函数调用信息 与软件异常行为模型进行匹配,若函数调用信息与软件异常行为模型匹配,则该程序存在 缓冲区溢出漏洞的可能,在匹配位置记录该漏洞;若函数调用信息与软件异常行为模型不 匹配,则该输入参数下,程序表现出的函数调用行为特征没有表现出缓冲区溢出漏洞的可 能;本方法中所记录的漏洞即为漏洞动态检测结果;其中软件异常行为模型为依据漏洞特 征条件、通过有限自动机建立的模型。进一步地,软件异常行为模型具体为M= {Q,2, 6,Cltl,F};其中:Q表示有限状态 集;2表示输入字符表,包括漏洞特征模式产生的特征条件;S为状态转移函数;%为初始 状态;F为终结状态。 进一步地,漏洞特征模式产生的条件包括以下a、b、c和d四种:a)调用了数据拷贝函数;b)数据拷贝前没有进行长度比较;c)数据拷贝函数参数 不是常量;d)数据拷贝函数的参数外部可控。进一步地,数据拷贝函数包括字符串拷贝函数、内存复制函数、格式化字符串函 数、格式转换函数、读取文件函数、获取用户输入函数以及读取环境变量函数。进一步地,d)中数据拷贝函数的参数外部可控具体为数据拷贝函数调用参数中拷 贝的源数据和拷贝长度与用户的输入相关。有益效果:本专利技术在缓冲区溢出漏洞的原理分析的基础上,从函数调用的角度出发提出了基 于栈寄存器值EBP的漏洞检测过程。该检测过程测精度高,误报率低;同时为了降低该检测 方法对输入的依赖性,本专利技术又结合软件行为建模思想和缓冲区溢出漏洞的危险拷贝函数 行为特征构造了软件异常行为模型,在通过前面的漏洞检测模型检测后,对软件的每次完 整运行获取其函数调用相关信息,与异常行为模型进行匹配,进行二次检测,弥补了检测模 型漏报率高的缺点。【附图说明】 图1为本专利技术方法流程图; 图2堆栈操作示意图;图3为实施例中有限自动机模型的状态转移图。【具体实施方式】下面结合附图并举实施例,对本专利技术进行详细描述。本专利技术的目的是针对上述已有技术存在的不足,提出一种基于函数调用序列的缓 冲区溢出漏洞检测方法。本专利技术的基本思想是:堆栈(或者说缓冲区)同函数调用是息息 相关的,在进行函数调用的同时,会在原先进程堆栈的基础上产生本文档来自技高网
...
一种<a href="http://www.xjishu.com/zhuanli/55/CN104766015.html" title="一种基于函数调用的缓冲区溢出漏洞动态检测方法原文来自X技术">基于函数调用的缓冲区溢出漏洞动态检测方法</a>

【技术保护点】
一种基于函数调用的缓冲区溢出漏洞动态检测方法,其特征在于,包括如下步骤:步骤一、将被测程序的可执行文件进行反汇编,然后通过静态分析,从反汇编所得到的结果中获取函数调用指令地址和返回指令地址;其中所述函数调用指令地址仅保留被测程序内部的函数调用指令;步骤二、在所述函数调用地址和返回指令地址处设置断点,构建一定数量的输入参数,并在每个输入参数下运行被测程序执行如下步骤三~步骤四,获取在每个输入参数下,本次运行过程中漏洞动态检测结果以及在该输入参数下是否具有缓冲区溢出漏洞的可能:步骤三、当被测程序运行到函数调用地址时,函数调用发生,在断点处暂停,获取基址寄存器中的值EBP_B;在函数调用结束时,在断点处暂停,获取基址寄存器中的值EBP_A;若在函数调用结束时,EBP_B≠EBP_A,则该函数在本次函数调用过程中存在缓冲区溢出漏洞,记录该漏洞并报警;若在函数调用结束时,EBP_B=EBP_A,则该函数在本次函数调用过程中没有发生缓冲区溢出;判断被测程序运行是否结束,如果结束,以所记录的漏洞作为当前输入参数下漏洞动态检测结果,并继续执行步骤四,如果没结束,继续执行被测程序,返回步骤三;步骤四、通过本步骤获取当输入参数不能确切造成程序缓冲区溢出时,被测程序在进行函数调用时存在缓冲区溢出漏洞的可能:被测程序运行结束后,获取该次运行的函数调用信息,将所获取的函数调用信息与软件异常行为模型进行匹配,若函数调用信息与软件异常行为模型匹配,则该函数存在缓冲区溢出漏洞的可能,在匹配位置处记录该漏洞;若函数调用信息与软件异常行为模型不匹配,则判断在该输入参数下,被测程序的函数调用行为特征没有表现出缓冲区溢出漏洞的可能;本方法中所记录的漏洞即为漏洞动态检测结果;所述软件异常行为模型为依据漏洞特征条件、通过有限自动机建立的模型。...

【技术特征摘要】

【专利技术属性】
技术研发人员:胡昌振薛静锋周琦超李坚单纯
申请(专利权)人:北京理工大学
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1