CN104766015B - 一种基于函数调用的缓冲区溢出漏洞动态检测方法 - Google Patents

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

Info

Publication number
CN104766015B
CN104766015B CN201510170817.8A CN201510170817A CN104766015B CN 104766015 B CN104766015 B CN 104766015B CN 201510170817 A CN201510170817 A CN 201510170817A CN 104766015 B CN104766015 B CN 104766015B
Authority
CN
China
Prior art keywords
function
function call
buffer
leak
ebp
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201510170817.8A
Other languages
English (en)
Other versions
CN104766015A (zh
Inventor
胡昌振
薛静锋
周琦超
李坚
单纯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Institute of Technology BIT
Original Assignee
Beijing Institute of Technology BIT
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Institute of Technology BIT filed Critical Beijing Institute of Technology BIT
Priority to CN201510170817.8A priority Critical patent/CN104766015B/zh
Publication of CN104766015A publication Critical patent/CN104766015A/zh
Application granted granted Critical
Publication of CN104766015B publication Critical patent/CN104766015B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

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

Description

一种基于函数调用的缓冲区溢出漏洞动态检测方法
技术领域
本发明属于本发明涉及一种缓冲区溢出漏洞的检测方法,属于信息安全技术领域。
背景技术
随着计算机技术的迅速发展,人类社会的信息化程度越来越高,整个社会的政治、经济、军事、文化以及其他领域对计算机信息系统的依赖程度也越来越高。在这种情况下,计算机系统的安全性得到了人们越来越多的关注。然而,大型软件、系统的编写需要许许多多程序员共同完成,他们将一个软件或系统分成若干板块,分工编写,然后再汇总,测试;最后再修补、发布,因此在软件中存在安全漏洞几乎是不可避免的。软件安全漏洞指软件设计实现过程中被引入的、在数据访问或行为逻辑等方面的缺陷。这些漏洞常常被攻击者利用,从而使程序行为违背一定的安全策略。基于上述原因,目前对软件安全漏洞检测技术的研究越来越受到重视。
按照检测过程中是否需要执行程序的标准,软件安全漏洞检测技术分为动态检测和静态检测。
(1)静态检测
静态检测方法大致可分为四类:
第一类是基于词法分析的检测方法。对应于早期检测工具,例如Grep工具等。它出现的时间较长,且发展较成熟,其优点是:漏洞特征以数据的形式独立于分析程序存在,可以灵活扩展;另外,词法分析可以保证较好的执行效率。但它的缺点非常明显:以数据形式存在的特征库并不能对漏洞进行充分、完整的描述,从而造成漏洞信息收集的不完整,也限制了与之配合的相关算法仅能进行词法分析,因此影响了检测能力。
第二类是注释驱动的约束分析和检测方法。它虽然引入了语法分析,却是基于程序验证系统的思想和方法进行的。这要求操作人员对检测目标非常熟悉,甚至需人工编写程序规范和注释,因此检测的自动化程度较低。David Evans以及David Larochelle所研究的Splint以及基于Splint所作的改进都是属于这种方法。
第三类方法为将源码的特征进行抽象、建模,将漏洞检测问题转化为约束分析和求解的问题。它们一般基于已有的程序分析工具(如商业软件codesurfer)实现,其优点是:这些程序分析工具的功能非常强大,能够生成抽象语法树、函数调用关系图、控制流图甚至指针指向关系图等语法、语义信息。使用工具提供的编程接口,可以直接基于这些信息进行分析,从而减小了设计上的复杂度。缺点是:生成的抽象语法树等信息中包含许多杂乱信息,不利于分析,而且,对一个很小的编译单位,大概能产生其1000倍的抽象语法树文本,最终产生的抽象语法树会占据整个内存。对于复杂的源程序,这些方法的检测效率将大大降低。
第四类方法为反汇编扫描,反汇编对于不公开源代码的程序来说往往是最有效的发现安全漏洞的办法。例如,利用一种优秀的反汇编程序IDA就可以得到目标程序的汇编脚本语言,再对汇编出来的脚本语言使用扫描的方法,从而进一步识别一些可疑的汇编代码序列。通过反汇编来寻找系统漏洞的好处是从理论上讲,不管多么复杂的问题总是可以通过反汇编来解决的。它的缺点也是显然的,这种方法费时费力,对人员的技术水平要求很高,同样不能检测到程序动态运行过程中产生的安全漏洞。
(2)动态检测
动态检测是在程序运行过程中注入测试数据,通过对程序的运行环境(包括环境变量、内存、堆和栈等)进行分析,观察程序运行是否正常、程序行为是否满足要求,来检测程序是否存在漏洞。动态检测技术的优点是不直接面对源代码,不需要修改目标程序源代码,这在一定程度上提高程序的保密性。但其明显的不足是动态检测技术对输入的依赖性,只有当特定的输入是程序执行到危险点时,漏洞才会被发现,因此,定位不准确、漏报率高。
发明内容
有鉴于此,本发明提供了一种基于函数调用的缓冲区溢出漏洞动态检测方法,能够进行动态检测,并提高检测效率。
为了达到上述目的,本发明的技术方案包括如下步骤:
步骤一、将被测程序的可执行文件进行反汇编,然后通过静态分析,从反汇编所得到的结果中获取函数调用指令地址和返回指令地址;其中函数调用指令地址仅保留被测程序内部的函数调用指令。
步骤二、在函数调用地址和返回指令地址处设置断点,构建一定数量的输入参数,并在每个输入参数下运行被测程序执行如下步骤三~步骤四,获取在每个输入参数下,函数调用过程中是否发生缓冲区溢出以及是否具有缓冲区溢出漏洞的可能:
步骤三、当被测程序运行到函数调用地址时,函数调用发生,在断点处暂停,获取基址寄存器中的值EBP_B;在函数调用结束时,在断点处暂停,获取基址寄存器中的值EBP_A。
若在函数调用结束时,EBP_B≠EBP_A,则该函数在本次函数调用过程中存在缓冲区溢出漏洞,记录该漏洞并报警;若在函数调用结束时,EBP_B=EBP_A,则该函数在本次函数调用过程中没有缓冲区溢出漏洞。
判断被测程序运行是否结束,如果结束,以所记录的漏洞作为当前输入参数下漏洞动态检测结果,并继续执行步骤四,如果没结束,继续执行被测程序,返回步骤三。
步骤四、通过本步骤获取当输入参数不能确切造成程序缓冲区溢出时,被测程序在进行函数调用时存在缓冲区溢出漏洞的可能:
被测程序运行结束后,获取该次运行的函数调用信息,将所获取的函数调用信息与软件异常行为模型进行匹配,若函数调用信息与软件异常行为模型匹配,则该程序存在缓冲区溢出漏洞的可能,在匹配位置记录该漏洞;若函数调用信息与软件异常行为模型不匹配,则该输入参数下,程序表现出的函数调用行为特征没有表现出缓冲区溢出漏洞的可能;本方法中所记录的漏洞即为漏洞动态检测结果;其中软件异常行为模型为依据漏洞特征条件、通过有限自动机建立的模型。
进一步地,软件异常行为模型具体为M={Q,Σ,δ,q0,F};其中:Q表示有限状态集;Σ表示输入字符表,包括漏洞特征模式产生的特征条件;δ为状态转移函数;q0为初始状态;F为终结状态。
进一步地,漏洞特征模式产生的条件包括以下a、b、c和d四种:
a)调用了数据拷贝函数;b)数据拷贝前没有进行长度比较;c)数据拷贝函数参数不是常量;d)数据拷贝函数的参数外部可控。
进一步地,数据拷贝函数包括字符串拷贝函数、内存复制函数、格式化字符串函数、格式转换函数、读取文件函数、获取用户输入函数以及读取环境变量函数。
进一步地,d)中数据拷贝函数的参数外部可控具体为数据拷贝函数调用参数中拷贝的源数据和拷贝长度与用户的输入相关。
有益效果:
本发明在缓冲区溢出漏洞的原理分析的基础上,从函数调用的角度出发提出了基于栈寄存器值EBP的漏洞检测过程。该检测过程测精度高,误报率低;同时为了降低该检测方法对输入的依赖性,本发明又结合软件行为建模思想和缓冲区溢出漏洞的危险拷贝函数行为特征构造了软件异常行为模型,在通过前面的漏洞检测模型检测后,对软件的每次完整运行获取其函数调用相关信息,与异常行为模型进行匹配,进行二次检测,弥补了检测模型漏报率高的缺点。
附图说明
图1为本发明方法流程图;
图2堆栈操作示意图;
图3为实施例中有限自动机模型的状态转移图。
具体实施方式
下面结合附图并举实施例,对本发明进行详细描述。
本发明的目的是针对上述已有技术存在的不足,提出一种基于函数调用序列的缓冲区溢出漏洞检测方法。本发明的基本思想是:堆栈(或者说缓冲区)同函数调用是息息相关的,在进行函数调用的同时,会在原先进程堆栈的基础上产生一个新的与该函数相关的局部堆栈用以存放函数的局部变量;在该函数返回时,局部堆栈会被销毁。以函数调用为判定单位,以保存在函数堆栈中原先的EBP值为判定的基准,对比函数调用发生时的EBP的值和函数调用结束时EBP的值,来判断该次调用是否发生了缓冲区溢出,每一次发生函数调用就判断一次,若前后的值不等,则报警。同时,程序每运行一次,使用工具监测并记录程序该次运行的函数调用序列,其代表了程序的一条可执行路径。针对记录下来的每个函数调用序列用定义好的缓冲区溢出漏洞模式进行匹配,若匹配成功,则报警。与传统的以单个函数调用为基本单位判断寄存器的值得方法比较,本方法能降低动态检测过程中对输入数据的依赖程度,结合了Fuzzing的挖掘技术和错误模式匹配技术,提高了检测率。
本实施例中的方法流程如图1所示,具体包括如下步骤:
步骤一、对于无源码的二进制可执行文件,为了获取程序何时调用函数,函数何时返回,需要进行简单的静态预处理。将目标代码反汇编,在反汇编的结果中找到并记录调用或是返回的指令对应的指令地址(call和ret),也即软件在载入内存之后的内存虚拟地址。通过动态跟踪及调试的方法,利用静态预处理中记录的函数调用和返回的指令地址。
其中函数调用指令地址仅保留被测程序内部的函数调用指令;
步骤二、,可以在将程序载入之后,在这些函数调用或是返回的地址处设置断点,当被测试的程序运行到这些函数调用或是函数返回的地址时,那么将会激发一个可以被捕获的异常,同时程序的也将这些断点处被暂停。
构建一定数量的输入参数,尽可能考虑异常情况并尽量覆盖程序的可执行路径,执行步骤三和四。异常情况是为了造成函数调用处发生缓冲区溢出,覆盖可执行路径能使步骤四中获取的函数调用信息更全面,匹配结果更精确。
并在每个输入参数下运行被测程序执行如下步骤三~步骤四,获取在每个输入参数下,本次运行过程中漏洞动态检测结果以及在该输入参数下是否具有缓冲区溢出漏洞的可能:
步骤三、当被测程序运行到函数调用地址时,在断点处暂停,执行函数调用;函数调用的过程中将采用漏洞模型进行漏洞检测,其中该漏洞模型的建立是在分析缓冲区溢出原理的基础上进行的。
缓冲区是程序运行时计算机内存中的一块连续的地址空间,它用于保存给定类型的数据。在一些高级语言的函数调用中,缓冲区是在堆栈上进行分配的。堆栈是一个后进先出的队列,它的增长方向与内存的增长方向正好相反,具体如图2所示。在正常情况下,处理器在函数调用时,将函数的参数、返回地址(即进行函数调用的那条指令的下一条指令的地址)及基址寄存器EBP(该寄存器存储的内存地址为函数在参数和变量压栈之前的内存地址)压入堆栈中,然后把当前的栈指针ESP作为新的基地址。如果函数有局部变量,则函数会把堆栈指针ESP减去某个值,为需要的动态局部变量腾出所需的内存空间,函数内使用的缓冲区就分配在腾出的这段内存空间上。函数返回时,弹出EBP恢复堆栈到函数调用前的地址,弹出返回地址到EIP以继续执行原程序。
假设软件接收一个长度超过缓冲区长度的字符串,由于堆栈的生长方向与内存的生长方向正好相反,EBP和EIP的值就有可能被覆盖。一般情况下会导致程序运行失败,但如果覆盖EIP的值刚好是攻击代码的内存地址,则程序会执行攻击代码,这就是缓冲区溢出漏洞的原理。
根据以上原理,出现了多种防止返回地址被覆盖的检测方式。StackGuard将一个随机canary值放到栈桢中返回地址的前面,如果返回地址被改变,canary值也会被修改,因此,当函数返回时,检测该canary值,如发生变化,与先前保存的副本不一样,则可判定为发生了缓冲区溢出攻击。StackShield对此做了改进,将返回地址在一个安全的地方保存下来,并在调用返回前进行返回地址恢复。这两类工具更着重缓冲区溢出攻击的防止上,而不是对缓冲区溢出漏洞本身的分析。从漏洞本身的检测上,返回地址一旦被覆盖,EBP的值一定会被覆盖,在不是被人为恶意构造攻击的情况下,EBP的值一定改变了。所以直接检测EBP的值既能达到检测目的,又节省了时间空间,提高了效率。所以本文提出一种检测模型,漏洞模型的一次判定过程具体过程如下:
在函数调用发生时,获取基址寄存器中的值EBP_B;在函数调用结束时,获取基址寄存器中的值EBP_A。
若在函数调用结束时,EBP_B≠EBP_A,则该函数在本次函数调用过程中存在缓冲区溢出漏洞,记录该漏洞并报警;若在函数调用结束时,EBP_B=EBP_A,则该函数在本次函数调用过程中没有缓冲区溢出漏洞;
判断被测程序运行是否结束,如果结束,则继续执行步骤四,如果没结束,则重复执行步骤三;
步骤四、被测程序运行结束后,获取该次运行的函数调用信息,将所获取的函数调用信息与软件异常行为模型进行匹配,若函数调用信息与软件异常行为模型匹配,则该程序存在缓冲区溢出漏洞的可能,在匹配位置记录该漏洞;若函数调用信息与软件异常行为模型不匹配,则该输入参数下,程序表现出的函数调用行为特征没有表现出缓冲区溢出漏洞的可能;
本方法中所记录的漏洞即为漏洞动态检测结果。
本实施例中函数调用信息的获取具体过程如下:本发明针对的是无源码的二进制可执行文件,为了获取程序的函数调用信息,可以采用逆向分析的方法,反编译成一种中间语言再进行分析,但这种方法耗时同时对分析人员有很高的要求,而且对于复杂的软件,分析难度会非常大。本发明采用动态监测的方法,来获取程序的函数调用信息,用不同的输入尽可能覆盖程序的所有可执行路径,分别获取函数调用的时序关系。
本发明采用SoftSnoop对可二进制执行程序进行动态监控,并获取日志。SoftSnoop是一款功能强大的程序辅助破解工具,函数调用监控工具。可以捕获从任一模块产生的到任一模块的Api调用,包括动态加载的模块;可以在调用Api之前输出Api名称,Api所属模块,Api参数及调用这个Api的地址;可以在Api返回之后输出Api返回值,可以附着到正在运行的目标进程并捕获其Api,可以随意终止和继续捕获,目标进程不受影响。最后,我们对获取的日志进行分析,提取需要的函数调用信息,并和异常行为模型进行模式匹配,通过匹配结果来判断软件是否存在缓冲区溢出漏洞。
本实施例中,软件异常行为模型为依据漏洞特征条件、通过有限自动机建立的模型。
其中危险拷贝函数调用的漏洞特征具体为:软件行为是指软件运行表现形式和状态演变的过程,在与计算机的交互中,人类的行为就是通过软件的行为来实现的。软件行为分析技术,其核心就是对行为建模。对软件行为建模的研究分散在各个具体的应用领域,针对问题领域的不同建立的软件行为模型也就自然而然地侧重于描述软件不同方面的行为特征。软件发生缓冲区溢出时也会表现出一定的行为特征,从这些特征入手可以建立异常行为模型。
软件程序中缺乏对缓冲区边界的检查是造成缓冲区溢出的根本原因,C库函数中有些字符串操作函数、打印类函数等涉及数据拷贝的函数在其实现时出于效率的考虑,没有加入边界检查代码。进行程序设计时,这类函数使用频度很高,如果程序员在使用这些函数时也没有进行边界检查,很容易出现缓冲区溢出的情况,我们把这类函数称作危险拷贝函数。这些危险拷贝函数的调用时序以及参数等上下文信息中体现了缓冲区溢出漏洞的一些固有特征模式,我们利用这些特征模式来建立缓冲区溢出漏洞的异常行为模型。
危险拷贝函数调用的漏洞模式通常有以下属性:
a)调用了危险数据拷贝函数。表1中列出了常见的可能导致缓冲区溢出的数据拷贝函数,并根据函数的功能对其进行了分类。
表1数据拷贝函数
函数分类 代表函数
字符串拷贝函数 strcpy、strcat、strncpy、strncat、lstrcpy
内存复制函数 memcpy、memmove、memccpy、bcopy、CopyMemory
格式化字符串 sprintf、vsprintf、swprintf、wsprintf
格式转换 scanf、sscanf、vscanf、MultiByteToWideChar
读取文件 fgets、fread
获取用户输入 gets、getchar
读取环境变量 getenv、GetEnvironmentStrings、GetEnvironmentVariable
b)数据拷贝前没有进行长度比较,具体表现为没有调用strlen或sizeof等计算长度并进行比较。
c)数据拷贝函数参数不是常量。
d)数据拷贝函数的参数外部可控。如果危险拷贝函数的参数中源数据或者拷贝长度与外部输入完全匹配,则可以判定该参数外部输入可控,而如果源数据或拷贝长度与当次输入只有部分匹配或没有明显匹配关系,则记录软件当次运行过程中函数调用的参数及序列信息到知识库,同时在知识库中查找同一个执行路径下的记录(通过对函数调用序列的匹配来判断软件的执行路径,若除参数外调用序列相同则为同一条执行路径),若参数的变化随外部输入变化呈现规律性变化,则判定参数外部输入可控。
依据上述漏洞模式所建立的软件异常行为模型如下:
有限自动机是有限计算的基本模型,是许多形式化规格、验证方法的基本模型,它常用于行为建模中。最为突出的特点就是FSA非常适合描述包含有限个状态,并且事件的发生将导致状态迁移的这类系统。本文利用上述总结的漏洞特征模式与有限自动机理论建立了软件异常行为模型:
M={Q,Σ,δ,q0,F};
其中:Q表示有限状态集;Σ表示输入字符表,包括漏洞特征模式产生的特征条件;δ为状态转移函数;q0为初始状态;F为终结状态。
状态转移图如图3所示。
图3中字符a1a2,a3,…,an分别表示参数不含长度的危险拷贝函数;k1k2,k3,…,kn分别表示参数含长度的危险拷贝函数;b表示“没有调用危险拷贝函数”;c表示“源字串非常量”;d表示“源字串为常量”;e表示“源字串或拷贝长度外部输入可控”;f表示“源字串或拷贝长度外部输入不可控”;g表示“拷贝长度非常量”;h表示“拷贝长度为常量”;i表示“调用了长度比较函数”;j表示“没有调用长度比较函数”。q5表示不存在缓冲区溢出可能,q6表示存在缓冲区溢出可能。
综上,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (6)

