程序漏洞检测方法及相关装置与流程

文档序号:14676839发布日期:2018-06-12 21:36阅读:189来源:国知局
程序漏洞检测方法及相关装置与流程

本申请涉及程序代码检测技术领域,更具体地,是程序漏洞检测方法及相关装置。



背景技术:

检测程序代码是否存在漏洞的方式之一为白盒测试。白盒测试又称为结构测试,目前白盒测试的一种具体方法是逻辑覆盖,该方法分析出程序代码所有可能执行的路径,在当前分析出的路径上查找代码漏洞。

但是,此种检测方法只能检测出程序代码现有流程中的问题,并不能发现现有流程本身所缺失的步骤,检测内容并不全面。



技术实现要素:

有鉴于此,本申请提供了一种程序漏洞检测方法,用以检测出现有程序中可能存在的缺失漏洞,以提高检测的全面性。另外,本申请还提供了一种程序漏洞检测装置及设备,用以保证所述方法在实际中的应用及实现。

为实现所述目的,本申请提供的技术方案如下:

第一方面,本申请提供了一种程序漏洞检测方法,包括:

接收用户输入的待检测流程逻辑图及标准逻辑流程图;其中,所述待检测逻辑流程图用于表示待检测程序的逻辑流程,所述待检测程序为实现目标业务而编写的程序,所述标准逻辑流程图用于表示所述目标业务的必需逻辑流程;

对比所述待检测逻辑流程图与所述标准逻辑流程图是否一致;

若一致,则提示待检测程序不存在漏洞;

若不一致,则确定所述待检测逻辑流程图与所述标准逻辑流程图的不一致节点,并提示所述不一致节点。

第二方面,本申请提供了一种程序漏洞检测装置,包括:

逻辑流程图接收单元,用于接收用户输入的待检测流程逻辑图及标准逻辑流程图;其中,所述待检测逻辑流程图用于表示待检测程序的逻辑流程,所述待检测程序为实现目标业务而编写的程序,所述标准逻辑流程图用于表示所述目标业务的必需逻辑流程;

逻辑流程图对比单元,用于对比所述待检测逻辑流程图与所述标准逻辑流程图是否一致;若一致,则触发对比一致提示单元,若不一致,则触发对比不一致提示单元;

对比一致提示单元,用于提示待检测程序不存在漏洞;

对比不一致提示单元,用于确定所述待检测逻辑流程图与所述标准逻辑流程图的不一致节点,并提示所述不一致节点。

第三方面,本申请提供了一种程序漏洞检测设备,包括:上述程序漏洞检测装置。

由以上技术方案可知,本实施例提供了一种程序漏洞检测方法,该方法在检测某项业务对应的现有程序时,不仅获取该待检测程序的逻辑流程图,还获取分析该业务后确定出的标准逻辑流程图,将待检测程序的逻辑流程图与该标准逻辑流程图进行比对,以确定待检测程序的逻辑流程图与标准逻辑流程图中不一致的步骤,该步骤即待检测程序中的漏洞。可见,该方法不仅可以发现待检测程序现有流程中的问题,还可以发现其缺失的步骤,漏洞检查更加全面。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本申请提供的程序代码的逻辑流程的一个示意图;

图2为本申请提供的程序漏洞检测方法的一个流程图;

图3A为本申请提供的标准逻辑流程图的一个示例图;

图3B为本申请提供的待检测逻辑流程图的一个示例图;

图3C为本申请提供的对比图3A及图3B后的检测结果的一个示例图;

图4为本申请提供的程序代码的逻辑流程的另一示意图;

图5A为本申请提供的标准逻辑流程图的另一示例图;

图5B为本申请提供的待检测逻辑流程图的另一示例图;

图5C为本申请提供的对比图5A及图5B后的检测结果的另一示例图;

图6为本申请提供的程序漏洞检测装置的结构示意图;

图7为本申请提供的程序漏洞检测设备的通用计算机架构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

目前用于检测程序漏洞的逻辑覆盖方法,只能发现程序代码现有流程中的问题,若现有流程本身是不完整的,这也算是一种代码漏洞,对于此种类型的漏洞,逻辑覆盖方法并不能发现。

