一种程序漏洞的检测方法、终端及服务器与流程

文档序号:12720941阅读:373来源:国知局
一种程序漏洞的检测方法、终端及服务器与流程

本发明涉及信息安全领域,具体而言,涉及一种程序漏洞的检测方法、终端及服务器。



背景技术:

随着智能终端的迅猛发展,智能终端上各种APP程序不断增多,信息安全的隐患也不断增大,因此,在每一款APP程序正式发布之前,都需要对程序的漏洞进行检测。

现有的检测方法通常为确定漏洞的起点函数和终点函数,在程序中寻找该起点函数,然后根据起点函数进行逆向查找,找到对应的终点函数,再进行分析是否为漏洞;若起点函数为通用函数,则会导致逆向查找的工作量大大增加,且需要技术人员对查找出的每一条路径都进行分析,费时费力。

因此,通过逆向查找的方法检测程序中的漏洞时,若逆向查找的起点函数为通用函数时,容易造成检测效率低的问题。



技术实现要素:

本发明的主要目的在于提供一种程序漏洞的检测方法、终端及服务器,以解决检测智能终端APP程序中的漏洞检测效率低的问题。

为了实现上述目的,根据本发明的一个方面,提供了一种程序漏洞的检测方法,该方法包括:

根据待检测程序预先设定的漏洞规则,确定所述漏洞规则对应的初始条件和结束条件;

根据所述漏洞规则对应的初始条件确定所述待检测程序的初始检测语句;

确定所述初始检测语句的位置,其中初始检测语句的位置包括所述初始检测语句对应的寄存器名称;

以所述初始检测语句为起点,顺序追踪检测待检测程序;

追踪检测到结束条件,记录所述初始检测语句的位置以及所述初始检测语句至所述结束条件的数据流动路径,并结束检测。

进一步地,以所述初始检测语句为起点,顺序追踪检测待检测程序,具体包括:以所述初始检测语句为起点,顺序追踪检测待检测程序,若追踪检测过程中检测到跳转语句,则根据跳转语句的跳转逻辑进行跳转;跳转后按照待检测程序的执行顺序继续追踪检测。

进一步地,若追踪检测过程中检测到按照第一检测语句顺序执行的语句为跳转语句,且跳转语句对应的跳转逻辑为赋值逻辑,则根据跳转语句的跳转逻辑进行跳转并在跳转后按照待检测程序的执行顺序继续追踪检测;且确定跳转至所述第一检测语句对应的跳转语句为第一跳转语句;将所述第一跳转语句顺序执行对应的检测语句作为第二检测语句,对第二检测语句进行顺序追踪检测。

进一步地,所述追踪检测到结束条件,具体包括:追踪检测第一检测语句对应的跳转语句,检测到结束条件;且追踪检测所述第二检测语句,检测到结束条件;或,追踪检测第一检测语句对应的跳转语句,未检测到结束条件;追踪检测所述第二检测语句,检测到结束条件;或,追踪检测第一检测语句对应的跳转语句,检测到结束条件;追踪检测所述第二检测语句,未检测到结束条件。

进一步地,记录所述初始检测语句的位置以及所述初始检测语句至所述结束条件的数据流动路径,具体包括:追踪检测第一检测语句对应的跳转语句,检测到结束条件,且追踪检测所述第二检测语句,检测到结束条件;则分别记录所述初始检测语句的位置,所述通过第一检测语句检测到结束条件对应的数据流动路径;以及所述初始检测语句的位置,所述通过第二检测语句检测到结束条件对应的数据流动路径;或,追踪检测第一检测语句对应的跳转语句,检测到结束条件,追踪检测所述第二检测语句,未检测到结束条件;则记录所述初始检测语句的位置,所述通过第一检测语句检测到结束条 件对应的数据流动路径;或,追踪检测第一检测语句对应的跳转语句,未检测到结束条件,追踪检测所述第二检测语句,检测到结束条件;则记录所述初始检测语句的位置,所述通过第二检测语句检测到结束条件对应的数据流动路径。

进一步地,以所述初始检测语句为起点,顺序追踪检测待检测程序,还包括:以所述初始检测语句为起点,顺序追踪检测,若追踪检测到的跳转语句的次数大于设定的次数阈值,则结束追踪检测;若不大于设定的次数阈值,则继续追踪检测。

进一步地,确定所述初始检测语句的位置之前,还包括:对待检测程序的语句进行分析,确定所述待检测程序中的跳转语句;将所述待检测程序中每两个跳转语句之间的顺序执行语句集合作为一个跳转语句块;根据跳转语句的逻辑关系确定各跳转语句块之间的跳转逻辑关系。

进一步地,以所述初始检测语句为起点,顺序追踪检测待检测程序,具体包括:以所述初始检测语句为起点,根据跳转语句块的执行顺序以及所述跳转语句块之间的跳转逻辑关系对所述待检测程序进行顺序追踪检测。

进一步地,对待检测程序的语句进行分析,确定所述待检测程序中的跳转语句,具体包括:将所述待检测程序语句编译为中间语言;对所述中间语言进行分析,确定所述中间语言的跳转语句。

进一步地,根据预先设定的漏洞规则,确定所述漏洞规则对应的初始条件和结束条件,具体包括:将所述漏洞规则对应的初始条件和结束条件形成配置文件。

