一种检测python代码漏洞的方法及装置的制造方法

文档序号:9489381阅读:383来源:国知局
一种检测python代码漏洞的方法及装置的制造方法
【技术领域】
[0001]本发明涉及网络安全领域,特别涉及一种检测python代码漏洞的方法及装置。
【背景技术】
[0002]检测python代码漏洞是系统运维的必备手段,准确检测出python代码漏洞,可以有效防止非法攻击,从而保障系统的平稳运行。
[0003]现有技术下,检测python代码漏洞都是通过正则匹配方式实现的,即使用字符串来描述、匹配一系列符合某个句法规则的字符串。当通过正则匹配方式匹配了危险函数之后则确定选取到危险代码,即检测到python代码漏洞。
[0004]然而,并非每一种危险函数都对应着代码漏洞,部分危险函数包含的参数属于不可控参数,不存在危险性,而采用正则匹配方式仅仅是对代码做粗暴的分析,如果代码中存在“换行”,“注释”等规则难以描述的内容,则无法对其中的参数进行跟踪,无法确认当前参数是否可控。
[0005]显然,通过正则匹配方式进行python代码漏洞检测,误报率非常高,在很大程度上也浪费了系统资源。

【发明内容】

[0006]本发明实施例提供一种检测代码漏洞的方法及装置,用以解决现有技术下提高python代码漏洞检测的精准度。
[0007]本发明实施例提供的具体技术方案如下:
[0008]—种检测python代码漏洞的方法,包括:
[0009]对待检测的python代码进行语法解析,生成相应的语法树,以及对语法树进行数据流分析,提取出使用的危险函数;
[0010]对提取出的危险函数的外层函数所包含的参数进行跟踪,将赋值类型满足预设传递规则的参数确定为可控参数,组成可控参数集合;
[0011]将获得的危险函数中包含的参数与可控参数集合中的每一个可控参数进行匹配,若匹配成功,则确定危险函数中包含的参数为可控参数;
[0012]根据包含有可控参数的危险函数确定相应的代码漏洞。
[0013]这样,基于语法树对python代码进行语法分析,避免了代码中的复杂内容对分析过程所造成的干扰(如,“换行”、“注释”所来来的干扰),能够在语法树中识别出参数,并且能根据预设传递规则判断参数在流动的过程中是否可控,如果在整个解析范围内可控,则认定为可控参数,若识别出的危险函数中存在可控参数,则认为相应的一段代码存在漏洞,这样,大大提高了 python代码漏洞检测的准确性,解决了 python代码语法灵活正则表达式维护困难的问题,由于是自动化的跟踪参数,免去了人工单步跟踪参数,降低了操作复杂度。
[0014]较佳的,进一步包括:
[0015]在对python代码进行语法解析的过程中,根据指示删除非必要代码。
[0016]较佳的,进一步包括,
[0017]在进行数据流跟踪的过程中,基于输入import机制,从数据流以及python代码的环境变量中获取引入的第三方模块或/和第三方函数,并对所述第三方模块或/和第三方函数进行解析;
[0018]根据解析结果判断所述第三方模块或/和第三方函数包含的参数在整个函数处理过程是否发生改变,将未发生改变的参数归属于可控参数集合中。
[0019]较佳的,将赋值类型满足预设传递规则的参数确定为可控参数,具体包括:
[0020]将赋值类型满足以下规则中的一种或任意组合的参数确定为可控参数:
[0021]参数的赋值类型为:指定的属性取值;
[0022]参数的赋值类型为:字符串拼接,且被拼接的字符串中包含已认定的可控参数;
[0023]参数的赋值类型为:分片符取值;
[0024]参数的赋值类型为:列表解析式,且所述列表解析式基于至少一个可控因子进行迭代,或者,且所述列表解析式为包含有可控因子的列表相加;
[0025]参数为赋值类型为:经字符串操作函数处理的返回值,或/和,经未过滤函数处理的返回值。
[0026]较佳的,进一步包括:
[0027]对所述语法树进行类分析,在分析过程中将各个类的初始化参数归属于所述可控参数集合,以及对各个类的变量赋值进行跟踪,若任一危险函数中使用了类的变量,则确定所述任一危险函数包含有可控参数。
[0028]较佳的,确定任一危险函数中包含的参数为可控参数后,在根据所述任一危险函数确定相应的代码漏洞之前,进一步包括:
[0029]采用用户预设的安全函数或者python自带的安全函数对所述任一危险函数包含的可控参数进行处理,确定经处理后的可控参数仍可控时,最终判定所述任一危险函数为真正的危险函数。
[0030]一种检测python代码漏洞的装置,包括:
[0031]提取单元,用于对待检测的python代码进行语法解析,生成相应的语法树,以及对语法树进行数据流分析,提取出使用的危险函数;
[0032]处理单元,用于对提取出的危险函数的外层函数所包含的参数进行跟踪,将赋值类型满足预设传递规则的参数确定为可控参数,组成可控参数集合;
[0033]匹配单元,用于将获得的危险函数中包含的参数与可控参数集合中的每一个可控参数进行匹配,若匹配成功,则确定危险函数中包含的参数为可控参数;
[0034]确定单元,用于根据包含有可控参数的危险函数确定相应的代码漏洞。
[0035]这样,基于语法树对python进行语法分析,避免了代码中的复杂内容对分析过程所造成的干扰(如,“换行”、“注释”所来来的干扰),能够在语法树中识别出参数,并且能根据预设传递规则判断参数在流动的过程中是否可控,如果在整个解析范围内可控,则认定为可控参数,若识别出的危险函数中存在可控参数,则认为相应的一段代码存在漏洞,这样,大大提高了 python代码漏洞检测的准确性,解决了 python代码语法灵活维护困难的问题,由于是自动化的跟踪参数,免去了人工单步跟踪参数,降低了操作复杂度。
[0036]较佳的,所述提取单元进一步用于:
[0037]在对python代码进行语法解析的过程中,根据指示删除非必要代码。
[0038]较佳的,所述处理单元进一步用于,
[0039]在进行数据流跟踪的过程中,基于输入import机制,从数据流以及python代码的环境变量中获取引入的第三方模块或/和第三方函数,并对所述第三方模块或/和第三方函数进行解析;
[0040]根据解析结果判断所述第三方模块或/和第三方函数包含的参数在整个函数处理过程是否发生改变,将未发生改变的参数归属于可控参数集合中。
[0041]较佳的,将赋值类型满足预设传递规则的参数确定为可控参数时,所述处理单元具体用于:
[0042]将赋值类型满足以下规则中的一种或任意组合的参数确定为可控参数:
[0043]参数的赋值类型为:指定的属性取值;
[0044]参数的赋值类型为:字符串拼接,且被拼接的字符串中包含已认定的可控参数;
[0045]参数的赋值类型为:分片符取值;
[0046]参数的赋值类型为:列表解析式,且所述列表解析式基于至少一个可控因子进行迭代,或者,且所述列表解析式为包含有可控因子的列表相加;
[0047]参数为赋值类型为:经字符串操作函数处理的返回值,或/和,经未过滤函数处理的返回值。
[0048]较佳的,所述处理单元进一步用于:
[0049]对所述语法树进行类分析,在分析过程中将各个类的初始化参数归属于所述可控参数集合,以及对各个类的变量赋值进行跟踪,若任一危险函数中使用了类的变量,则确定所述任一危险函数包含有可控参数。
[0050]较佳的,确定任一危险函数中包含的参数为可控参数后,在根据所述
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1