如图1所示的程序代码的逻辑流程,从程序入口分别到程序出口1、程序出口2及程序出口3,均包含多条由实线条组成的路径,此些路径是现有程序代码流程中的路径。逻辑覆盖方法可以在此些路径上查找漏洞,但现有流程中缺失一部分节点即虚线框及虚线条部分,逻辑覆盖方法不能发现与这条路径相关的漏洞。

对此,本申请提供了一种程序漏洞检测方法,如图2所示该检测方法流程包括以下步骤S201~步骤S204。

S201:接收用户输入的待检测逻辑流程图及标准逻辑流程图。

其中,待检测逻辑流程图所示的流程为现有程序的流程,该现有程序为实现某一项业务已编写完成的程序,该程序即待检测程序。标准逻辑流程图所示的流程为实现该业务所必需的流程,为了便于描述,可以将该某一业务称为目标业务。

例如,在某游戏类系统中,玩家A拥有金币(一种金钱的虚拟单位),玩家B拥有道具(一种游戏过程所使用的物品),玩家A想要使用金币购买玩家B的道具,这就是游戏系统内的一项交易业务。

用户分析上述交易业务后,确定出来为了实现该交易业务所必需的逻辑流程,并向设备输入表示该逻辑流程的图示。该图示如图3A所示,玩家A发起交易请求,玩家B同意交易后,检查玩家双方是否在线,并检查道具数量是否足够,以及检查金币是否足够,检查通过后进行交易。

用户获得为实现上述交易业务而编写完成的程序代码,分析该程序代码后,确定出该现有程序的逻辑流程,并向设备输入表示该逻辑流程的图示。该如图3B所示,玩家A发起交易请求,玩家B同意交易后,检查交易道具数量是否足够,以及检查金币是否足够,检查通过后进行交易。

需要说明的是,用户可以使用设备提供的流程绘制工具输入流程,所输入的流程也并非局限于图3A及图3B所示,可以是本领域技术人员可以理解并预期得到的其他形式,以下具体说明逻辑流程图如何生成,此处并不赘述。

S202:对比该待检测逻辑流程图及该标准逻辑流程图,若一致,则执行步骤S203,若不一致,则执行步骤S204。

其中,对比的内容可以包括:待检测逻辑流程图与标准逻辑流程图的步骤个数是否相同、步骤的内容是否相同、步骤的顺序是否相同中的任意一个或多个。

逻辑流程图中的步骤可以包含在输入框内,例如用户在流程绘制工具中拖拽一个文本框,并在文本框中输入步骤内容,将各个文本框按照某种顺序连接起来,便组成一个逻辑流程图。

这样,对比两个逻辑流程图中的输入框个数是否相同,则可以确定两个逻辑流程图的步骤个数是否相同;对比输入框内的内容是否相同,则可以确定两个逻辑流程图的步骤内容是否相同;对比各个输入框的连接顺序是否相同,则可以确定两个逻辑流程图的步骤顺序是否相同。需要说明的是,比较输入框内的内容是否相同时,可以使用语义检测方法。

可以理解的是,对比的内容越多,越能精确地确定两个逻辑流程图是否一致。若对比多项内容,则只有在每项内容均一致的情况下,才执行步骤S203,只要有任意一项内容不一致,则执行步骤S204。

以图3A及图3B为例,对比该两个逻辑流程图后,发现相较于图3A所示的标准逻辑流程图,图3B所示的待检测逻辑流程图中缺省一个步骤即“检查玩家双方是否在线”,这属于两个逻辑流程图中的步骤数量并不相同,则执行步骤S204。

S203:提示待检测程序不存在漏洞。

其中,可以生成提示信息并显示,以提示用户待检测程序中不存在漏洞。待检测程序中不存在漏洞,也即说明待检测程序包含了实现某项业务所必须的各个步骤。

S204:确定该待检测逻辑流程图与该标准逻辑流程图的不一致步骤并进行提示。

其中,在步骤S202对比结果为不一致的情况下,可以生成提示信息,以提示用户待检测程序中存在漏洞。进一步地,可以将步骤S202对比中发现的不一致的步骤显示出来,以进一步提示用户待检测程序的漏洞具体是什么。

显示的方式可以是在待检测程序的待检测逻辑流程图中进行标示。

若待检测流程图的节点数量与标准逻辑流程图的节点数量不一致,则确定待检测流程图多余或缺失的节点,并在标准逻辑流程图中,以预设样式显示节点。