进一步地,所述配置文件中的初始条件包括至少一个漏洞触发条件;所述配置文件中的结束条件包括至少一个漏洞形成条件。

为了实现上述目的,根据本发明的另一方面,还提供了一种程序漏洞的检测终端,该终端包括:

规则识别模块,用于根据待检测程序预先设定的漏洞规则,确定所述漏洞规则对应的初始条件和结束条件;

所述规则识别模块,还用于根据所述漏洞规则对应的初始条件确定所述待检测程序的初始检测语句;

语句分析模块,用于确定所述初始检测语句的位置,其中初始检测语句的位置包括所述初始检测语句对应的寄存器名称;

漏洞检测模块,用于以所述初始检测语句为起点,顺序追踪检测待检测程序;

检测记录模块,用于追踪检测到结束条件,记录所述初始检测语句的位置以及所述初始检测语句至所述结束条件的数据流动路径,并结束检测。

进一步地,所述漏洞检测模块,具体用于:以所述初始检测语句为起点,顺序追踪检测待检测程序,若追踪检测过程中检测到跳转语句,则根据跳转语句的跳转逻辑进行跳转;跳转后按照待检测程序的执行顺序继续追踪检测。

进一步地,所述漏洞检测模块,还用于:若追踪检测过程中检测到按照第一检测语句顺序执行的语句为跳转语句,且跳转语句对应的跳转逻辑为赋值逻辑,则根据跳转语句的跳转逻辑进行跳转并在跳转后按照待检测程序的执行顺序继续追踪检测;且确定跳转至所述第一检测语句对应的跳转语句为第一跳转语句;将所述第一跳转语句顺序执行对应的检测语句作为第二检测语句,对第二检测语句进行顺序追踪检测。

进一步地,所述检测记录模块,具体用于:追踪检测第一检测语句对应的跳转语句,检测到结束条件;且追踪检测所述第二检测语句,检测到结束条件;或,追踪检测第一检测语句对应的跳转语句,未检测到结束条件;追踪检测所述第二检测语句,检测到结束条件;或,追踪检测第一检测语句对应的跳转语句,检测到结束条件;追踪检测所述第二检测语句,未检测到结束条件。

进一步地,所述检测记录模块,具体用于:追踪检测第一检测语句对应的跳转语句,检测到结束条件,且追踪检测所述第二检测语句,检测到结束条件;则分别记录所述初始检测语句的位置,所述通过第一检测语句检测到结束条件对应的数据流动路径;以及所述初始检测语句的位置,所述通过第二检测语句检测到结束条件对应的数据流动路径;或,追踪检测第一检测语句对应的跳转语句,检测到结束条件,追踪检测所述第二检测语句,未检测到结束条件;则记录所述初始检测语句的位置,所述通过第一检测语句检测 到结束条件对应的数据流动路径;或,追踪检测第一检测语句对应的跳转语句,未检测到结束条件,追踪检测所述第二检测语句,检测到结束条件;则记录所述初始检测语句的位置,所述通过第二检测语句检测到结束条件对应的数据流动路径。

进一步地,所述漏洞检测模块,具体用于:以所述初始检测语句为起点,顺序追踪检测,若追踪检测到跳转语句的次数大于设定的次数阈值,则结束追踪检测;若不大于设定的次数阈值,则继续追踪检测。

进一步地,所述语句分析模块,还用于:对待检测程序的语句进行分析,确定所述待检测程序中的跳转语句;将所述待检测程序中每两个跳转语句之间的顺序执行语句集合作为一个跳转语句块;根据跳转语句的逻辑关系确定各跳转语句块之间的跳转逻辑关系;

进一步地,所述漏洞检测模块,具体用于:以所述初始检测语句为起点,根据跳转语句块的执行顺序以及所述跳转语句块之间的跳转逻辑关系对所述待检测程序进行顺序追踪检测。

进一步地,所述语句分析模块,具体用于:将所述待检测程序语句编译为中间语言;对所述中间语言进行分析,确定所述中间语言的跳转语句。

进一步地,所述规则识别模块,具体用于:将所述漏洞规则对应的初始条件和结束条件形成配置文件。

进一步地,所述所述规则识别模块中配置文件中的初始条件包括至少一个漏洞触发条件;所述配置文件中的结束条件包括至少一个漏洞形成条件。

为了实现上述目的,根据本发明的另一方面,还提供了一种程序漏洞的检测服务器,该服务器包括:

信息接收模块,用于根据接收到的触发信息分析确定对应的待检测程序标识;

所述信息接收模块,还用于将所述触发信息以及所述确定的待检测程序标识通知规则识别模块;

规则识别模块,用于根据接收到的触发信息以及待检测程序标识,确定对应的漏洞规则,以及所述漏洞规则对应的初始条件和结束条件;

所述规则识别模块,还用于根据所述漏洞规则对应的初始条件确定所述 待检测程序的初始检测语句;

语句分析模块,用于确定所述初始检测语句的位置,其中初始检测语句的位置包括所述初始检测语句对应的寄存器名称;

漏洞检测模块,用于以所述初始检测语句为起点,顺序追踪检测待检测程序;

检测记录模块,用于追踪检测到结束条件,记录所述初始检测语句的位置以及所述初始检测语句至所述结束条件的数据流动路径,并结束检测。

