应用软件安全漏洞检测方法和系统与流程

文档序号:11582521阅读:237来源:国知局
应用软件安全漏洞检测方法和系统与流程

本发明涉及信息安全技术领域,尤其涉及一种应用软件安全漏洞检测方法和系统。



背景技术:

现有应用软件漏洞静态检测方案通常是基于androidsmali(安卓编译器)或者java(计算机编程语言)源码的规则扫描,通过采用预定义的正则或字符串特征的匹配检查方式,判断应用软件的代码模式是否存在问题。

由于这种静态扫描未关联程序上下文数据,仅根据既定的规则检测,容易存在大量安全隐患的误报;并且,androidsmali代码的语言粒度较细,一个语义需要多条语句表示,在进行应用软件的安全漏洞检测时,工作量大,浪费资源;而java高级语言代码的粒度偏粗,单一语句可能包含隐藏的语义,在进行应用软件的安全漏洞检测时,检测的粒度也相应较粗,存在安全隐患漏报。

可见,现有的应用软件安全漏洞检测方式受代码语言影响,检测效率较低。



技术实现要素:

本发明的主要目的在于提供一种应用软件安全漏洞检测方法和系统,旨在解决应用软件代码语言影响安全漏洞检测效率的技术问题。

为实现上述目的,本发明提供一种应用软件安全漏洞检测方法,所述应用软件安全漏洞检测方法包括以下步骤:

将应用软件编译为预设的中间语言代码文本;

根据所述代码文本,获取所述应用软件的数据关联结构;

根据所述应用软件中敏感调用点的变量参数及所述数据关联结构,回溯查找所述敏感调用点对应的外部输入点;

若成功查找到所述敏感调用点对应的外部输入点,则确定所述外部输入点为所述应用软件的安全漏洞。

优选地,所述根据所述应用软件中敏感调用点的变量参数及所述数据关联结构,回溯查找所述敏感调用点对应的外部输入点的步骤包括:

根据所述变量参数及所述数据关联结构,回溯查找输出所述变量参数的前驱调用点;

若所述前驱调用点是基于函数调用输出的返回值,则再次回溯查找返回所述前驱调用点实参的前驱调用点,确定源节点;

若所述源节点为外部输入点,则确定所述外部输入点为所述敏感调用点对应的外部输入点;

若所述源节点为常量赋值,则停止回溯,确定未找到所述敏感调用点对应的外部输入点。

优选地,所述根据所述应用软件中敏感调用点的变量参数及所述数据关联结构,回溯查找所述敏感调用点对应的外部输入点的步骤,还包括:

若找到多个输出所述变量参数且执行顺序先于所述敏感调用点的调用点,则确定所述多个调用点中执行顺序最接所述近敏感调用点的为所述前驱调用点。

优选地,所述根据所述应用软件中敏感调用点的变量参数及所述数据关联结构,回溯查找所述敏感调用点对应的外部输入点的步骤,还包括:

若所述前驱调用点将所述变量参数作为赋值输出,则根据所述数据关联结构获取所述变量参数对应的右值;

若所述右值为外部输入点输入的变量,则确定所述外部输入点为所述敏感调用点对应的外部输入点;

若所述右值为常量赋值,则停止回溯,确定未找到所述敏感调用点对应的外部输入点。

优选地,所述确定所述外部输入点为所述应用软件的安全漏洞的步骤之后,还包括:

确定回溯找到所述外部输入点的路径为危险路径。

此外,为实现上述目的,本发明还提供一种应用软件安全漏洞检测系统,所述应用软件安全漏洞检测系统包括:

编译模块,用于将应用软件编译为预设的中间语言代码文本;

关联模块,用于根据所述代码文本,获取所述应用软件的数据关联结构;

回溯模块,用于根据所述应用软件中敏感调用点的变量参数及所述数据关联结构,回溯查找所述敏感调用点对应的外部输入点;

确定模块,用于若成功查找到所述敏感调用点对应的外部输入点,则确定所述外部输入点为所述应用软件的安全漏洞。

优选地,所述回溯模块还用于,

