路径敏感检测方法和装置
技术领域
本发明实施例涉及领域计算机技术,尤其涉及一种路径敏感检测方法和装置。
背景技术
程序中存在的值流错误是一种非常普遍、非常危险的漏洞,在各种操作系统、应用软件中广泛存在,值流错误是指在定值点存在错误定值,且错误定值随值流到达引用点时引发的错误。为保障计算机系统安全运行,消除值流错误非常重要。
目前主要采用静态方法检测值流错误。静态方法不需要运行程序,仅需静态扫描源程序即可发现程序中的错误能够尽早地发现程序中的错误。而为了提高错误检测的精度,通常是通过逐一分析程序中所有可能执行的路径,然后检测值流错误。此类方法具有高检测精度,但由于路径空间的指数级膨胀问题,该分析方法的可扩展性并不理想,无法有效应用于大规模的应用程序。
发明内容
本发明实施例提供一种路径敏感检测方法和装置,从而解决现有技术中检测值流错误的方案存在的可扩展性不理想,无法有效应用于大规模的应用程序的问题。
第一方面,本发明实施例提供一种路径敏感检测方法,包括:
根据值流错误类型为变量设置初始的与错误相关的属性;
沿着定值引用链传播所述初始的与错误相关的属性,所述定值引用链为所有可能流经所述定值点的引用点所组成的集合;
在潜在错误语句处识别所述变量的与错误相关的属性;
根据所述在潜在错误语句处识别的所述变量的与错误相关的属性,确定所述潜在错误语句为可能错误语句,所述可能错误语句表示所述变量的定值语句经由部分路径到达会导致错误的引用语句;
根据所述可能错误语句获得路径敏感检测的语句输入集;
根据所述路径敏感检测的语句输入集进行路径敏感检测。
在第一方面的第一种可能的实现方式中,所述根据所述在潜在错误语句处识别的所述变量的与错误相关的属性,确定所述潜在错误语句为可能错误语句,包括:
根据所述在潜在错误语句处识别的所述变量的与错误相关的属性,确定所述变量的与错误相关的属性是否为不安全的属性;
若所述变量的与错误相关的属性为不安全的属性,则通过检查当前的控制节点确定所述当前的控制节点中是否存在检查语句,所述控制节点为所述潜在错误语句相对于所述变量的定值语句的控制流图上的控制节点;
若存在检查语句,则查找是否存在特殊控制流;
若不存在特殊控制流,则将下一个控制节点作为当前控制节点,并执行所述通过检查当前的控制节点确定所述当前的控制节点中是否存在检查语句的步骤;
在检查过的所有控制节点中都不存在检查语句和特殊控制流的情况下,确定所述潜在错误语句为可能错误语句。
根据第一方面的第一种可能的实现方式,在第二种可能的实现方式中,还包括:
若不存在检查语句,则将下一个控制节点作为当前控制节点,并执行所述通过检查当前的控制节点确定所述当前的控制节点中是否存在检查语句的步骤。
根据第一方面的第一种或第二种可能的实现方式,在第三种可能的实现方式中,还包括:
若存在特殊控制流,则确定所述潜在错误语句为一定不错语句。
根据第一方面、第一方面的第一种至第三种可能的实现方式中的任意一种,在第四种可能的实现方式中,所述根据所述可能错误语句获得路径敏感检测的语句输入集,包括:
对所述可能错误语句进行程序切片,以获得与所述可能错误语句相关的语句集合,并将所述与所述可能错误语句相关的语句集合作为路径敏感检测的语句输入集。
根据第一方面的第四种可能的实现方式,在第五种可能的实现方式中,所述对所述可能错误语句进行程序切片,以获得与可能错误语句相关的语句集合,包括:
对所述可能错误语句进行后向切片,以获得语句集合SBT;
对所述变量的定值语句进行前向切片,以获得语句集合SFS;
计算所述SBT与所述SFS的交集STS,并对所述变量的定值语句进行后向切片,以获得对所述变量的定值语句进行后向切片的结果;
计算获得的对所述变量的定值语句进行后向切片的结果与所述STS的并集,并将所述对所述变量的定值语句进行后向切片的结果与所述STS的并集作为与所述可能错误语句相关的语句集合,并将所述与所述可能错误语句相关的语句集合作为路径敏感检测的语句输入集。
第二方面,本发明实施例提供一种路径敏感检测装置,包括:
设置模块,用于根据值流错误类型为变量设置初始的与错误相关的属性;
传播模块,用于沿着定值引用链传播所述初始的与错误相关的属性,所述定值引用链为所有可能流经所述定值点的引用点所组成的集合;
识别模块,用于在潜在错误语句处识别所述变量的与错误相关的属性;
确定模块,用于根据所述在潜在错误语句处识别的所述变量的与错误相关的属性,确定所述潜在错误语句为可能错误语句,所述可能错误语句表示所述变量的定值语句经由部分路径到达会导致错误的引用语句;
获得模块,用于根据所述可能错误语句获得路径敏感检测的语句输入集;
检测模块,用于根据所述路径敏感检测的语句输入集进行路径敏感检测。
在第二方面的第一种可能的实现方式中,所述确定模块,具体用于根据所述在潜在错误语句处识别的所述变量的与错误相关的属性,确定所述变量的与错误相关的属性是否为不安全的属性;若所述变量的与错误相关的属性为不安全的属性,则通过检查当前的控制节点确定所述当前的控制节点中是否存在检查语句,所述控制节点为所述潜在错误语句相对于所述变量的定值语句的控制流图上的控制节点;若存在检查语句,则查找是否存在特殊控制流;若不存在特殊控制流,则将下一个控制节点作为当前控制节点,并执行所述通过检查当前的控制节点确定所述当前的控制节点中是否存在检查语句的步骤;在检查过的所有控制节点中都不存在检查语句和特殊控制流的情况下,确定所述潜在错误语句为可能错误语句。
根据第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述确定模块,还用于若不存在检查语句,则将下一个控制节点作为当前控制节点,并执行所述通过检查当前的控制节点确定所述当前的控制节点中是否存在检查语句的步骤。
根据第二方面的第一种或第二种可能的实现方式,在第三种可能的实现方式中,所述确定模块,还用于若存在特殊控制流,则确定所述潜在错误语句为一定不错语句。
根据第二方面、第二方面的第一种至第三种可能的实现方式中的任意一种,在第四种可能的实现方式中,所述获得模块,具体用于对所述可能错误语句进行程序切片,以获得与所述可能错误语句相关的语句集合,并将所述与所述可能错误语句相关的语句集合作为路径敏感检测的语句输入集。
根据第二方面的第四种可能的实现方式,在第五种可能的实现方式中,所述获得模块,具体用于对所述可能错误语句进行后向切片,以获得语句集合SBT;对所述变量的定值语句进行前向切片,以获得语句集合SFS;计算所述SBT与所述SFS的交集STS,并对所述变量的定值语句进行后向切片,以获得对所述变量的定值语句进行后向切片的结果;计算获得的对所述变量的定值语句进行后向切片的结果与所述STS的并集,并将所述对所述变量的定值语句进行后向切片的结果与所述STS的并集作为与所述可能错误语句相关的语句集合,并将所述与所述可能错误语句相关的语句集合作为路径敏感检测的语句输入集。
本发明实施例路径敏感检测方法和装置,通过根据值流错误类型为变量设置初始的与错误相关的属性,沿着定值引用链传播初始的与错误相关的属性,在潜在错误语句处识别变量的与错误相关的属性,根据在潜在错误语句处识别的变量的与错误相关的属性,确定潜在错误语句为可能错误语句,根据可能错误语句获得路径敏感检测的语句输入集,根据路径敏感检测的语句输入集进行路径敏感检测。从而解决现有技术中检测值流错误存在的可扩展性并不理想,无法有效应用于大规模的应用程序的问题,通过减少路径敏感检测的语句输入集降低了检测开销,能够有效应用于大规模的应用程序。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一所提供的路径敏感检测方法的流程图;
图2为本发明实施例二所提供的路径敏感检测方法的流程图;
图3为本发明实施例三所提供的路径敏感检测装置300的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例一所提供的路径敏感检测方法的流程图。本实施例的方法能够有效应用于大规模的应用程序。该方法由值流错误检测装置执行,该装置通常以硬件和/或软件的方式来实现。本实施例的方法包括如下步骤:
步骤110、根据值流错误类型为变量设置初始的与错误相关的属性。
步骤120、沿着定值引用链传播初始的与错误相关的属性,定值引用链为所有可能流经定值点的引用点所组成的集合。
需要说明的是,程序中的一个“点”,是指一个中间语言语句(如四元式)在其代码序列中的位置。从动态上看,当刚要执行此语句时,我们就说控制正到达它之前的点;而当此语句刚被执行完毕时,则说控制到达了它之后的点。例如,设Q是程序中变量A的定值点,即Q点上的语句执行对A赋值或对A输入其值的操作,则对程序中的某些点P,如果在流程图中有一条从Q到P的通路,且在此通路上不再含有A的其它定值点,那么,我们就说A在点Q的定值能到达点P。如果在程序的某些点引用了变量A的值(即以A为操作对象),则把流程图中所有可能流经Q的引用点所组成的集合称为定值引用链。
步骤130、在潜在错误语句处识别变量的与错误相关的属性。
步骤140、根据在潜在错误语句处识别的变量的与错误相关的属性,确定潜在错误语句为可能错误语句,可能错误语句表示变量的定值语句经由部分路径到达会导致错误的引用语句。
步骤150、根据可能错误语句获得路径敏感检测的语句输入集。
步骤160、根据路径敏感检测的语句输入集进行路径敏感检测。
具体的,根据值流错误类型为变量设置初始的与错误相关的属性,沿着定值引用链传播初始的与错误相关的属性,在潜在错误语句处识别变量的与错误相关的属性,根据在潜在错误语句处识别的变量的与错误相关的属性,确定潜在错误语句为可能错误语句,根据可能错误语句获得路径敏感检测的语句输入集,根据路径敏感检测的语句输入集进行路径敏感检测。
本实施例提供的路径敏感检测方法,通过根据值流错误类型为变量设置初始的与错误相关的属性,沿着定值引用链传播初始的与错误相关的属性,在潜在错误语句处识别变量的与错误相关的属性,根据在潜在错误语句处识别的变量的与错误相关的属性,确定潜在错误语句为可能错误语句,根据可能错误语句获得路径敏感检测的语句输入集,根据路径敏感检测的语句输入集进行路径敏感检测。从而解决现有技术中检测值流错误存在的可扩展性并不理想,无法有效应用于大规模的应用程序的问题,通过减少路径敏感检测的语句输入集降低了检测开销,能够有效应用于大规模的应用程序。
本实施例以上述实施例一为基础,进一步进行了优化,图2为本发明实施例二所提供的路径敏感检测方法的流程图。参照图2,本实施例的方法可以包括:
步骤201、根据值流错误类型为变量设置初始的与错误相关的属性。
步骤202、沿着定值引用链传播初始的与错误相关的属性,定值引用链为所有可能流经定值点的引用点所组成的集合。
步骤203、在潜在错误语句处识别变量的与错误相关的属性。
步骤204、根据在潜在错误语句处识别的变量的与错误相关的属性,确定变量的与错误相关的属性是否为不安全的属性。在变量的与错误相关的属性为不安全的属性时,执行步骤205。
步骤205、通过检查当前的控制节点确定当前的控制节点中是否存在检查语句。若是,则执行步骤206,否则执行步骤208。
控制节点为潜在错误语句相对于变量的定值语句的控制流图上的控制节点。
步骤206、查找是否存在特殊控制流。若是,则执行步骤207,否则执行步骤208。
特殊控制流指的是诸如exit和return这样的语句在控制流图中的表现。
步骤207、确定潜在错误语句为一定不错语句。
步骤208、将下一个控制节点作为当前控制节点,并执行通过检查当前的控制节点确定当前的控制节点中是否存在检查语句的步骤。
步骤209、在检查过的所有控制节点中都不存在检查语句和特殊控制流的情况下,确定潜在错误语句为可能错误语句。
步骤210、对可能错误语句进行程序切片,以获得与可能错误语句相关的语句集合,并将与可能错误语句相关的语句集合作为路径敏感检测的语句输入集。
举例来说,对可能错误语句进行程序切片,以获得与可能错误语句相关的语句集合可以通过如下方式实现:
对可能错误语句进行后向切片,以获得语句集合SBT;对变量的定值语句进行前向切片,以获得语句集合SFS;计算SBT与SFS的交集STS,并对变量的定值语句进行后向切片,以获得对变量的定值语句进行后向切片的结果;计算获得的对变量的定值语句进行后向切片的结果与STS的并集,并将对变量的定值语句进行后向切片的结果与STS的并集作为与可能错误语句相关的语句集合,并将与可能错误语句相关的语句集合作为路径敏感检测的语句输入集。
需要说明的是,对可能错误语句进行程序切片后获得的与可能错误语句相关的语句集合,将与可能错误语句相关的语句集合作为路径敏感检测的语句输入集,能够进一步降低路径敏感检测的语句输入,从而进一步降低了路径敏感检测开销。
步骤211、根据路径敏感检测的语句输入集进行路径敏感检测。
本实施例提供的路径敏感检测方法,通过根据值流错误类型为变量设置初始的与错误相关的属性,沿着定值引用链传播初始的与错误相关的属性,在潜在错误语句处识别变量的与错误相关的属性,根据在潜在错误语句处识别的变量的与错误相关的属性,确定潜在错误语句为可能错误语句,并对可能错误语句进行程序切片,以获得与可能错误语句相关的语句集合,并将与可能错误语句相关的语句集合作为路径敏感检测的语句输入集,根据路径敏感检测的语句输入集进行路径敏感检测。从而解决现有技术中检测值流错误存在的可扩展性并不理想,无法有效应用于大规模的应用程序的问题,通过减少路径敏感检测的语句输入集降低了检测开销,能够有效应用于大规模的应用程序。
图3为本发明实施例三所提供的路径敏感检测装置300的结构示意图。该装置通常以硬件和/或软件的方式来实现。参照图3,该装置包括如下模块:设置模块310、传播模块320、识别模块330、确定模块340、获得模块350和检测模块360。
设置模块310用于根据值流错误类型为变量设置初始的与错误相关的属性;传播模块320用于沿着定值引用链传播初始的与错误相关的属性,定值引用链为所有可能流经定值点的引用点所组成的集合;识别模块330用于在潜在错误语句处识别变量的与错误相关的属性;确定模块340用于根据在潜在错误语句处识别的变量的与错误相关的属性,确定潜在错误语句为可能错误语句,可能错误语句表示变量的定值语句经由部分路径到达会导致错误的引用语句;获得模块350用于根据可能错误语句获得路径敏感检测的语句输入集;检测模块360用于根据路径敏感检测的语句输入集进行路径敏感检测。
进一步的,确定模块340,具体用于根据在潜在错误语句处识别的变量的与错误相关的属性,确定变量的与错误相关的属性是否为不安全的属性;若变量的与错误相关的属性为不安全的属性,则通过检查当前的控制节点确定当前的控制节点中是否存在检查语句,控制节点为潜在错误语句相对于变量的定值语句的控制流图上的控制节点;若存在检查语句,则查找是否存在特殊控制流;若不存在特殊控制流,则将下一个控制节点作为当前控制节点,并执行通过检查当前的控制节点确定当前的控制节点中是否存在检查语句的步骤;在检查过的所有控制节点中都不存在检查语句和特殊控制流的情况下,确定潜在错误语句为可能错误语句。
进一步的,确定模块340,还用于若不存在检查语句,则将下一个控制节点作为当前控制节点,并执行通过检查当前的控制节点确定当前的控制节点中是否存在检查语句的步骤。
进一步的,确定模块340,还用于若存在特殊控制流,则确定潜在错误语句为一定不错语句。
进一步的,获得模块350,具体用于对可能错误语句进行程序切片,以获得与可能错误语句相关的语句集合,并将与可能错误语句相关的语句集合作为路径敏感检测的语句输入集。
进一步的,获得模块350,具体用于对可能错误语句进行后向切片,以获得语句集合SBT;对变量的定值语句进行前向切片,以获得语句集合SFS;计算SBT与SFS的交集STS,并对变量的定值语句进行后向切片,以获得对变量的定值语句进行后向切片的结果;计算获得的对变量的定值语句进行后向切片的结果与STS的并集,并将对变量的定值语句进行后向切片的结果与STS的并集作为与可能错误语句相关的语句集合,并将与可能错误语句相关的语句集合作为路径敏感检测的语句输入集。
本实施例提供的路径敏感检测装置,通过根据值流错误类型为变量设置初始的与错误相关的属性,沿着定值引用链传播初始的与错误相关的属性,在潜在错误语句处识别变量的与错误相关的属性,根据在潜在错误语句处识别的变量的与错误相关的属性,确定潜在错误语句为可能错误语句,根据可能错误语句获得路径敏感检测的语句输入集,根据路径敏感检测的语句输入集进行路径敏感检测。从而解决现有技术中检测值流错误存在的可扩展性并不理想,无法有效应用于大规模的应用程序的问题,通过减少路径敏感检测的语句输入集降低了检测开销,能够有效应用于大规模的应用程序。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。