进一步地,所述漏洞检测模块,具体用于:以所述初始检测语句为起点,顺序追踪检测待检测程序,若追踪检测过程中检测到跳转语句,则根据跳转语句的跳转逻辑进行跳转;跳转后按照待检测程序的执行顺序继续追踪检测。

进一步地,所述漏洞检测模块,还用于:若追踪检测过程中检测到按照第一检测语句顺序执行的语句为跳转语句,且跳转语句对应的跳转逻辑为赋值逻辑,则根据跳转语句的跳转逻辑进行跳转并在跳转后按照待检测程序的执行顺序继续追踪检测;且确定跳转至所述第一检测语句对应的跳转语句为第一跳转语句;将所述第一跳转语句顺序执行对应的检测语句作为第二检测语句,对第二检测语句进行顺序追踪检测。

进一步地,所述检测记录模块,具体用于:追踪检测第一检测语句对应的跳转语句,检测到结束条件;且追踪检测所述第二检测语句,检测到结束条件;或,追踪检测第一检测语句对应的跳转语句,未检测到结束条件;追踪检测所述第二检测语句,检测到结束条件;或,追踪检测第一检测语句对应的跳转语句,检测到结束条件;追踪检测所述第二检测语句,未检测到结束条件。

进一步地,所述检测记录模块,具体用于:追踪检测第一检测语句对应的跳转语句,检测到结束条件,且追踪检测所述第二检测语句,检测到结束条件;则分别记录所述初始检测语句的位置,所述通过第一检测语句检测到结束条件对应的数据流动路径;以及所述初始检测语句的位置,所述通过第二检测语句检测到结束条件对应的数据流动路径;或,追踪检测第一检测语句对应的跳转语句,检测到结束条件,追踪检测所述第二检测语句,未检测 到结束条件;则记录所述初始检测语句的位置,所述通过第一检测语句检测到结束条件对应的数据流动路径;或,追踪检测第一检测语句对应的跳转语句,未检测到结束条件,追踪检测所述第二检测语句,检测到结束条件;则记录所述初始检测语句的位置,所述通过第二检测语句检测到结束条件对应的数据流动路径。

进一步地,所述漏洞检测模块,具体用于:以所述初始检测语句为起点,顺序追踪检测,若追踪检测到跳转语句的次数大于设定的次数阈值,则结束追踪检测;若不大于设定的次数阈值,则继续追踪检测。

进一步地,所述语句分析模块,还用于:对待检测程序的语句进行分析,确定所述待检测程序中的跳转语句;将所述待检测程序中每两个跳转语句之间的顺序执行语句集合作为一个跳转语句块;根据跳转语句的逻辑关系确定各跳转语句块之间的跳转逻辑关系。

进一步地,所述漏洞检测模块,具体用于:以所述初始检测语句为起点,根据跳转语句块的执行顺序以及所述跳转语句块之间的跳转逻辑关系对所述待检测程序进行顺序追踪检测。

进一步地,所述语句分析模块,具体用于:将所述待检测程序语句编译为中间语言;对所述中间语言进行分析,确定所述中间语言的跳转语句。

进一步地,所述规则识别模块,具体用于:将所述漏洞规则对应的初始条件和结束条件形成配置文件。

进一步地,所述所述规则识别模块中配置文件中的初始条件包括至少一个漏洞触发条件;所述配置文件中的结束条件包括至少一个漏洞形成条件。

通过本发明对程序进行正向查找,确定是否存在漏洞;即确定漏洞规则的起始条件,根据程序的执行顺序,确定是否有该漏洞规则对应的结束条件,若有则确定找到漏洞,否则认为没有找到漏洞;由于漏洞规则的起始条件通常为获取敏感信息的字段,因此起始条件的数量大大降低,提高了程序漏洞的检测效率。

附图说明

构成本申请的一部分的附图用来提供对本发明的进一步理解,本发 明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1示出了本申请的一个实施例的程序漏洞的检测方法的流程图。

图2示出了根据本申请一个实施例的一种漏洞规则的起始条件和结束条件的示例。

图3示出了根据本申请一个实施例以漏洞的结束条件进行划分的漏洞规则示例。

图4示出了根据本申请另一个实施例以漏洞的结束条件进行划分的漏洞规则示例。

图5示出了根据本申请一个实施例包括两个起始条件的漏洞规则的示例。

图6示出了根据本申请一个实施例确定初始检测语句的位置的流程图。

图7示出了根据本申请一个实施例顺序追踪检测待检测程序的方法流程图。

图8示出了根据本申请另一个实施例顺序追踪检测待检测程序的方法流程图。

图9示出了根据本申请一个实施例确定待检测语句为跳转语句后的方法流程图。

图10示出了根据本申请一个实施例当确定跳转语句为赋值语句后的方法流程图。

图11示出了根据本申请一个实施例的程序漏洞的检测终端的框图。

图12示出了根据本申请一个实施例的程序漏洞的检测服务器的框图。

本领域普通技术人员将了解,虽然下面的详细说明将参考图示实施例、附图进行,但本申请并不仅限于这些实施例。而是,本申请的范围是广泛的,且意在仅通过后附的权利要求限定本申请的范围。

具体实施方式

在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。