根据所述变量参数及所述数据关联结构,回溯查找输出所述变量参数的前驱调用点;若所述前驱调用点是基于函数调用输出的返回值,则再次回溯查找返回所述前驱调用点实参的前驱调用点,确定源节点;若所述源节点为外部输入点,则确定所述外部输入点为所述敏感调用点对应的外部输入点;若所述源节点为常量赋值,则停止回溯,确定未找到所述敏感调用点对应的外部输入点。

优选地,所述回溯模块还用于,

若找到多个输出所述变量参数且执行顺序先于所述敏感调用点的调用点,则确定所述多个调用点中执行顺序最接所述近敏感调用点的为所述前驱调用点。

优选地,所述回溯模块还用于,

若所述前驱调用点将所述变量参数作为赋值输出,则根据所述数据关联结构获取所述变量参数对应的右值;若所述右值为外部输入点输入的变量,则确定所述外部输入点为所述敏感调用点对应的外部输入点;若所述右值为常量赋值,则停止回溯,确定未找到所述敏感调用点对应的外部输入点。

优选地,所述确定模块还用于,

确定回溯找到所述外部输入点的路径为危险路径。

本发明实施例提出的一种应用软件安全漏洞检测方法和系统,通过将待检测应用软件编译为预设的中间语言代码文本,转换后的应用软件代码一条语句包含一条语义,不会产生歧义,适合做安全漏洞检测;然后,根据应用软件的中间语言代码文本,获取应用软件的数据关联结构,从而得到应用软件中各调用点的函数及参数具体信息,以供进行数据回溯;然后,根据应用软件中敏感调用点的变量参数及数据关联结构,回溯查找敏感调用点对应的外部输入点;若成功查找到敏感调用点对应的外部输入点,则确定此找到的外部输入点为应用软件的安全漏洞,会给应用软件带来风险。本发用针对基于androidsmali(安卓编译器)或者java(计算机编程语言)的规则匹配检测方法存在的误报问题,采用中间语言的应用软件程序代码进行数据流分析,既可避免单一程序代码特征的粗糙检查,又能够通过数据关联结构,关联应用软件上下文的数据传递进行数据回溯、漏洞检测,避免了漏洞的误报和漏报;另一方面,本发明基于折中的中间语言的分析规避了smali和java语言的缺点,降低了安全漏洞检测的工作量,使得漏洞检测的结果更准确。由此,本发明解决了现有的应用软件代码语言给安全漏洞检测带来的各项困扰,大大提升了应用软件安全漏洞检测的效率。

附图说明

图1为本发明应用软件安全漏洞检测方法第一实施例的流程示意图;

图2为图1中根据所述应用软件中敏感调用点的变量参数及所述数据关联结构,回溯查找所述敏感调用点对应的外部输入点的步骤的细化流程示意图;

图3为图1中根据所述应用软件中敏感调用点的变量参数及所述数据关联结构,回溯查找所述敏感调用点对应的外部输入点的步骤的细化流程示意图;

图4为本发明应用软件安全漏洞检测方法第二实施例的流程示意图;

图5为本发明应用软件安全漏洞检测方法第三实施例的流程示意图;

图6为本发明应用软件安全漏洞检测系统第一实施例、第二实施例、第三实施例的功能模块示意图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

参照图1,本发明应用软件安全漏洞检测方法第一实施例提供一种应用软件安全漏洞检测方法,所述应用软件安全漏洞检测方法包括:

步骤s10、将应用软件编译为预设的中间语言代码文本。

本发明通过将待检测应用软件编译为中间语言文本,得到的应用软件代码一条语句包含一条语义,不会产生歧义,而且语言力度相对高级语言较细,相对低级语言较粗,适合进行静态的应用软件安全漏洞检测;而且,本发明综合应用软件的数据关联结构,结合程序上下文的语言传递,避免单一代码特征的粗糙检测造成的漏洞的误报、漏报,并且提高了安全漏洞检测效率。

具体的,作为一种实施方式,首先,通过编译器将待检测应用软件的程序代码编译为中间语言,得到编译后的应用软件代码文本。中间语言也称为intermediatelanguage,简称il。

基于中间语言的应用软件代码可视为节点树,应用软件中的类、方法为节点树的外围节点,类、方法中的变量参数等为外围节点的子节点。可以看出,转换为中间语言后,应用软件的数据结构清楚明了,便于进行数据回溯。