1.一种基于函数调用的缓冲区溢出漏洞动态检测方法,其特征在于,包括如下步骤:
步骤一、将被测程序的可执行文件进行反汇编,然后通过静态分析,从反汇编所得到的结果中获取函数调用指令地址和返回指令地址;
其中所述函数调用指令地址仅保留被测程序内部的函数调用指令;
步骤二、在所述函数调用地址和返回指令地址处设置断点,构建一定数量的输入参数,并在每个输入参数下运行被测程序执行如下步骤三~步骤四,获取在每个输入参数下,本次运行过程中漏洞动态检测结果以及在该输入参数下是否具有缓冲区溢出漏洞的可能:
步骤三、当被测程序运行到函数调用地址时,函数调用发生,在断点处暂停,获取基址寄存器中的值EBP_B;在函数调用结束时,在断点处暂停,获取基址寄存器中的值EBP_A;
若在函数调用结束时,EBP_B≠EBP_A,则该函数在本次函数调用过程中存在缓冲区溢出漏洞,记录该漏洞并报警;若在函数调用结束时,EBP_B=EBP_A,则该函数在本次函数调用过程中没有发生缓冲区溢出;
判断被测程序运行是否结束,如果结束,以所记录的漏洞作为当前输入参数下漏洞动态检测结果,并继续执行步骤四,如果没结束,继续执行被测程序,返回步骤三;
步骤四、通过本步骤获取当输入参数不能确切造成程序缓冲区溢出时,被测程序在进行函数调用时存在缓冲区溢出漏洞的可能:
被测程序运行结束后,获取该次运行的函数调用信息,将所获取的函数调用信息与软件异常行为模型进行匹配,若函数调用信息与软件异常行为模型匹配,则该函数存在缓冲区溢出漏洞的可能,在匹配位置处记录该漏洞;若函数调用信息与软件异常行为模型不匹配,则判断在该输入参数下,被测程序的函数调用行为特征没有表现出缓冲区溢出漏洞的可能;
本方法中所记录的漏洞即为漏洞动态检测结果;
所述软件异常行为模型为依据漏洞特征条件、通过有限自动机建立的模型。
2.如权利要求1所述的一种基于函数调用的缓冲区溢出漏洞动态检测方法,所述一定数量的输入参数包括异常情况,并覆盖程序的可执行路径。
3.如权利要求1所述的一种基于函数调用的缓冲区溢出漏洞动态检测方法,其特征在于,所述软件异常行为模型具体为M={Q,Σ,δ,q0,F};
其中:Q表示有限状态集;Σ表示输入字符表,包括漏洞特征模式产生的特征条件;δ为状态转移函数;q0为初始状态;F为终结状态。
4.如权利要求3所述的一种基于函数调用的缓冲区溢出漏洞动态检测方法,其特征在于,所述漏洞特征模式产生的条件包括以下a、b、c和d四种:
a)调用了数据拷贝函数;
b)数据拷贝前没有进行长度比较;
c)数据拷贝函数参数不是常量;
d)数据拷贝函数的参数外部可控。
5.如权利要求4所述的一种基于函数调用的缓冲区溢出漏洞动态检测方法,其特征在于,所述数据拷贝函数包括字符串拷贝函数、内存复制函数、格式化字符串函数、格式转换函数、读取文件函数、获取用户输入函数以及读取环境变量函数。
6.如权利要求4所述的一种基于函数调用的缓冲区溢出漏洞动态检测方法,其特征在于,所述d)中数据拷贝函数的参数外部可控具体为数据拷贝函数调用参数中拷贝的源数据和拷贝长度与用户的输入相关。
CN201510170817.8A 2015-04-10 2015-04-10 一种基于函数调用的缓冲区溢出漏洞动态检测方法 Active CN104766015B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510170817.8A CN104766015B (zh) 2015-04-10 2015-04-10 一种基于函数调用的缓冲区溢出漏洞动态检测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510170817.8A CN104766015B (zh) 2015-04-10 2015-04-10 一种基于函数调用的缓冲区溢出漏洞动态检测方法