所述计算机设备包括用户设备与网络设备。其中,所述用户设备包括但不限于电脑、智能手机、PDA等;所述网络设备包括但不限于单个网络服务器、多个网络服务器组成的服务器组或基于云计算(Cloud Computing)的由大量计算机或网络服务器构成的云,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个超级虚拟计算机。其中,所述计算机设备可单独运行来实现本申请,也可接入网络并通过与网络中的其他计算机设备的交互操作来实现本申请。其中,所述计算机设备所处的网络包括但不限于互联网、广域网、城域网、局域网、VPN网络等。

需要说明的是,所述用户设备、网络设备和网络等仅为举例,其他现有的或今后可能出现的计算机设备或网络如可适用于本申请,也应包含在本申请保护范围以内,并以引用方式包含于此。

后面所讨论的方法(其中一些通过流程图示出)可以通过硬件、软件、固件、中间件、微代码、硬件描述语言或者其任意组合来实施。当用软件、固件、中间件或微代码来实施时,用以实施必要任务的程序代码或代码段可以被存储在机器或计算机可读介质(比如存储介质)中。(一个或多个)处理器可以实施必要的任务。

这里所公开的具体结构和功能细节仅仅是代表性的,并且是用于描述本申请的示例性实施例的目的。但是本申请可以通过许多替换形式来具体实现,并且不应当被解释成仅仅受限于这里所阐述的实施例。

应当理解的是,虽然在这里可能使用了术语“第一”、“第二”等等来描述各个单元,但是这些单元不应当受这些术语限制。使用这些术语仅仅是为了将一个单元与另一个单元进行区分。举例来说,在不背离示 例性实施例的范围的情况下,第一单元可以被称为第二单元,并且类似地第二单元可以被称为第一单元。这里所使用的术语“和/或”包括其中一个或更多所列出的相关联项目的任意和所有组合。

应当理解的是,当一个单元被称为“连接”或“耦合”到另一单元时,其可以直接连接或耦合到所述另一单元,或者可以存在中间单元。与此相对,当一个单元被称为“直接连接”或“直接耦合”到另一单元时,则不存在中间单元。应当按照类似的方式来解释被用于描述单元之间的关系的其他词语(例如“处于...之间”相比于“直接处于...之间”,“与...邻近”相比于“与...直接邻近”等等)。

这里所使用的术语仅仅是为了描述具体实施例而不意图限制示例性实施例。除非上下文明确地另有所指,否则这里所使用的单数形式“一个”、“一项”还意图包括复数。还应当理解的是,这里所使用的术语“包括”和/或“包含”规定所陈述的特征、整数、步骤、操作、单元和/或组件的存在,而不排除存在或添加一个或更多其他特征、整数、步骤、操作、单元、组件和/或其组合。

还应当提到的是,在一些替换实现方式中,所提到的功能/动作可以按照不同于附图中标示的顺序发生。举例来说,取决于所涉及的功能/动作,相继示出的两幅图实际上可以基本上同时执行或者有时可以按照相反的顺序来执行。

下面结合附图对本申请的技术方案作进一步详细描述。

图1是根据本发明实施例的一种程序漏洞的检测方法的流程图,该方法用于检测待发布的,或测试阶段的智能终端APP程序中的漏洞,如图1所示,该程序漏洞的检测方法包括以下步骤:

步骤S11,根据待检测程序预先设定的漏洞规则,确定所述漏洞规则对应的初始条件和结束条件;

建立待检测程序可能会存在的漏洞规则数据库,分别确定每一种漏洞规则对应初始条件和结束条件。漏洞的类型根据其获得敏感信息的类型进行划分,每种敏感信息的类型对应至少一种漏洞规则。敏感信息包括但不限于以下信息:电话号码,身份信息,消费记录,密码信息,聊 天记录等各种使用者的信息。

优选的,一个漏洞规则包括至少一个初始条件,至少一个结束条件;每个初始条件对应至少一个结束条件。将漏洞规则对应的初始条件和结束条件形成配置文件。

如图2所示,如待检测程序的一个漏洞规则的起始条件包括多个获取用户电话号码的起始条件,获取用户电话号码的起始条件1、获取用户电话号码的起始条件2、获取用户电话号码的起始条件3、获取用户电话号码的起始条件4......获取用户电话号码的起始条件N;每个起始条件对应至少一个结束条件,结束条件包括:网络发出电话号码1、网络发出电话号码2、短信发出电话号码1、短信发出电话号码2;其中获取用户电话号码的起始条件1对应的结束条件为网络发出电话号码1和网络发出电话号码2;获取用户电话号码的起始条件2对应的结束条件为短信发出电话号码1和短信发出电话号码2;获取用户电话号码的起始条件3对应的结束条件为短信发出电话号码1;获取用户电话号码的起始条件4对应的结束条件为网络发出电话号码1、网络发出电话号码2、短信发出电话号码1、短信发出电话号码2。

一种漏洞类型也可以根据该种漏洞的起始条件和/或结束条件生成多种漏洞规则。以图2中的例子为例,如图3和图4所示,以漏洞的结束条件进行划分,将该种漏洞划分为两个漏洞规则,图3所示为漏洞规则一的结束条件为网络发出电话号码1和/或网络发出电话号码2;漏洞规则一对应的初始条件为获取用户电话号码的起始条件1、获取用户电话号码的起始条件4;图4所示为漏洞规则二的结束条件为短信发出电话号码1和/或短信发出电话号码2,漏洞规则二对应的初始条件为获取用户电话号码的起始条件2、获取用户电话号码的起始条件3、获取用户电话号码的起始条件4。

以上实施例为以漏洞的结束条件对每种漏洞的漏洞规则进行划分,其他以漏洞的初始条件,或其他条件对漏洞规则进行划分的方法,与之类似,在此不再一一列举。

步骤S12,根据漏洞规则对应的初始条件确定待检测程序的初始检测 语句;

根据起始条件确定该起始条件对应的匹配字段,在待检测程序中顺序查找是否包括以上匹配字段,若包括,则将查找到的字段作为初始检测语句。每个匹配字段在待检测程序中多次出现,因此,每个匹配字段都需要在待检测程序中进行全面检测,将待检测程序中所有的该匹配字段全部找出。

以图5所示的漏洞规则包括两个起始条件为例,每个起始条件对应至少一个可匹配的字段,如起始条件1对应1个可匹配字段1,起始条件2对应3个可匹配字段:可匹配字段2,可匹配字段3,可匹配字段4。在待检测程序中分别顺序查找4个可匹配字段,若检测到1个可匹配字段1和2个可匹配字段2,则将可匹配字段1对应的语句作为初始检测语句1,可匹配字段2对应的两个语句作为初始检测语句2和初始检测语句3。若在待检测程序中分别查找4个可匹配字段,只检测到可匹配字段3,则将可匹配字段3对应的语句作为检测程序的初始检测语句进行检测。

步骤S13,确定初始检测语句的位置,其中初始检测语句的位置包括所述初始检测语句对应的寄存器名称。

优选的,如图6所示,通过以下方法确定初始检测语句的位置,其中中间语言包括但不限于为汇编语言:

步骤611:将待检测程序反编译为中间语言;

步骤612:逐条分析中间语言,确定中间语言的跳转语句;

步骤613:将中间语言的每两个跳转语句之间的顺序执行语句集合作为一个跳转语句块;

步骤614,根据跳转语句的逻辑关系确定各跳转语句块之间的跳转逻辑关系;

步骤615,确定初始检测语句所在的跳转语句块以及提取该初始检测语句需要跟踪的寄存器的名称。

其中跳转语句包括但不限于以下语句:if,switch,goto,调用函数,函数返回等。

由于两个跳转语句之间的顺序执行语句集合通常都在一个寄存器中 存储,但待检测程序可能会在一个寄存器中可能会存储多个顺序执行语句集合,为方便跟踪记录漏洞形成的路径,将待检测程序两个跳转语句之间的顺序执行语句集合作为一个跳转语句块,当发生跳转时,记录跳转前后的跳转语句块,就可以记录数据流动路径,避免记录每条流经语句路径。

步骤S14,以初始检测语句为起点,顺序追踪检测待检测程序;

若待检测程序中包含多个初始检测语句,则可以同时对多个初始检测语句展开追踪检测,也可以顺序对每个初始检测语句进行追踪检索;具体情况根据确定的初始检测语句的数量,以及终端或服务器的使用情况确定。

如图7所示,为本发明实施中顺序追踪检测待检测程序的方法,该方法包括:

步骤711:以初始检测语句为起点,根据初始检测语句对应的寄存器名称r0,进入寄存器r0跟踪状态;

步骤712:顺序跟踪寄存器的流经语句;

步骤713:判断当前待检测的语句是否为跳转语句,若是跳转语句则执行步骤716,否则执行步骤714;

步骤714:判断当前待检测语句是否包含结束条件,若包含,则执行步骤715,否则返回步骤712;

步骤715:确定检测语句为检测结束语句,停止对该语句的追踪检测;

步骤716:判断该跳转语句是否为赋值语句,若是赋值语句则执行步骤718,否则执行步骤717;

步骤717:根据跳转语句的跳转逻辑跳转至待检测程序的对应的位置,并返回执行步骤712;

步骤718:寄存器r0赋值给另一寄存器r1;

步骤719:分别对寄存器r0和寄存器r1进行跟踪,并返回执行步骤712。

优选的,为了便于记录数据流动路径,将中间语言的每两个跳转语句之间的顺序执行语句集合作为一个跳转语句块;根据跳转语句的逻辑 关系确定各跳转语句块之间的跳转逻辑关系。如图8所示,为本发明实施中另一种顺序追踪检测待检测程序的方法,该方法包括:

步骤811:以初始检测语句为起点,确定初始检测语句对应的寄存器名称r0,初始检测语句对应的跳转语句块的标识;

步骤812:对初始检测语句进行检测,进入寄存器r0跟踪状态;

步骤813:顺序跟踪寄存器中的跳转语句块的流经语句;

步骤814:判断当前跳转语句块是否包含结束条件,若包含,则执行步骤819,否则执行步骤815;

步骤815:确定当前跳转语句块顺序检测完成;

步骤816:判断当前跳转语句块对应的跳转语句是否为赋值语句,若是赋值语句则执行步骤817,否则执行步骤813;

步骤817:将当前寄存器的值根据赋值语句的逻辑关系赋予给另一寄存器;

步骤818:同时对赋值前的寄存器和赋值后的寄存器对应的跳转语句块进行追踪检测,并返回执行步骤813;

步骤819:确定检测语句为检测结束语句,停止对该语句的追踪检测。

其中,步骤818虽然描述为同时对赋值前的寄存器和赋值后的寄存器对应的跳转语句块进行追踪检测,但是其时间顺序不局限于上述实施例中所列举的顺序。也可以先对赋值后的寄存器对应的跳转语句块进行追踪检测,检测完成后再对赋值前的寄存器对应的跳转语句块进行追踪检测;或先对赋值前的寄存器对应的跳转语句块进行追踪检测,检测完成后再对赋值前的寄存器对应的跳转语句块进行追踪检测;或先对其中一个寄存器对应的跳转语句块进行追踪检测,检测设定时长后,再对另一寄存器对应的跳转语句块进行追踪检测。

需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

优选的,如图9所示,确定待检测语句为跳转语句后,还执行以下 操作:

步骤911:确定当前待检测的语句为跳转语句;

步骤912:判断此次追踪检测过程中检测到跳转语句的次数是否大于设定次数阈值,若不大于设定的次数阈值,则执行步骤913,否则执行步骤914;

步骤913:判断该跳转语句是否为赋值语句;

步骤914:确定检测失败,停止此次漏洞追踪检测。

优选的,如图10所示,当确定跳转语句为赋值语句后,还执行以下操作:

步骤1011:确定跳转语句为赋值语句;

步骤1012:判断赋值语句计数器的计数值是否大于1,若不大于则执行步骤1013,否则执行步骤1014;

步骤1013:当前寄存器赋值按照赋值逻辑对另一寄存器进行赋值处理;

步骤1014:确定检测失败,停止此次漏洞追踪检测。

步骤S15:追踪检测到结束条件,记录所述初始检测语句的位置以及所述初始检测语句至所述结束条件的数据流动路径,并结束检测。

本发明实施例还提供了一种程序漏洞的检测终端,需要说明的是,该实施例的程序漏洞的检测终端可以用于执行本发明实施例的程序漏洞的检测方法。

如图11所示,为本发明实施例中一种程序漏洞的检测终端,该终端用于检测待发布的,或测试阶段的智能终端的APP程序的漏洞,该终端包括规则识别模块10,语句分析模块20,漏洞检测模块30,检测记录模块40:

规则识别模块10,用于根据待检测程序预先设定的漏洞规则,确定漏洞规则对应的初始条件和结束条件;

规则识别模块10,还用于根据漏洞规则对应的初始条件确定待检测程序的初始检测语句;

语句分析模块20,用于确定初始检测语句的位置,其中初始检测语 句的位置包括初始检测语句对应的寄存器名称;

漏洞检测模块30,用于以初始检测语句为起点,顺序追踪检测待检测程序;

检测记录模块40,用于追踪检测到结束条件,记录初始检测语句的位置以及初始检测语句至结束条件的数据流动路径,并结束检测。

规则识别模块10,具体用于:建立待检测程序可能会存在的漏洞规则数据库,分别确定每一种漏洞规则对应初始条件和结束条件。漏洞的类型根据其获得敏感信息的类型进行划分,每种敏感信息的类型对应至少一种漏洞规则。敏感信息包括但不限于以下信息:电话号码,身份信息,消费记录,密码信息,聊天记录等各种使用者的信息。

优选的,一个漏洞规则包括至少一个初始条件,至少一个结束条件;每个初始条件对应至少一个结束条件。将漏洞规则对应的初始条件和结束条件形成配置文件。一种漏洞类型也可以根据该种漏洞的起始条件和/或结束条件生成多种漏洞规则。

规则识别模块10,具体用于:根据起始条件确定该起始条件对应的匹配字段,在待检测程序中顺序查找是否包括以上匹配字段,若包括,则将查找到的字段作为初始检测语句。每个匹配字段在待检测程序中多次出现,因此,每个匹配字段都需要在待检测程序中进行全面检测,将待检测程序中所有的该匹配字段全部找出。

语句分析模块20,具体用于:将待检测程序反编译为中间语言;逐条分析中间语言,确定中间语言的跳转语句;将中间语言的每两个跳转语句之间的顺序执行语句集合作为一个跳转语句块;根据跳转语句的逻辑关系确定各跳转语句块之间的跳转逻辑关系;确定初始检测语句所在的跳转语句块以及提取该初始检测语句需要跟踪的寄存器的名称。

其中跳转语句包括但不限于以下语句:if,switch,goto,调用函数,函数返回等。

由于两个跳转语句之间的顺序执行语句集合通常都在一个寄存器中存储,但待检测程序可能会在一个寄存器中可能会存储多个顺序执行语句集合,为方便跟踪记录漏洞形成的路径,将待检测程序两个跳转语句 之间的顺序执行语句集合作为一个跳转语句块,当发生跳转时,记录跳转前后的跳转语句块,就可以记录数据流动路径,避免记录每条流经语句路径。

漏洞检测模块30,具体用于:若待检测程序中包含多个初始检测语句,则可以同时对多个初始检测语句展开追踪检测,也可以顺序对每个初始检测语句进行追踪检索;具体情况根据确定的初始检测语句的数量,以及终端或服务器的使用情况确定。