若待检测流程图的节点内容与标准逻辑流程图的节点内容不一致,则在标准逻辑流程图中,以预设样式显示该内容不一致的节点。

如图3C所示,可以在待检测逻辑流程图中,添加一个线条形式不同于其他文本框的文本框,该文本框内包含与图3B所示的标准逻辑流程图对比后发现的缺失的步骤,以对用户进行提示。

可以理解的是,图3C所示的提示方式不仅可以用于提示用户缺失步骤(即标准逻辑流程图包含但待检测逻辑流程图并不包含的步骤),也可以用于提示多余步骤(即标准逻辑流程图不包含但待检测逻辑流程图包含的步骤),也可以用于提示内容不一致的步骤。

若待检测流程图的节点顺序与标准逻辑流程图的节点顺序不一致,则在标准逻辑流程图中,以预设样式显示该顺序不一致的节点及其之间的连接线。

由以上技术方案可知,本实施例提供了一种程序漏洞检测方法,该方法在检测某项业务对应的现有程序时,不仅获取该待检测程序的逻辑流程图,还获取分析该业务后确定出的标准逻辑流程图,将待检测程序的逻辑流程图与该标准逻辑流程图进行比对,以确定待检测程序的逻辑流程图与标准逻辑流程图中不一致的步骤,该步骤即待检测程序中的漏洞。可见,该方法不仅可以发现待检测程序现有流程中的问题,还可以发现其缺失的步骤,漏洞检查更加全面。

在实施中,标准逻辑流程图及待检测逻辑流程图并非局限于图3A及图3B所示的形式,还可以是其他。见图4,其示出了一个逻辑流程图可能包含的节点类型。如图4所示,逻辑流程图中可以包含起始节点、判断节点、事件节点、循环节点及终止节点。其中:

起始节点:表示逻辑流程中的起始步骤,一个逻辑流程图中有且仅有一个起始节点;判断节点:表示逻辑流程中的判断步骤,由key,value等条件表达式组成;事件节点:表示逻辑流程中某具体行为的节点;循环节点:表示逻辑流程中某具体行为需要重复的次数;结束节点:表示逻辑流程中的结束步骤,一个逻辑流程图中有且仅有一个结束节点。

当然,一个逻辑流程图中,除起始节点及终止节点之外,其他类型的节点并不一定同时存在。

用户向设备输入以上形式的逻辑流程图后,设备可以使用树这种数据结构来表示逻辑流程图。树的节点可以使用结构体这种数据结构来表示。例如:

起始节点及结束结点的结构体为:

判断节点的结构体为:

事件节点的结构体为:

将各个节点使用链表组合后,便可以表示一棵树。当然,树中节点也并非局限于使用结构体这种数据结构,还可以是其他。

以上述游戏系统内的交易业务为例,用户分析该交易业务后,输入的标准逻辑流程图可以如图5A所示。该标准逻辑流程图中包含起始节点、三个判断节点、两个事件节点及结束节点。其中,三个判断节点分别是,检查玩家双方是否在线,检查买家金币数量是否足够,以及检查卖家道具数量是否足够。两个事件节点分别是,买家获得道具,以及卖家获得金币。

为了表示该三个判断节点,设备生成三个Decide结构体。该三个Decide结构体的标识nID的值分别为0、1及2,循环次数nRepeatNum均为1,信息属性Info的值分别为“检查玩家双方是否在线”、“检查买家金币数量是否足够”及“检查卖家道具数量是否足够”。当然,Info的值可以并不局限于文字,也可以是程序代码。

为了表示该两个事件节点,设备生成两个Action结构体。该两个Action结构体的标识nActionID分别为0及1,Info的值分别为“买家获得道具”,及“卖家获得金币”。当然,Info的值可以并不局限于文字,也可以是程序代码。

将上述7个结构体使用链表串联起来,便可以获得标准逻辑流程图的树形结构。

上述交易业务已经存在相应的程序代码,该程序代码的一种形式如下所示:

用户分析以上程序代码后,输入的流程逻辑图如图5B所示,该标准逻辑流程图中包含起始节点、两个判断节点、两个事件节点及结束节点。其中,两个判断节点分别是,检查买家金币数量是否足够,以及检查卖家道具数量是否足够。两个事件节点分别是,买家获得道具,以及卖家获得金币。