步骤s20、根据所述代码文本,获取所述应用软件的数据关联结构。

在得到应用软件的中间语言代码文本后,根据代码文本,提取用软件的数据关联结构。

得到的数据关联结构包括各调用点方法或类的类型、成员变量、函数、赋值、执行顺序等。为便于使用,可使用数据关联结构表记载上述参数。

步骤s30、根据所述应用软件中敏感调用点的变量参数及所述数据关联结构,回溯查找所述敏感调用点对应的外部输入点。

在得到应用软件的数据关联结构后,根据应用软件的敏感调用点中的变量参数,通过数据关联结构查找敏感调用点对应的外部输入点。其中,敏感调用点是应用软件中的关键调用点,或是安全性要求要高的调用点,可以由测试人员人为确定需检测的敏感调用点。

具体的,首先需要确定敏感调用点的变量参数,例如,敏感调用点使用形参执行函数输出返回值,则敏感调用点的形参即为变量参数,需要追踪传递给敏感调用点、对形参赋值的实参。

然后,根据数据关联结构中其他调用点的信息,进行数据回溯,查找此变量参数数值的来源,以获取影响此变量参数的值的调用点,直至查找到的能够影响此变量参数的值的调用点为源节点,例如常量赋值、外部输入点等时,停止数据回溯。

需要说明的是,源节点的参数不再受应用软件内部其他调用点的影响。

若能够影响此变量参数的值的调用点的源节点为外部输入点,则确定此外部输入点为敏感调用点对应的外部输入点,此外部输入点输入的数据能够影响、控制敏感调用点,给应用软件造成风险。

作为一种实施方式,参照图2,所述步骤s30包括:

步骤s31、根据所述变量参数及所述数据关联结构,回溯查找输出所述变量参数的前驱调用点;

步骤s32、若所述前驱调用点是基于函数调用输出的返回值,则再次回溯查找返回所述前驱调用点实参的前驱调用点,确定源节点;

步骤s33、若所述源节点为外部输入点,则确定所述外部输入点为所述敏感调用点对应的外部输入点;

步骤s34、若所述源节点为常量赋值,则停止回溯,确定未找到所述敏感调用点对应的外部输入点。

例如,主函数调用当前敏感调用点时,传递给敏感调用点的参数为a,敏感调用点根据a执行函数调用后会对应输出返回值,则确定敏感调用点的形参为变量参数。

然后,根据数据关联结构中记载的各调用点的信息,查找应用软件中返回或输出a的前驱调用点,也即查找将a作为返回值输出且执行顺序早于敏感调用点的调用点。

需要说明的是,前驱调用点在应用软件的各调用点执行顺序中,早于对比调用点执行函数调用。例如上述“查找输出a的前驱调用点”中,前驱调用点的函数执行顺序应当早于当前敏感调用点。

若前驱调用点1输出的返回值为a,则判断前驱调用点1输出的参数是否为外部输入点输入的变量。

若前驱调用点1输出的参数是外部输入点输入的变量,也即a是由前驱调用点1根据外部输入点输入的变量对应输出的,则可以确认此外部输入点为数据流的源节点,也就是当前敏感调用点对应的外部输入点。

若前驱调用点1是根据输入的实参b,执行函数调用运算得到a,则根据b继续查找返回b的前驱调用点,也即查找将b作为返回值输出,且执行顺序早于前驱调用点1的调用点,以此类推,直至找到数据流的源节点。

若源节点为外部输入点,则可以确定找到源节点为敏感调用点对应的外部输入点。

若源节点为常量赋值,则可以确定未回溯到外部输入点,当前敏感调用点安全,停止回溯。

进一步地,作为另一种实施方式,参照图3,所述步骤s30还包括:

步骤s35、若所述前驱调用点将所述变量参数作为赋值输出,则根据所述数据关联结构获取所述变量参数对应的右值;

步骤s36、若所述右值为外部输入点输入的变量,则确定所述外部输入点为所述敏感调用点对应的外部输入点;

步骤s37、若所述右值为常量赋值,则停止回溯,确定未找到所述敏感调用点对应的外部输入点。