漏洞检测模块30,以初始检测语句为起点,根据初始检测语句对应的寄存器名称r0,进入寄存器r0跟踪状态。顺序跟踪寄存器的流经语句,判断当前待检测的语句是否为跳转语句,若是跳转语句,则继续判断该跳转语句是否为赋值语句;若不是跳转语句,则判断当前待检测语句是否包含结束条件;

若跳转语句是赋值语句,则将当前寄存器r0的值按照赋值逻辑将值赋予另一寄存器;并分别对当前寄存器和另一寄存器进行跟踪;若跳转语句不是赋值语句,根据跳转语句的跳转逻辑跳转至待检测程序的对应的位置,顺序跟踪寄存器的流经语句。

若确定当前待检测语句包含结束条件,停止对该语句的追踪检测;若确定当前待检测语句不包含结束条件,则顺序跟踪寄存器的流经语句。

优选的,漏洞检测模块30根据语句分析模块20确定的跳转语句块和各跳转语句块之间的跳转逻辑关系,对待检测程序进行以下处理:

以初始检测语句为起点,确定初始检测语句对应的寄存器名称r0,初始检测语句对应的跳转语句块的标识;对初始检测语句进行检测,进入寄存器r0跟踪状态;顺序跟踪寄存器中的跳转语句块的流经语句。

判断当前跳转语句块是否包含结束条件,若包含,确定检测语句为检测结束语句,停止对该语句的追踪检测;否则,确定当前跳转语句块顺序检测完成。

判断当前跳转语句块对应的跳转语句是否为赋值语句,若不是赋值语句,则顺序跟踪跳转后的寄存器中的跳转语句块的流经语句;若是赋值语句,将当前寄存器的值根据赋值语句的逻辑关系赋予给另一寄存器; 同时对赋值前的寄存器和赋值后的寄存器对应的跳转语句块进行追踪检测。

虽然漏洞检测模块30中描述:同时对赋值前的寄存器和赋值后的寄存器对应的跳转语句块进行追踪检测;但是其时间顺序不局限于上述实施例中所列举的顺序。也可以先对赋值后的寄存器对应的跳转语句块进行追踪检测,检测完成后再对赋值前的寄存器对应的跳转语句块进行追踪检测;或先对赋值前的寄存器对应的跳转语句块进行追踪检测,检测完成后再对赋值前的寄存器对应的跳转语句块进行追踪检测;或先对其中一个寄存器对应的跳转语句块进行追踪检测,检测设定时长后,再对另一寄存器对应的跳转语句块进行追踪检测。

漏洞检测模块30,还用于,确定待检测语句为跳转语句后,判断此次追踪检测过程中检测到跳转语句的次数是否大于设定次数阈值,若不大于设定的次数阈值,则继续判断该跳转语句是否为赋值语句;若大于设定的次数阈值,则确定检测失败,停止此次漏洞追踪检测。

漏洞检测模块30,还用于,当确定跳转语句为赋值语句后,判断赋值语句计数器的计数值是否大于1,若不大于1,则当前寄存器赋值按照赋值逻辑对另一寄存器进行赋值处理;若大于1,则确定检测失败,停止此次漏洞追踪检测。

本发明实施例还提供了一种程序漏洞的检测服务器,需要说明的是,该实施例的程序漏洞的检测服务器可以用于执行本发明实施例的程序漏洞的检测方法。

如图12所示,为本发明实施例中一种程序漏洞的检测服务器,该服务器用于接收到触发信息后,检测待发布的,或测试阶段的智能终端APP程序中的漏洞,该服务器包括信息接收模块50,规则识别模块60,语句分析模块70,漏洞检测模块80,检测记录模块90:

信息接收模块50,用于根据接收到的触发信息分析确定对应的待检测程序标识;

信息接收模块50,还用于将触发信息以及确定的待检测程序标识通知规则识别模块60;

规则识别模块60,用于根据接收到的触发信息以及待检测程序标识,确定对应的漏洞规则,以及漏洞规则对应的初始条件和结束条件;

规则识别模块60,还用于根据漏洞规则对应的初始条件确定待检测程序的初始检测语句;

语句分析模块70,用于确定初始检测语句的位置,其中初始检测语句的位置包括初始检测语句对应的寄存器名称;

漏洞检测模块80,用于以初始检测语句为起点,顺序追踪检测待检测程序;

检测记录模块90,用于追踪检测到结束条件,记录初始检测语句的位置以及初始检测语句至结束条件的数据流动路径,并结束检测。

信息接收模块50,用于接收到触发信息后,分析确定对应的待检测程序标识;触发信息包括但不限于:电话号码,身份信息,聊天记录,图片信息,购物记录,账户信息,浏览记录等涉及个人隐私或威胁程序安全的至少一项信息。信息接收模块50接收到触发信息后,根除触发信息的信息内容确定待检测程序,将触发信息以及确定的待检测程序标识通知规则识别模块。

规则识别模块60,具体用于:根据接收到的触发信息以及待检测程序标识,确定对应的漏洞规则,以及漏洞规则对应的初始条件和结束条件。

规则识别模块60,具体用于:建立待检测程序可能会存在的漏洞规则数据库,分别确定每一种漏洞规则对应初始条件和结束条件。漏洞的类型根据其获得敏感信息的类型进行划分,每种敏感信息的类型对应至少一种漏洞规则。敏感信息包括但不限于以下信息:电话号码,身份信息,消费记录,密码信息,聊天记录等各种使用者的信息。