Publications (2)

Publication Number Publication Date
CN104766015A CN104766015A (zh) 2015-07-08
CN104766015B true CN104766015B (zh) 2018-02-13

Family

ID=53647837

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510170817.8A Active CN104766015B (zh) 2015-04-10 2015-04-10 一种基于函数调用的缓冲区溢出漏洞动态检测方法

Country Status (1)

Country Link
CN (1) CN104766015B (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105279429B (zh) * 2015-11-24 2018-01-19 无锡江南计算技术研究所 一种got表写保护的保护方法
CN106203076B (zh) * 2016-06-24 2020-03-17 武汉绿色网络信息服务有限责任公司 一种利用ebp判断恶意文件的方法
CN107133515B (zh) * 2017-03-09 2019-10-18 北京航空航天大学 一种基于硬件的缓冲区溢出攻击检测方法
CN108573143A (zh) * 2017-03-10 2018-09-25 南京大学 基于程序插桩和动态信息验证的栈保护方法
CN107358071A (zh) * 2017-06-07 2017-11-17 武汉斗鱼网络科技有限公司 防止Flash应用程序中函数非法调用的方法及装置
CN107908954B (zh) * 2017-11-13 2021-04-30 湖南大学 一种基于地址压缩技术的动态检测gpu上内存溢出的方法
CN111931191A (zh) * 2020-09-09 2020-11-13 中国人民解放军国防科技大学 Linux平台二进制软件堆溢漏洞动态检测方法及系统
CN112685744B (zh) * 2020-12-28 2022-05-17 安芯网盾(北京)科技有限公司 一种利用栈相关寄存器检测软件漏洞的方法及装置
CN112784261B (zh) * 2021-01-04 2023-10-27 北京蓝军网安科技发展有限责任公司 用于程序运行的方法及相应的系统、计算机设备和介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101630350A (zh) * 2008-07-14 2010-01-20 西门子(中国)有限公司 缓冲区溢出漏洞的检测方法、装置和代码插装方法、装置
CN101714118A (zh) * 2009-11-20 2010-05-26 北京邮电大学 一种二进制代码缓冲区溢出漏洞的检测器及其检测方法
CN102291436A (zh) * 2011-07-22 2011-12-21 北京航空航天大学 一种分布式事务通信有限状态机模型及其验证方法
CN103514405A (zh) * 2013-07-08 2014-01-15 北京深思数盾科技有限公司 一种缓冲区溢出的检测方法及系统

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9081966B2 (en) * 2012-12-21 2015-07-14 International Business Machines Corporation System and method for protection from buffer overflow vulnerability due to placement new constructs in C++
US9507945B2 (en) * 2013-04-01 2016-11-29 The Johns Hopkins University Method and apparatus for automated vulnerability detection

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101630350A (zh) * 2008-07-14 2010-01-20 西门子(中国)有限公司 缓冲区溢出漏洞的检测方法、装置和代码插装方法、装置
CN101714118A (zh) * 2009-11-20 2010-05-26 北京邮电大学 一种二进制代码缓冲区溢出漏洞的检测器及其检测方法
CN102291436A (zh) * 2011-07-22 2011-12-21 北京航空航天大学 一种分布式事务通信有限状态机模型及其验证方法
CN103514405A (zh) * 2013-07-08 2014-01-15 北京深思数盾科技有限公司 一种缓冲区溢出的检测方法及系统

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
二进制环境下的缓冲区溢出漏洞动态检测;夏超等;《计算机工程》;;《中国学术期刊(光盘版)》电子杂志社有限公司;20081130;第34卷(第22期);第187-191页 *
基于有限状态自动机的漏洞检测模型;胡定文等;《计算机工程与设计》;20070430;第28卷(第8期);第1805页右栏第3段-第1806页右栏第4段 *

Also Published As

Publication number Publication date
CN104766015A (zh) 2015-07-08

Similar Documents

Publication Publication Date Title
CN104766015B (zh) 一种基于函数调用的缓冲区溢出漏洞动态检测方法
Cao et al. Bgnn4vd: Constructing bidirectional graph neural-network for vulnerability detection
CN102054149B (zh) 一种恶意代码行为特征提取方法
TWI553503B (zh) 產生候選鈎點以偵測惡意程式之方法及其系統
CN108446540A (zh) 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与系统
Jimenez et al. Vulnerability prediction models: A case study on the linux kernel
CN101908006B (zh) 一种基于gcc抽象语法树的缓冲区溢出漏洞检测方法
Chen et al. A large-scale empirical study on control flow identification of smart contracts
CN101751530A (zh) 检测漏洞攻击行为的方法及设备
CN107239694A (zh) 一种基于用户评论的Android应用权限推理方法及装置
CN112131122B (zh) 一种源代码缺陷检测工具误报评估方法及装置
CN112131120A (zh) 一种源代码缺陷检测方法及装置
CN116383833A (zh) 软件程序代码的测试方法及其装置、电子设备、存储介质
CN105487983A (zh) 基于智能路径引导的敏感点逼近方法
Partenza et al. Automatic identification of vulnerable code: Investigations with an ast-based neural network
CN105608383B (zh) ActiveX控件漏洞测试方法及系统
CN111309589A (zh) 一种基于代码动态分析的代码安全扫描系统及方法
CN102193858B (zh) 一种测试用例集生成方法
CN101373506B (zh) 一种基于漏洞模型的软件漏洞模型检测方法
Liao et al. Automated detection and classification for packed android applications
Zhao et al. H-fuzzing: A new heuristic method for fuzzing data generation
Zhu et al. Making smart contract classification easier and more effective
Zeng et al. An efficient vulnerability extrapolation using similarity of graph kernel of pdgs
Zhang A framework of vulnerable code dataset generation by open-source injection
Gao et al. Automatic buffer overflow warning validation

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
EXSB Decision made by sipo to initiate substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant