程序漏洞检测方法及装置、计算设备、存储介质与流程

文档序号:12864119阅读:353来源:国知局
程序漏洞检测方法及装置、计算设备、存储介质与流程

本发明涉及计算机安全技术领域,具体涉及一种程序漏洞检测方法及装置、计算设备、存储介质。



背景技术:

漏洞是指一个系统存在的弱点或缺陷,系统对特定威胁攻击或危险事件的敏感性,或进行攻击的威胁作用的可能性。漏洞可能来自应用软件或操作系统设计时的缺陷或编码时产生的错误,也可能来自业务在交互处理过程中的设计缺陷或逻辑流程上的不合理之处。这些缺陷、错误或不合理之处可能被有意或无意地利用,从而对一个组织的资产或运行造成不利影响,如信息系统被攻击或控制,重要资料被窃取,用户数据被篡改,系统被作为入侵其他主机系统的跳板。

漏洞利用过程中攻击者若要执行恶意代码,需要破坏程序原有指令的正常执行。常见的利用手法是通过溢出覆盖或者直接篡改某个寄存器的值,篡改间接调用的地址,进而控制了程序的执行流程。执行流保护的作用就是在程序执行的过程中检测指令流的正常性,当发生不符合预期的情况时,及时进行异常处理。现有技术中提供的一种执行流保护的方法是通过在编译和链接期间,记录下所有的间接调用信息,并把他们记录在最终的可执行文件中,并且在所有的间接调用之前插入额外的校验,当间接调用的地址被篡改时,会触发一个异常,操作系统介入处理。这种方法需要在被测试程序中插入完成相应工作的代码,需要插入大量的检测点,并且在执行过程中检测的频率极高,难免对程序执行效率带来影响。



技术实现要素:

鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的程序漏洞检测方法及装置、计算设备、存储介质。

根据本发明的一个方面,提供了一种程序漏洞检测方法,包括:

从输入用例集中选取输入用例,启动目标程序运行所选取的输入用例;

获取并记录目标程序运行过程中的控制流路径;

对所述控制流路径进行检测,得到所述控制流路径上的错误信息;

根据所述错误信息,确定目标程序的漏洞。

进一步的,所述获取并记录目标程序运行过程中的控制流路径进一步包括:

在目标程序运行过程中,获取由目标程序运行产生的事件得到的数据包,将数据包存储到预先配置的缓存中;

对数据包进行分析,得到控制流路径并进行记录。

进一步的,在将所述数据包存储到预先配置的缓存中之后,所述方法还包括:

判断是否满足所述缓存的中断机制;

若是,则触发中断,将所述缓存中的数据包移出存储到日志文件中,清空所述缓存,以供所述缓存能够继续存储后续的数据包。

进一步的,所述数据包包括以下类型的数据包:tip包,tnt包,和/或fup包。

进一步的,所述获取并记录目标程序运行过程中的控制流路径进一步包括:

获取目标程序运行过程中的控制流路径;

将所述目标程序运行过程中的控制流路径与预先已存储的控制流路径进行比较,判断所述预先已存储的控制流路径是否已经覆盖所述目标程序运行过程中的控制流路径;其中,所述预先已存储的控制流路径是之前通过选取并运行其它输入用例得到的控制流路径;

若是,则丢弃所述目标程序运行过程中的控制流路径;

若否,则记录并存储未被覆盖的控制流路径。

进一步的,在判断出所述预先已存储的控制流路径未覆盖所述目标程序运行过程中的控制流路径之后,所述方法还包括:对输入用例进行变异处理,得到新的输入用例,将新的输入用例保存到输入用例集中。

进一步的,所述对数据包进行分析,得到控制流路径并进行记录进一步包括:对数据包进行分析,得到包含基本路径、边界路径以及分支路径的控制流路径,记录所述控制流路径。

根据本发明的另一方面,提供了一种程序漏洞检测装置,包括:

启动模块,适于从输入用例集中选取输入用例,启动目标程序运行所选取的输入用例;

监控模块,适于获取并记录目标程序运行过程中的控制流路径;

检测模块,适于对所述控制流路径进行检测,得到所述控制流路径上的错误信息;

漏洞分析模块,适于根据所述错误信息,确定目标程序的漏洞。

进一步的,所述监控模块进一步包括:

数据包获取单元,适于在目标程序运行过程中,获取由目标程序运行产生的事件得到的数据包,将数据包存储到预先配置的缓存中;

分析单元,适于对数据包进行分析,得到控制流路径。

进一步的,所述监控模块进一步包括:中断处理单元,适于判断是否满足所述缓存的中断机制;若是,则触发中断,将所述缓存中的数据包移出存储到日志文件中,清空所述缓存,以供所述缓存能够继续存储后续的数据包。

进一步的,所述数据包包括以下类型的数据包:tip包,tnt包,和/或fup包。

进一步的,所述监控模块进一步包括:

比较单元,适于将所述目标程序运行过程中的控制流路径与预先已存储的控制流路径进行比较,判断所述预先已存储的控制流路径是否已经覆盖所述目标程序运行过程中的控制流路径;其中,所述预先已存储的控制流路径是之前通过选取并运行其它输入用例得到的控制流路径;

丢弃单元,适于若所述比较单元判断出所述预先已存储的控制流路径已经覆盖所述目标程序运行过程中的控制流路径,则丢弃所述目标程序运行过程中的控制流路径;

记录单元,适于若所述比较单元判断出所述预先已存储的控制流路径未覆盖所述目标程序运行过程中的控制流路径,则记录并存储未被覆盖的控制流路径。

进一步的,所述装置还包括:变异处理模块,适于对输入用例进行变异处理,得到新的输入用例,将新的输入用例保存到输入用例集中。

进一步的,所述分析单元进一步适于:对数据包进行分析,得到包含基本路径、边界路径以及分支路径的控制流路径。

根据本发明的又一方面,提供了一种计算设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;

所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行上述程序漏洞检测方法对应的操作。

根据本发明的再一方面,提供了一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如上述程序漏洞检测方法对应的操作。

根据本发明提供的程序漏洞检测方案,在目标程序运行过程中,获取并记录控制流路径,通过检测控制流路径上的错误信息确定目标程序的漏洞。本发明提供的是一种自动化发现程序产品潜在威胁的方案,该方案无需在目标程序中插入检测代码,对目标程序本身无改造,适用于非开源软件系统或大型程序产品的黑盒测试,而且本检测方案的检测效率很高,安全性较高。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1示出了根据本发明一个实施例的程序漏洞检测方法的流程图;

图2示出了根据本发明另一个实施例的程序漏洞检测方法的流程图;

图3示出了根据本发明一个实施例的程序漏洞检测装置的功能框图;

图4示出了根据本发明实施例的一种计算设备的结构示意图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

图1示出了根据本发明一个实施例的程序漏洞检测方法的流程图。如图1所示,该方法包括如下步骤:

步骤s101,从输入用例集中选取输入用例,启动目标程序运行所选取的输入用例。

输入用例集中保存了若干个输入用例,这些输入用例为预先构造的适用于目标程序的测试用例。本实施例根据预置规则从输入用例集中智能选取输入用例,该预置规则每次所选取的输入用例不同。启动目标程序运行该输入用例,在目标程序运行过程中,追踪控制流路径。

步骤s102,获取并记录目标程序运行过程中的控制流路径。

目标程序一旦运行,开启监控,监控目标程序的运行状况,获取目标程序运行过程中的控制流路径,并记录下来。

步骤s103,对控制流路径进行检测,得到控制流路径上的错误信息。

对控制流路径进行检测,确定控制流路径上的错误信息。控制流路径上的错误信息可能涉及多种,如内存访问错误、驱动参数错误等。以内存访问错误为例,在对控制流路径进行检测时,获取内存访问所分配的地址,判断内存访问所分配的地址是否合法,如不合法,则属于内存访问错误。关于驱动参数的检测,在目标程序运行过程中,应用层会传递参数到内存中,内存会使用这些参数,本实施例通过对控制流路径进行检测,监控内核访问应用层参数的过程,如果发现内核没有检测地址是不是应用层地址,或者没有检测参数是否为有效参数,而直接使用,这也属于一种错误。

步骤s104,根据错误信息,确定目标程序的漏洞。

通过所确定的错误信息,可以确定目标程序所存在的漏洞。

根据本发明提供的程序漏洞检测方法,在目标程序运行过程中,获取并记录控制流路径,通过检测控制流路径上的错误信息确定目标程序的漏洞。本发明提供的是一种自动化发现程序产品潜在威胁的方案,本方法无需在目标程序中插入检测代码,对目标程序本身无改造,适用于非开源软件系统或大型程序产品的黑盒测试,而且本检测方法的检测效率很高,安全性较高。另外,本方法上述步骤s101和步骤s102是循环执行的,力求利用大量的输入用例尽可能多的遍历目标程序的控制流路径,提升路径覆盖率和漏洞发现率。

图2示出了根据本发明另一个实施例的程序漏洞检测方法的流程图。如图2所示,该方法包括如下步骤:

步骤s201,从输入用例集中选取输入用例,启动目标程序运行所选取的输入用例。

输入用例集中保存了若干个输入用例,这些输入用例为预先构造的适用于目标程序的测试用例。本实施例根据预置规则从输入用例集中智能选取输入用例,该预置规则每次所选取的输入用例不同。启动目标程序运行该输入用例,在目标程序运行过程中,追踪控制流路径。

步骤s202,在目标程序运行过程中,获取由目标程序运行产生的事件得到的数据包,将数据包存储到预先配置的缓存中。

在目标程序运行过程中,本实施例按照线程监控系统调用,实时记录路径数据。具体地,本方法利用pt(processortrace)技术获取由目标程序运行产生的事件得到的数据包。pt是一种高效的记录程序执行控制流的机制,主要设计用于调试和性能分析。本发明在pt技术实施平台上执行目标程序,在执行过程中,硬件将会产生大量的数据包,这些数据包被存储到预先配置的缓存中,用于后续分析。

本发明中,缓存预先配置有相应的中断机制,该中断机制可以使目标程序的运行中断,用以及时的将缓存中保存的数据包能移出到日志文件中,便于后续分析,同时避免遗漏一些数据包。本实施例中,缓存的中断机制具体为在缓存写满时触发中断,将缓存中保存的数据包能移出到日志文件中,清空缓存,使得缓存能够循环记录目标程序运行产生的数据包。本发明的中断机制不仅限是缓存写满时触发中断,也可以在缓存将近写满(如缓存占用率超过预设阈值)时触发中断或者存储的数据包的数量(或数据量)超过预设阈值时触发中断。下面的步骤以缓存写满时触发中断为例进行描述。

步骤s203,判断缓存是否已写满,若是,执行步骤s204;若否,执行步骤s202。

步骤s204,触发中断,将缓存中的数据包移出存储到日志文件中,清空缓存。

本实施例中,所触发的中断类型为性能计数器中断。通过触发中断,使目标程序的运行中断,将缓存中的数据包移出存储到日志文件中,并清空缓存,继续执行步骤s202和步骤s205,缓存能够继续存储目标程序运行产生的数据包。

步骤s205,对数据包进行分析,得到控制流路径。

本实施例利用pt技术获取的数据包包括但不仅限于以下类型的数据包:tip包,tnt包,和/或fup包。

tip包为目标ip数据包(targetippackets),如果在目标程序运行过程中出现间接调用、间接跳转和返回等控制流转移的情况,硬件将会产生一个tip包。通常,tip包包含目标的虚拟地址或偏移地址(其基础地址可参见前一个tip包)。直接调用不会产生tip包。所有的间接控制流转移(包含call,ret,jmp等指令)都会触发产生tip包,因此通过分析tip序列包可以建立控制流路径。

tnt包(takennot-takenpackets)是包含目标地址和跳转指令的数据包,如果在目标程序运行过程中出现有条件的控制流转移,硬件将会产生tnt包,tnt包中至少一个比特位用来表示有跳转或不跳转,tnt包可用来捕获目标程序的精确执行路径。

fup包为控制流更新数据包(flowupdatepackets),如果在目标程序运行过程中出现异步事件,例如异常或中断等事件,硬件将会与tip包一起产生fup包,fup包意味着控制流将从该指令开始转移,紧跟着将产生tip序列包。

通过对以上各种类型的数据包,可以分析出控制流各种转移状况,进而得到包含基本路径、边界路径以及分支路径的控制流路径。本发明旨在利用pt机制记录目标程序整个执行过程的路径,即覆盖基本路径、边界路径以及分支路径。

步骤s206,将目标程序运行过程中的控制流路径与预先已存储的控制流路径进行比较,判断预先已存储的的控制流路径是否已经覆盖目标程序运行过程中的控制流路径,若是,则执行步骤s207;若否,则执行步骤s208。

本实施例预先已经存储了之前得到的控制流路径,这些控制流路径是通过选取并运行输入用例集中的其它输入用例得到的。通过存储之前得到的控制流路径,判断当前次得到的控制流路径是否已被之前得到的控制流路径所覆盖。以下面两个控制流路径为例:

a->b->c->d->e(路径1)

a->b->c->a->e(路径2)

由此可见,路径1所产生的分支路径包含:ab,bc,cd,de,路径2所产生的分支路径包含:ab,bc,ca,ae。路径1覆盖了路径2的分支路径ab和bc,未覆盖分支路径ca和ae。如果当前次的控制流路径为:

a->b->c->a->b->c->a->b->c->d->e(路径3)

由于上述路径1和路径2已被预先记录并存储,将路径3与路径1和路径2进行比较,发现路径1和路径2已经覆盖了路径3,即当前次目标程序运行过程中的控制流路径的所有的分支路径都已被预先记录并存储的控制流路径所覆盖,代表此次没有发现新的路径,该路径为无效路径,将被丢弃。如果此次发现新的路径,则需要记录并存储该新的路径。

在本发明的一个可选的实施例中,可利用全局的位图记录并存储发现的路径。具体地,在每次选取并运行输入用例集中的某个输入用例的过程中,如果发现新的路径,就将该新的路径记录并存储到位图中。而且,在目标程序运行该输入用例的过程中,需要将目标程序运行过程中获取的控制流路径与位图中的路径进行比较,判断位图所记录的控制流路径是否已经覆盖此次目标程序运行过程中的控制流路径,若是,则需要丢弃此次目标程序运行过程中的控制流路径,若否,则需要将新的路径记录并存储到位图中,以对位图进行更新。

步骤s207,丢弃目标程序运行过程中的控制流路径,继续执行步骤s201。

由于目标程序运行当前次选取的输入用例未发现新的路径,因此丢弃此次目标程序运行过程中的控制流路径,继续执行步骤s201,选取下一个输入用例重新执行上述步骤。

步骤s208,记录并存储未被覆盖的控制流路径。

由于目标程序运行当前次选取的输入用例发现新的路径,可将新的路径记录在位图中。

本发明提供的上述路径覆盖的比较方法,通过度量每一个分支路径是否被执行过,已被执行过的分支路径不再记录,避免了分支嵌套时,需要对多个分支进行排列组合引起的分支路径的指数级别增加,进而导致路径爆炸的问题;而且该路径覆盖的比较方法不必对整个复杂的执行流进行对比,不必执行复杂的运算,提升了控制流路径的获取效率。

步骤s209,对输入用例进行变异处理,得到新的输入用例,将新的输入用例保存到输入用例集中,继续执行步骤s201。

针对发现新的路径的输入用例,该输入用例被认为是有效的测试用例,为了能提升路径的覆盖率,本发明对这种输入用例进行变异处理,得到新的输入用例,将新的输入用例保存到输入用例集中,已被后续目标程序选取执行,进而探测更多的新路径。本方法利用路径覆盖的情况(发现新的路径)来选择对输入用例进行变异处理,基于优胜劣汰的遗传思想,使输入用例集中的输入用例更有利于发现新的路径,从而获得更高的路径覆盖率。

步骤s210,对存储的控制流路径进行检测,得到控制流路径上的错误信息。

对控制流路径进行检测,确定控制流路径上的错误信息。控制流路径上的错误信息可能涉及多种,如内存访问错误、驱动参数错误等。以内存访问错误为例,在对控制流路径进行检测时,获取内存访问所分配的地址,判断内存访问所分配的地址是否合法,如不合法,则属于内存访问错误。关于驱动参数的检测,在目标程序运行过程中,应用层会传递参数到内存中,内存会使用这些参数,本实施例通过对控制流路径进行检测,监控内核访问应用层参数的过程,如果发现内核没有检测地址是不是应用层地址,或者没有检测参数是否为有效参数,而直接使用,这也属于一种错误。

本步骤可以实时执行,例如,在步骤s208发现新的路径之后执行;或者,本步骤可以在输入用例集中的输入用例都执行完毕后执行;再或者,本步骤可以定时执行,即到达定时时间后执行。本发明对此不作限制。

步骤s211,根据错误信息,确定目标程序的漏洞。

通过所确定的错误信息,可以确定目标程序所存在的漏洞。

根据本发明提供的程序漏洞检测方法,在目标程序运行过程中,获取并记录控制流路径,通过检测控制流路径上的错误信息确定目标程序的漏洞。本发明提供的是一种自动化发现程序产品潜在威胁的方案,本方法无需在目标程序中插入检测代码,对目标程序本身无改造,适用于非开源软件系统或大型程序产品的黑盒测试,而且本检测方法的检测效率很高,安全性较高。另外,本方法上述步骤s201至步骤s209是循环执行的,力求利用大量的输入用例尽可能多的遍历目标程序的控制流路径,提升路径覆盖率和漏洞发现率。本方法所使用的路径覆盖的比较方法,避免了出现路径爆炸的问题,且不需要执行复杂的运算,提升了控制流路径的获取效率;本方法利用路径覆盖的情况来选择对输入用例进行变异处理,基于优胜劣汰的遗传思想,使输入用例集中的输入用例更有利于发现新的路径,从而获得更高的路径覆盖率。

图3示出了根据本发明一个实施例的程序漏洞检测装置的功能框图。如图3所示,该装置包括:启动模块31,监控模块32,检测模块33以及漏洞分析模块34。

启动模块31适于从输入用例集中选取输入用例,启动目标程序运行所选取的输入用例。

监控模块32适于获取并记录目标程序运行过程中的控制流路径。

检测模块33适于对控制流路径进行检测,得到所述控制流路径上的错误信息;

漏洞分析模块34适于根据错误信息,确定目标程序的漏洞。

监控模块32进一步包括:数据包获取单元321和分析单元322。

数据包获取单元321适于在目标程序运行过程中,获取由目标程序运行产生的事件得到的数据包,将数据包存储到预先配置的缓存中。

分析单元322适于对数据包进行分析,得到控制流路径。

监控模块32进一步包括:中断处理单元323,适于判断是否满足所述缓存的中断机制;若是,则触发中断,将所述缓存中的数据包移出存储到日志文件中,清空所述缓存,以供所述缓存能够继续存储后续的数据包。

所述数据包包括以下类型的数据包:tip包,tnt包,和/或fup包。

监控模块32进一步包括:比较单元325,记录单元324和丢弃单元326。

比较单元325适于将目标程序运行过程中的控制流路径与预先已存储的控制流路径进行比较,判断所述预先已存储的控制流路径是否已经覆盖所述目标程序运行过程中的控制流路径;其中,所述预先已存储的控制流路径是之前通过选取并运行其它输入用例得到的控制流路径;

丢弃单元326适于若比较单元325判断出所述预先已存储的的控制流路径已经覆盖所述目标程序运行过程中的控制流路径,则丢弃所述目标程序运行过程中的控制流路径。

记录单元324适于若比较单元325判断出所述预先已存储的控制流路径未覆盖所述目标程序运行过程中的控制流路径,则记录并存储未被覆盖的控制流路径。

进一步的,本装置还包括:变异处理模块35,适于对输入用例进行变异处理,得到新的输入用例,将新的输入用例保存到输入用例集中。

上述分析单元322进一步适于:对数据包进行分析,得到包含基本路径、边界路径以及分支路径的控制流路径。

根据本发明提供的程序漏洞检测装置,在目标程序运行过程中,获取并记录控制流路径,通过检测控制流路径上的错误信息确定目标程序的漏洞。本发明提供的是一种自动化发现程序产品潜在威胁的方案,本装置无需在目标程序中插入检测代码,对目标程序本身无改造,适用于非开源软件系统或大型程序产品的黑盒测试,而且本检测装置的检测效率很高,安全性较高。另外,启动模块和监控模块是循环运行的,力求利用大量的输入用例尽可能多的遍历目标程序的控制流路径,提升路径覆盖率和漏洞发现率。本装置所使用的路径覆盖的比较方案,避免了出现路径爆炸的问题,且不需要执行复杂的运算,提升了控制流路径的获取效率;本装置还利用路径覆盖的情况来选择对输入用例进行变异处理,基于优胜劣汰的遗传思想,使输入用例集中的输入用例更有利于发现新的路径,从而获得更高的路径覆盖率。

本发明实施例还提供了一种非易失性计算机存储介质,所述计算机存储介质存储有至少一可执行指令,该计算机可执行指令可执行上述任意方法实施例中的漏洞检测方法。

图4示出了根据本发明实施例的一种计算设备的结构示意图,本发明具体实施例并不对计算设备的具体实现做限定。

如图4所示,该计算设备可以包括:处理器(processor)402、通信接口(communicationsinterface)404、存储器(memory)406、以及通信总线408。

其中:

处理器402、通信接口404、以及存储器406通过通信总线408完成相互间的通信。

通信接口404,用于与其它设备比如客户端或其它服务器等的网元通信。

处理器402,用于执行程序410,具体可以执行上述程序漏洞检测方法实施例中的相关步骤。

具体地,程序410可以包括程序代码,该程序代码包括计算机操作指令。

处理器402可能是中央处理器cpu,或者是特定集成电路asic(applicationspecificintegratedcircuit),或者是被配置成实施本发明实施例的一个或多个集成电路。计算设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个cpu;也可以是不同类型的处理器,如一个或多个cpu以及一个或多个asic。

存储器406,用于存放程序410。存储器406可能包含高速ram存储器,也可能还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。

程序410具体可以用于使得处理器402执行以下操作:

从输入用例集中选取输入用例,启动目标程序运行所选取的输入用例;

获取并记录目标程序运行过程中的控制流路径;

对所述控制流路径进行检测,得到所述控制流路径上的错误信息;

根据所述错误信息,确定目标程序的漏洞。

程序410进一步可以用于使得处理器402执行以下操作:

在目标程序运行过程中,获取由目标程序运行产生的事件得到的数据包,将数据包存储到预先配置的缓存中;

对数据包进行分析,得到控制流路径并进行记录。

程序410进一步可以用于使得处理器402执行以下操作:

判断是否满足所述缓存的中断机制;

若是,则触发中断,将所述缓存中的数据包移出存储到日志文件中,清空所述缓存,以供所述缓存能够继续存储后续的数据包。

程序410进一步可以用于使得处理器402执行以下操作:

获取目标程序运行过程中的控制流路径;

将所述目标程序运行过程中的控制流路径与预先已存储的控制流路径进行比较,判断所述预先已存储的控制流路径是否已经覆盖所述目标程序运行过程中的控制流路径;其中,所述预先已存储的控制流路径是之前通过选取并运行其它输入用例得到的控制流路径;

若是,则丢弃所述目标程序运行过程中的控制流路径;

若否,则记录并存储未被覆盖的控制流路径。

程序410进一步可以用于使得处理器402执行以下操作:

对输入用例进行变异处理,得到新的输入用例,将新的输入用例保存到输入用例集中。

程序410进一步可以用于使得处理器402执行以下操作:

对数据包进行分析,得到包含基本路径、边界路径以及分支路径的控制流路径,记录所述控制流路径。

在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(dsp)来实现根据本发明实施例的程序漏洞检测装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。

应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

本发明公开了:

a1.一种程序漏洞检测方法,包括:

从输入用例集中选取输入用例,启动目标程序运行所选取的输入用例;

获取并记录目标程序运行过程中的控制流路径;

对所述控制流路径进行检测,得到所述控制流路径上的错误信息;

根据所述错误信息,确定目标程序的漏洞。

a2.根据a1所述的方法,所述获取并记录目标程序运行过程中的控制流路径进一步包括:

在目标程序运行过程中,获取由目标程序运行产生的事件得到的数据包,将数据包存储到预先配置的缓存中;

对数据包进行分析,得到控制流路径并进行记录。

a3.根据a2所述的方法,在将所述数据包存储到预先配置的缓存中之后,所述方法还包括:

判断是否满足所述缓存的中断机制;

若是,则触发中断,将所述缓存中的数据包移出存储到日志文件中,清空所述缓存,以供所述缓存能够继续存储后续的数据包。

a4.根据a2所述的方法,所述数据包包括以下类型的数据包:tip包,tnt包,和/或fup包。

a5.根据a1-a4中任一项所述的方法,所述获取并记录目标程序运行过程中的控制流路径进一步包括:

获取目标程序运行过程中的控制流路径;

将所述目标程序运行过程中的控制流路径与预先已存储的控制流路径进行比较,判断所述预先已存储的控制流路径是否已经覆盖所述目标程序运行过程中的控制流路径;其中,所述预先已存储的控制流路径是之前通过选取并运行其它输入用例得到的控制流路径;

若是,则丢弃所述目标程序运行过程中的控制流路径;

若否,则记录并存储未被覆盖的控制流路径。

a6.根据a5所述的方法,在判断出所述预先已存储的控制流路径未覆盖所述目标程序运行过程中的控制流路径之后,所述方法还包括:对输入用例进行变异处理,得到新的输入用例,将新的输入用例保存到输入用例集中。

a7.根据a2所述的方法,所述对数据包进行分析,得到控制流路径并进行记录进一步包括:对数据包进行分析,得到包含基本路径、边界路径以及分支路径的控制流路径,记录所述控制流路径。

b8.一种程序漏洞检测装置,包括:

启动模块,适于从输入用例集中选取输入用例,启动目标程序运行所选取的输入用例;

监控模块,适于获取并记录目标程序运行过程中的控制流路径;

检测模块,适于对所述控制流路径进行检测,得到所述控制流路径上的错误信息;

漏洞分析模块,适于根据所述错误信息,确定目标程序的漏洞。

b9.根据b8所述的装置,所述监控模块进一步包括:

数据包获取单元,适于在目标程序运行过程中,获取由目标程序运行产生的事件得到的数据包,将数据包存储到预先配置的缓存中;

分析单元,适于对数据包进行分析,得到控制流路径。

b10.根据b9所述的装置,所述监控模块进一步包括:中断处理单元,适于判断是否满足所述缓存的中断机制;若是,则触发中断,将所述缓存中的数据包移出存储到日志文件中,清空所述缓存,以供所述缓存能够继续存储后续的数据包。

b11.根据b9所述的装置,所述数据包包括以下类型的数据包:tip包,tnt包,和/或fup包。

b12.根据b8-b11中任一项所述的装置,所述监控模块进一步包括:

比较单元,适于将所述目标程序运行过程中的控制流路径与预先已存储的控制流路径进行比较,判断所述预先已存储的控制流路径是否已经覆盖所述目标程序运行过程中的控制流路径;其中,所述预先已存储的控制流路径是之前通过选取并运行其它输入用例得到的控制流路径;

丢弃单元,适于若所述比较单元判断出所述预先已存储的控制流路径已经覆盖所述目标程序运行过程中的控制流路径,则丢弃所述目标程序运行过程中的控制流路径;

记录单元,适于若所述比较单元判断出所述预先已存储的控制流路径未覆盖所述目标程序运行过程中的控制流路径,则记录并存储未被覆盖的控制流路径。

b13.根据b12所述的装置,所述装置还包括:变异处理模块,适于对输入用例进行变异处理,得到新的输入用例,将新的输入用例保存到输入用例集中。

b14.根据b9所述的装置,所述分析单元进一步适于:对数据包进行分析,得到包含基本路径、边界路径以及分支路径的控制流路径。

c15.一种计算设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;

所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如a1-a7中任一项所述的程序漏洞检测方法对应的操作。

d16.一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如a1-a7中任一项所述的程序漏洞检测方法对应的操作。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1