若敏感调用点的变量参数值是由前驱参数的赋值决定的,也即传递给敏感调用点、对变量参数进行赋值的参数是前驱调用点的赋值,则根据数据关联结构回溯对应的右值,也即对传递给敏感调用点的变量参数进行赋值的右值。

若此右值是外部输入点输入的变量,也即前驱调用点是根据外部输入点输入的变量对输出的参数进行赋值的,则可以确定此外部输入点为敏感调用点对应的外部输入点。

若右值为常量赋值,则可以确定当前数据链安全,未回溯到外部输入点,停止回溯。

由此,实现了对函数调用和赋值的数据追踪,保障了回溯调用点的完整性和准确性。

步骤s40、若成功查找到所述敏感调用点对应的外部输入点,则确定所述外部输入点为所述应用软件的安全漏洞。

若成功回溯数据找到敏感调用点对应的外部输入点,则找到的外部输入点可能会被利用输入数据,调用此敏感调用点,给应用软件带来安全隐患。

由此,可以确定此外部输入点为应用软件的安全漏洞,进行漏洞上报。

在本实施例中,首先将待检测应用软件编译为预设的中间语言代码文本,转换后的应用软件代码一条语句包含一条语义,不会产生歧义,适合做安全漏洞检测;然后,根据应用软件的中间语言代码文本,获取应用软件的数据关联结构,从而得到应用软件中各调用点的函数及参数具体信息,以供进行数据回溯;然后,根据应用软件中敏感调用点的变量参数及数据关联结构,回溯查找敏感调用点对应的外部输入点;若成功查找到敏感调用点对应的外部输入点,则确定此找到的外部输入点为应用软件的安全漏洞,会给应用软件带来风险。本实施例中针对基于androidsmali(安卓编译器)或者java(计算机编程语言)的规则匹配检测方法存在的误报问题,采用中间语言的应用软件程序代码进行数据流分析,既可避免单一程序代码特征的粗糙检查,又能够通过数据关联结构,关联应用软件上下文的数据传递进行数据回溯、漏洞检测,避免了漏洞的误报和漏报;另一方面,本实施例基于折中的中间语言的分析规避了smali和java语言的缺点,降低了安全漏洞检测的工作量,使得漏洞检测的结果更准确。由此,本实施例解决了现有的应用软件代码语言给安全漏洞检测带来的各项困扰,大大提升了应用软件安全漏洞检测的效率。

进一步地,参照图4,本发明应用软件安全漏洞检测方法第二实施例提供一种应用软件安全漏洞检测方法,基于上述本发明应用软件安全漏洞检测方法第一实施例,所述步骤s30还包括:

步骤s38、若找到多个输出所述变量参数且执行顺序先于所述敏感调用点的调用点,则确定所述多个调用点中执行顺序最接所述近敏感调用点的为所述前驱调用点。

在根据变量参数及数据关联结构进行数据回溯时,可能会遇到多个调用点输出参数均为此变量参数,此时,首先根据各调用点的执行顺序,筛选出执行顺序先于敏感调用点的调用点,也可称为执行顺序早于敏感调用点的调用点。

若筛选后,得到的调用点只有一个,则就可以确定此调用点为当前查找的、用于进一步进行数据回溯前驱调用点;若筛选后,得到的调用点有多个,则此时根据这多个调用点的执行顺序,确定执行顺序最晚、但早于敏感调用点的调用点为当前查找的、用于进一步进行数据回溯前驱调用点,也即确定执行顺序最接近敏感调用点的为前驱调用点。

例如,基于上述本发明应用软件安全漏洞检测方法第一实施例,若输出变量参数a的调用点包括调用点2、调用点3,则获取调用点2、调用点3的执行顺序。若调用点2先于调用点3执行,敏感调用点晚于调用点3执行,则调用点3的执行顺序更加接近敏感调用点,确定调用点3为前驱调用点;若调用点3先于调用点2执行,敏感调用点晚于调用点2执行,则调用点2的执行顺序更加接近敏感调用点,确定调用点2为前驱调用点。

由此,在有多个调用点输出变量参数时,可以唯一确定前驱调用点,实现了通过调用点时序,进行数据回溯和外部输入点的查找。