优选的,一个漏洞规则包括至少一个初始条件,至少一个结束条件;每个初始条件对应至少一个结束条件。将漏洞规则对应的初始条件和结束条件形成配置文件。一种漏洞类型也可以根据该种漏洞的起始条件和/或结束条件生成多种漏洞规则。

规则识别模块60,具体用于:根据起始条件确定该起始条件对应的 匹配字段,在待检测程序中顺序查找是否包括以上匹配字段,若包括,则将查找到的字段作为初始检测语句。每个匹配字段在待检测程序中多次出现,因此,每个匹配字段都需要在待检测程序中进行全面检测,将待检测程序中所有的该匹配字段全部找出。

语句分析模块70,具体用于:将待检测程序反编译为中间语言;逐条分析中间语言,确定中间语言的跳转语句;将中间语言的每两个跳转语句之间的顺序执行语句集合作为一个跳转语句块;根据跳转语句的逻辑关系确定各跳转语句块之间的跳转逻辑关系;确定初始检测语句所在的跳转语句块以及提取该初始检测语句需要跟踪的寄存器的名称。

其中跳转语句包括但不限于以下语句:if,switch,goto,调用函数,函数返回等。

由于两个跳转语句之间的顺序执行语句集合通常都在一个寄存器中存储,但待检测程序可能会在一个寄存器中可能会存储多个顺序执行语句集合,为方便跟踪记录漏洞形成的路径,将待检测程序两个跳转语句之间的顺序执行语句集合作为一个跳转语句块,当发生跳转时,记录跳转前后的跳转语句块,就可以记录数据流动路径,避免记录每条流经语句路径。

漏洞检测模块80,具体用于:若待检测程序中包含多个初始检测语句,则可以同时对多个初始检测语句展开追踪检测,也可以顺序对每个初始检测语句进行追踪检索;具体情况根据确定的初始检测语句的数量,以及终端或服务器的使用情况确定。

漏洞检测模块80,以初始检测语句为起点,根据初始检测语句对应的寄存器名称r0,进入寄存器r0跟踪状态。顺序跟踪寄存器的流经语句,判断当前待检测的语句是否为跳转语句,若是跳转语句,则继续判断该跳转语句是否为赋值语句;若不是跳转语句,则判断当前待检测语句是否包含结束条件;

若跳转语句是赋值语句,则将当前寄存器r0的值按照赋值逻辑将值赋予另一寄存器;并分别对当前寄存器和另一寄存器进行跟踪;若跳转语句不是赋值语句,根据跳转语句的跳转逻辑跳转至待检测程序的对应 的位置,顺序跟踪寄存器的流经语句。

若确定当前待检测语句包含结束条件,停止对该语句的追踪检测;若确定当前待检测语句不包含结束条件,则顺序跟踪寄存器的流经语句。

优选的,漏洞检测模块80根据语句分析模块70确定的跳转语句块和各跳转语句块之间的跳转逻辑关系,对待检测程序进行以下处理:

以初始检测语句为起点,确定初始检测语句对应的寄存器名称r0,初始检测语句对应的跳转语句块的标识;对初始检测语句进行检测,进入寄存器r0跟踪状态;顺序跟踪寄存器中的跳转语句块的流经语句。

判断当前跳转语句块是否包含结束条件,若包含,确定检测语句为检测结束语句,停止对该语句的追踪检测;否则,确定当前跳转语句块顺序检测完成。

判断当前跳转语句块对应的跳转语句是否为赋值语句,若不是赋值语句,则顺序跟踪跳转后的寄存器中的跳转语句块的流经语句;若是赋值语句,将当前寄存器的值根据赋值语句的逻辑关系赋予给另一寄存器;同时对赋值前的寄存器和赋值后的寄存器对应的跳转语句块进行追踪检测。

虽然漏洞检测模块80中描述:同时对赋值前的寄存器和赋值后的寄存器对应的跳转语句块进行追踪检测;但是其时间顺序不局限于上述实施例中所列举的顺序。也可以先对赋值后的寄存器对应的跳转语句块进行追踪检测,检测完成后再对赋值前的寄存器对应的跳转语句块进行追踪检测;或先对赋值前的寄存器对应的跳转语句块进行追踪检测,检测完成后再对赋值前的寄存器对应的跳转语句块进行追踪检测;或先对其中一个寄存器对应的跳转语句块进行追踪检测,检测设定时长后,再对另一寄存器对应的跳转语句块进行追踪检测。

漏洞检测模块80,还用于,确定待检测语句为跳转语句后,判断此次追踪检测过程中检测到跳转语句的次数是否大于设定次数阈值,若不大于设定的次数阈值,则继续判断该跳转语句是否为赋值语句;若大于设定的次数阈值,则确定检测失败,停止此次漏洞追踪检测。

漏洞检测模块80,还用于,当确定跳转语句为赋值语句后,判断赋 值语句计数器的计数值是否大于1,若不大于1,则当前寄存器赋值按照赋值逻辑对另一寄存器进行赋值处理;若大于1,则确定检测失败,停止此次漏洞追踪检测。

需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。

另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。

对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。系统权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称, 而并不表示任何特定的顺序。

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