为了表示该两个判断节点,设备生成两个Decide结构体。该两个Decide结构体的标识nID的值分别为0及1,Info的值分别为“检查买家金币数量是否足够”、及“检查卖家道具数量是否足够”。

为了表示该两个事件节点,设备生成两个Action结构体。该两个Action结构体的标识nActionID分别为0及1,循环次数nRepeatNum均为1,Info的值分别为“买家获得道具”,及“卖家获得金币”。

将上述6个结构体使用链表串联起来,便可以获得待检测逻辑流程图的树形结构。

需要说明的是,不论是标准逻辑流程图还是待检测逻辑流程图中,结构体的标识(nID或nActionID)均可以是由用户输入的,也可以是自动生成的。自动生成的方法是,根据流程图中连接线的走向,确定出各个输入框的前后顺序,根据该前后顺序,依次为各个输入框设置标志。

标识在同一类型节点中具有唯一性,也就是说,同一类型的节点具有互不相同的标识。例如,三个判断节点的结构体中,nID分别为0、1及2;两个事件节点的结构体中,nActionID分别为0及1。或者,标识在整个逻辑流程图中具有唯一性,也就是说,每个节点均具有与其他节点不同的标识。例如,三个判断节点的结构体中,nID分别为1、2及3;两个事件节点的结构体中,nActionID分别为4及5。

在生成两个逻辑流程图的树形结构后,便可以使用树遍历算法对比两棵树的不同。例如,树遍历算法的实现代码如下:

在遍历结束后,可以显示链表difflist中的节点内容,如显示叶子节点的Info属性的值,该值为某步骤的文字内容或代码。例如,上述遍历结束后,链表difflist中的叶子节点为结构体Decide,其标识nID为0,其Info为“检查玩家双方是否在线”,显示的内容为“检查玩家双方是否在线”,根据显示的内容,用户可以直观地明确待检测程序所缺少的步骤。当然,保存不存在叶子节点node的方式并不局限于链表,还可以是本领域技术人员可以理解并预期得到的其他形式。

或者,可以在标准逻辑流程图中,对待检测程序所缺失的步骤进行标记,如图5C所示,虚线框表示的步骤即所缺失的步骤。当然,标记方式并不局限于此,还可以是本领域技术人员可以理解并预期得到的其他形式。

或者,可以使用偏差二叉树来标记待检测程序所缺失的步骤。

在一个示例中,为了便于区分,将表示待检测逻辑流程图的结构体称为第一结构体,将表示标准逻辑流程图的结构体称为第二结构体。则对比两棵树的结构体是否一致的具体实现方式可以包括以下三个方面:

对比所述第一结构体与所述第二结构体的数量是否相同;

对比所述第一结构体中的信息属性的值与所述第二结构体中的信息属性的值是否相同;其中,所述信息属性的值用于表示节点内容;以及

对比所述信息属性值相同的第一结构体与第二结构体的排列顺序是否相同。

第一方面用于对比待检测逻辑流程图与标准逻辑流程图的节点数量是否相同;第二方面用于对比待检测逻辑流程图与标准逻辑流程图的节点内容(步骤内容)是否相同;第三方面用于对比待检测逻辑流程图与标准逻辑流程图的节点顺序(步骤顺序)是否相同。

为实现以上程序漏洞检测方法,本申请还提供了程序漏洞检测装置。见图6所示的程序漏洞检测装置的结构示意,该装置可以具体包括:逻辑流程图接收单元601、逻辑流程图对比单元602、对比一致提示单元603及对比不一致提示单元604。

逻辑流程图接收单元601,用于接收用户输入的待检测流程逻辑图及标准逻辑流程图;其中,待检测逻辑流程图用于表示待检测程序的逻辑流程,待检测程序为实现目标业务而编写的程序,标准逻辑流程图用于表示目标业务的必需逻辑流程;

逻辑流程图对比单元602,用于对比待检测逻辑流程图与标准逻辑流程图是否一致;若一致,则触发对比一致提示单元603,若不一致,则触发对比不一致提示单元604;

对比一致提示单元603,用于提示待检测程序不存在漏洞;

对比不一致提示单元604,用于确定待检测逻辑流程图与标准逻辑流程图的不一致节点,并提示不一致节点。