同理,在后续回溯数据时,若遇到多个调用点输出的参数均为当前回溯的参数、无法确定前驱调用点的情况时,选取执行顺序早于当前调用点、且最接近当前调用点的为前驱调用点,继续进行数据回溯。

在本实施例中,若找到多个输出变量参数且执行顺序先于敏感调用点的调用点,则确定多个调用点中执行顺序最接近敏感调用点的为前驱调用点。本实施例解决了在数据回溯过程中,遇到多个调用点输出所需要回溯的变量参数时无法确定前驱调用点的问题,使得数据回溯能够顺利进行。

进一步地,参照图5,本发明应用软件安全漏洞检测方法第三实施例提供一种应用软件安全漏洞检测方法,基于上述本发明应用软件安全漏洞检测方法第一实施例或第二实施例(本实施例以上述本发明应用软件安全漏洞检测方法第一实施例为例),所述步骤s40之后,还包括:

步骤s50、确定回溯找到所述外部输入点的路径为危险路径。

当成功找到敏感调用点对应的外部输入点时,将找到外部输入点的路径信息提取出来,得到从外部输入点输入的污点数据流向敏感调用点的路径,以及路径上被感染的各调用点。

然后,标记此路径为危险路径,便于研发人员了解敏感调用点的具体风险,以提高应用软件的完全性。

在本实施例中,确定回溯找到敏感调用点对应外部输入点的路径为危险路径,以便于研发人员进行进一步地漏洞原因分析、提升应用软件的安全性。

参照图6,本发明应用软件安全漏洞检测系统第一实施例提供一种应用软件安全漏洞检测系统,所述应用软件安全漏洞检测系统包括:

编译模块10,用于将应用软件编译为预设的中间语言代码文本。

本发明通过将待检测应用软件编译为中间语言文本,得到的应用软件代码一条语句包含一条语义,不会产生歧义,而且语言力度相对高级语言较细,相对低级语言较粗,适合进行静态的应用软件安全漏洞检测;而且,本发明综合应用软件的数据关联结构,结合程序上下文的语言传递,避免单一代码特征的粗糙检测造成的漏洞的误报、漏报,并且提高了安全漏洞检测效率。

具体的,作为一种实施方式,首先,编译模块10通过编译器将待检测应用软件的程序代码编译为中间语言,得到编译后的应用软件代码文本。中间语言也称为intermediatelanguage,简称il。

基于中间语言的应用软件代码可视为节点树,应用软件中的类、方法为节点树的外围节点,类、方法中的变量参数等为外围节点的子节点。可以看出,转换为中间语言后,应用软件的数据结构清楚明了,便于进行数据回溯。

关联模块20,用于根据所述代码文本,获取所述应用软件的数据关联结构。

在得到应用软件的中间语言代码文本后,关联模块20根据代码文本,提取用软件的数据关联结构。

得到的数据关联结构包括各调用点方法或类的类型、成员变量、函数、赋值、执行顺序等。为便于使用,关联模块20可使用数据关联结构表记载上述参数。

回溯模块30,用于根据所述应用软件中敏感调用点的变量参数及所述数据关联结构,回溯查找所述敏感调用点对应的外部输入点。

在得到应用软件的数据关联结构后,回溯模块30根据应用软件的敏感调用点中的变量参数,通过数据关联结构查找敏感调用点对应的外部输入点。其中,敏感调用点是应用软件中的关键调用点,或是安全性要求要高的调用点,可以由测试人员人为确定需检测的敏感调用点。

具体的,回溯模块30首先需要确定敏感调用点的变量参数,例如,敏感调用点使用形参执行函数输出返回值,则敏感调用点的形参即为变量参数,需要追踪传递给敏感调用点、对形参赋值的实参。

然后,回溯模块30根据数据关联结构中其他调用点的信息,进行数据回溯,查找此变量参数数值的来源,以获取影响此变量参数的值的调用点,直至查找到的能够影响此变量参数的值的调用点为源节点,例如常量赋值、外部输入点等时,停止数据回溯。

需要说明的是,源节点的参数不再受应用软件内部其他调用点的影响。

若能够影响此变量参数的值的调用点的源节点为外部输入点,则回溯模块30确定此外部输入点为敏感调用点对应的外部输入点,此外部输入点输入的数据能够影响、控制敏感调用点,给应用软件造成风险。