在一个示例中,在执行对比待检测逻辑流程图与标准逻辑流程图是否一致的步骤时,逻辑流程图对比单元602具体用于:

对比待检测逻辑流程图与标准逻辑流程图的节点数量、节点内容及节点顺序是否一致。

在一个示例中,在执行确定待检测逻辑流程图与标准逻辑流程图的不一致节点,并提示不一致节点的步骤时,对比不一致提示单元604具体用于:

若待检测流程图的节点数量与标准逻辑流程图的节点数量不一致,则确定待检测流程图多余或缺失的节点,并在标准逻辑流程图中,以预设样式显示节点。

在另一示例中,在执行确定待检测逻辑流程图与标准逻辑流程图的不一致节点,并提示不一致节点的步骤时,对比不一致提示单元604具体用于:

若待检测流程图的节点内容与标准逻辑流程图的节点内容不一致,则在标准逻辑流程图中,以预设样式显示该内容不一致的节点。

在又一示例中,在执行确定待检测逻辑流程图与标准逻辑流程图的不一致节点,并提示不一致节点的步骤时,对比不一致提示单元604具体用于:

若待检测流程图的节点顺序与标准逻辑流程图的节点顺序不一致,则在标准逻辑流程图中,以预设样式显示该顺序不一致的节点及其之间的连接线。

在一个示例中,为了便于描述,可以将存储待检测流程逻辑图的数据结构称为第一树,将存储标准逻辑流程图的数据结构称为第二树;

相应地,在执行对比待检测逻辑流程图与标准逻辑流程图的节点数量、节点内容及节点顺序是否一致的步骤时,逻辑流程图对比单元602具体用于:

依据树遍历算法,查找第二树包含但第一树并不包含的叶子节点。

在一个示例中,为了便于描述,可以将存储待检测逻辑流程图中的节点的数据结构称为第一结构体,将存储标准逻辑流程图中的节点的数据结构称为第二结构体;

相应地,在执行对比待检测逻辑流程图与标准逻辑流程图的节点数量、节点内容及节点顺序是否一致的步骤时,逻辑流程图对比单元602具体用于:

对比第一结构体与第二结构体的数量是否相同;

对比第一结构体中的信息属性的值与第二结构体中的信息属性的值是否相同;其中,信息属性的值用于表示节点内容;

对比信息属性值相同的第一结构体与第二结构体的排列顺序是否相同。

在一个示例中,待检测逻辑流程图及标准逻辑流程图包含起始节点及结束节点之外,还包含判断节点、事件节点及循环节点中的任意一种或多种。

本申请实施例还提供一种程序漏洞检测设备,该程序漏洞检测设备可以包括上述的程序漏洞检测装置,对于程序漏洞检测的描述可参照上文对应部分描述,此处不再赘述。

下面对本申请实施例提供的程序漏洞检测设备的硬件结构进行描述。图7为本申请实施例提供的程序漏洞检测设备的硬件结构示意图,参照图7,该设备可以包括:

处理器1,通信接口2,存储器3,通信总线4,和显示屏5;

其中处理器1、通信接口2、存储器3和显示屏5通过通信总线4完成相互间的通信;

可选的,通信接口2可以为通信模块的接口,如GSM模块的接口;

处理器1,用于执行程序;

存储器3,用于存放程序;

程序可以包括程序代码,所述程序代码包括处理器的操作指令。

处理器1可能是一个中央处理器CPU,或者是特定集成电路ASIC(Application Specific Integrated Circuit),或者是被配置成实施本申请实施例的一个或多个集成电路。

存储器3可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。

其中,程序可具体用于:

接收用户输入的待检测流程逻辑图及标准逻辑流程图;其中,所述待检测逻辑流程图用于表示待检测程序的逻辑流程,所述待检测程序为实现目标业务而编写的程序,所述标准逻辑流程图用于表示所述目标业务的必需逻辑流程;

对比所述待检测逻辑流程图与所述标准逻辑流程图是否一致;

若一致,则提示待检测程序不存在漏洞;

若不一致,则确定所述待检测逻辑流程图与所述标准逻辑流程图的不一致节点,并提示所述不一致节点。

需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括上述要素的过程、方法、物品或者设备中还存在另外的相同要素。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

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