作为一种实施方式,所述回溯模块30还用于,

根据所述变量参数及所述数据关联结构,回溯查找输出所述变量参数的前驱调用点;若所述前驱调用点是基于函数调用输出的返回值,则再次回溯查找返回所述前驱调用点实参的前驱调用点,确定源节点;若所述源节点为外部输入点,则确定所述外部输入点为所述敏感调用点对应的外部输入点;、若所述源节点为常量赋值,则停止回溯,确定未找到所述敏感调用点对应的外部输入点。

例如,主函数调用当前敏感调用点时,传递给敏感调用点的参数为a,敏感调用点根据a执行函数调用后会对应输出返回值,则回溯模块30确定敏感调用点的形参为变量参数。

然后,回溯模块30根据数据关联结构中记载的各调用点的信息,查找应用软件中返回或输出a的前驱调用点,也即查找将a作为返回值输出且执行顺序早于敏感调用点的调用点。

需要说明的是,前驱调用点在应用软件的各调用点执行顺序中,早于对比调用点执行函数调用。例如上述“查找输出a的前驱调用点”中,前驱调用点的函数执行顺序应当早于当前敏感调用点。

若前驱调用点1输出的返回值为a,则回溯模块30判断前驱调用点1输出的参数是否为外部输入点输入的变量。

若前驱调用点1输出的参数是外部输入点输入的变量,也即a是由前驱调用点1根据外部输入点输入的变量对应输出的,则回溯模块30可以确认此外部输入点为数据流的源节点,也就是当前敏感调用点对应的外部输入点。

若前驱调用点1是根据输入的实参b,执行函数调用运算得到a,则回溯模块30根据b继续查找返回b的前驱调用点,也即查找将b作为返回值输出,且执行顺序早于前驱调用点1的调用点,以此类推,直至找到数据流的源节点。

若源节点为外部输入点,则回溯模块30可以确定找到源节点为敏感调用点对应的外部输入点。

若源节点为常量赋值,则回溯模块30可以确定未回溯到外部输入点,当前敏感调用点安全,停止回溯。

进一步地,作为另一种实施方式,所述回溯模块30还用于,

若所述前驱调用点将所述变量参数作为赋值输出,则根据所述数据关联结构获取所述变量参数对应的右值;若所述右值为外部输入点输入的变量,则确定所述外部输入点为所述敏感调用点对应的外部输入点;若所述右值为常量赋值,则停止回溯,确定未找到所述敏感调用点对应的外部输入点。

若敏感调用点的变量参数值是由前驱参数的赋值决定的,也即传递给敏感调用点、对变量参数进行赋值的参数是前驱调用点的赋值,则回溯模块30根据数据关联结构回溯对应的右值,也即对传递给敏感调用点的变量参数进行赋值的右值。

若此右值是外部输入点输入的变量,也即前驱调用点是根据外部输入点输入的变量对输出的参数进行赋值的,则回溯模块30可以确定此外部输入点为敏感调用点对应的外部输入点。

若右值为常量赋值,则回溯模块30可以确定当前数据链安全,未回溯到外部输入点,停止回溯。

由此,实现了对函数调用和赋值的数据追踪,保障了回溯调用点的完整性和准确性。

确定模块40,用于若成功查找到所述敏感调用点对应的外部输入点,则确定所述外部输入点为所述应用软件的安全漏洞。

若成功回溯数据找到敏感调用点对应的外部输入点,则找到的外部输入点可能会被利用输入数据,调用此敏感调用点,给应用软件带来安全隐患。

由此,确定模块40可以确定此外部输入点为当前应用软件的安全漏洞,进行漏洞上报。

在本实施例中,首先编译模块10将待检测应用软件编译为预设的中间语言代码文本,转换后的应用软件代码一条语句包含一条语义,不会产生歧义,适合做安全漏洞检测;然后,关联模块20根据应用软件的中间语言代码文本,获取应用软件的数据关联结构,从而得到应用软件中各调用点的函数及参数具体信息,以供进行数据回溯;然后,回溯模块30根据应用软件中敏感调用点的变量参数及数据关联结构,回溯查找敏感调用点对应的外部输入点;若成功查找到敏感调用点对应的外部输入点,则确定模块确定此找到的外部输入点为应用软件的安全漏洞,会给应用软件带来风险。本实施例中针对基于androidsmali(安卓编译器)或者java(计算机编程语言)的规则匹配检测方法存在的误报问题,采用中间语言的应用软件程序代码进行数据流分析,既可避免单一程序代码特征的粗糙检查,又能够通过数据关联结构,关联应用软件上下文的数据传递进行数据回溯、漏洞检测,避免了漏洞的误报和漏报;另一方面,本实施例基于折中的中间语言的分析规避了smali和java语言的缺点,降低了安全漏洞检测的工作量,使得漏洞检测的结果更准确。由此,本实施例解决了现有的应用软件代码语言给安全漏洞检测带来的各项困扰,大大提升了应用软件安全漏洞检测的效率。

进一步地,参照图6,本发明应用软件安全漏洞检测系统第二实施例提供一种应用软件安全漏洞检测系统,基于上述本发明应用软件安全漏洞检测系统第一实施例,所述回溯模块30还用于,

若找到多个输出所述变量参数且执行顺序先于所述敏感调用点的调用点,则确定所述多个调用点中执行顺序最接所述近敏感调用点的为所述前驱调用点。

在根据变量参数及数据关联结构进行数据回溯时,可能会遇到多个调用点输出参数均为此变量参数,此时,回溯模块30首先根据各调用点的执行顺序,筛选出执行顺序先于敏感调用点的调用点,也可称为执行顺序早于敏感调用点的调用点。

若筛选后,得到的调用点只有一个,则回溯模块30就可以确定此调用点为当前查找的、用于进一步进行数据回溯前驱调用点;若筛选后,得到的调用点有多个,则此时回溯模块30根据这多个调用点的执行顺序,确定执行顺序最晚、但早于敏感调用点的调用点为当前查找的、用于进一步进行数据回溯前驱调用点,也即确定执行顺序最接近敏感调用点的为前驱调用点。

例如,基于上述本发明应用软件安全漏洞检测方法第一实施例,若输出变量参数a的调用点包括调用点2、调用点3,则获取调用点2、调用点3的执行顺序。若调用点2先于调用点3执行,敏感调用点晚于调用点3执行,则调用点3的执行顺序更加接近敏感调用点,确定调用点3为前驱调用点;若调用点3先于调用点2执行,敏感调用点晚于调用点2执行,则调用点2的执行顺序更加接近敏感调用点,确定调用点2为前驱调用点。

由此,在有多个调用点输出变量参数时,回溯模块30可以唯一确定前驱调用点,实现了通过调用点时序,进行数据回溯和外部输入点的查找。

同理,在后续回溯数据时,若遇到多个调用点输出的参数均为当前回溯的参数、无法确定前驱调用点的情况时,回溯模块30选取执行顺序早于当前调用点、且最接近当前调用点的为前驱调用点,继续进行数据回溯。

在本实施例中,若找到多个输出变量参数且执行顺序先于敏感调用点的调用点,则回溯模块30确定多个调用点中执行顺序最接近敏感调用点的为前驱调用点。本实施例解决了在数据回溯过程中,遇到多个调用点输出所需要回溯的变量参数时无法确定前驱调用点的问题,使得数据回溯能够顺利进行。

进一步地,参照图6,本发明应用软件安全漏洞检测系统第三实施例提供一种应用软件安全漏洞检测系统,基于上述本发明应用软件安全漏洞检测系统第一实施例或第二实施例,所述确定模块40还用于,

确定回溯找到所述外部输入点的路径为危险路径。

当成功找到敏感调用点对应的外部输入点时,确定模块40将找到外部输入点的路径信息提取出来,得到从外部输入点输入的污点数据流向敏感调用点的路径,以及路径上被感染的各调用点。

然后,确定模块40标记此路径为危险路径,便于研发人员了解敏感调用点的具体风险,以提高应用软件的完全性。

在本实施例中,确定模块40确定回溯找到敏感调用点对应外部输入点的路径为危险路径,以便于研发人员进行进一步地漏洞原因分析、提升应用软件的安全性。

以上仅为本发明的可选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

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