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

文档序号:9489381阅读:来源:国知局
一样的。
[0091]如,代码漏洞可以是sql注入,命令注入等等,相应的,可以选择仅记录系统漏洞类型的方式生成系统日志,也可以选择既记录系统漏洞类型又记录解决方案的方式生成系统曰志。
[0092]基于上述实施例中,参阅图2所示,在执行步骤120时,生成可控参数集合的具体过程如下:
[0093]步骤1200:获取body内容。
[0094]body是语法树中的结构,可以理解为在对危险函数的外层函数进行排查。body之中还可以嵌入body,遍历每个body才能实现数据流的跟踪。
[0095]步骤1201:遍历body内容。
[0096]步骤1202:对body进行结构类分析,如,分析orelse结构、handles结构、tests结构等等。
[0097]步骤1203:判断是否获得赋值语句?若是,则执行步骤1204 ;否则,执行1207。
[0098]在执行步骤1203时,可以理解为在外层函数排查的过程中,检测到了外层函数所包含的参数,那么需要进一步检测这些参数所对应的赋值语句,以便进一步判断这些参数是否可控。
[0099]步骤1204:判断获得的赋值语句是否为预设情况中的一种?若则,则执行步骤1205 ;否则,执行1207。
[0100]执行步骤1204,即是在判断外层函数包含的参数的赋值类型是否为上述五种情况中的一种,具体为:
[0101]1、参数的赋值类型为:指定的属性取值。
[0102]2、参数的赋值类型为:字符串拼接,且被拼接的字符串中包含已认定的可控参数。
[0103]3、参数的赋值类型为:分片符取值。
[0104]4、参数的赋值类型为:列表解析式,且该列表解析式基于至少一个可控因子进行迭代。
[0105]5、参数的赋值类型为:经字符串操作函数处理的返回值,或/和,经未过滤函数处理的返回值。
[0106]若属于上述五种条件中的一种或任意组合,则确定相应的赋值后的参数为可控参数。
[0107]步骤1205:将赋值后的参数归属至可控参数集合中。
[0108]步骤1206:判断当前解析的body是否为空?即判断当前解析的body中是否还有尚未完成的内容,若是,则执行步骤1207 ;否则,返回步骤1201。
[0109]步骤1207:判断待解析的body结构、orelse结构、handles结构、tests结构等等是否为空?若是,则结束当前流程;否则,返回步骤1200。
[0110]上述流程即是通过递归方式遍历语法树结构,跟踪危险函数的外层函数所包含的参数的赋值类型,如果赋值类型属于上述五种情况中的一种且输入的参数是可控的,则认为赋值后的变量还是可控的,这样,就得到了整个外层函数的可控变量,从而组成可控参数隹a
口 Ο
[0111]那么,再判断危险函数包含的参数是否归属于上述可控参数集合,即可以获知危险函数包含的参数是否为可控参数。
[0112]用以解决现有技术下提高python代码漏洞检测的精准度。
[0113]基于上述实施例,参阅图3所示,本发明实施例中,用于检测python漏洞的装置包括提取单元30、处理单元31、匹配单元32和确定单元33,其中,
[0114]提取单元30,用于对待检测的python代码进行语法解析,生成相应的语法树,以及对语法树进行数据流分析,提取出使用的危险函数;
[0115]处理单元31,用于对提取出的危险函数的外层函数所包含的参数进行跟踪,将赋值类型满足预设传递规则的参数确定为可控参数,组成可控参数集合;
[0116]匹配单元32,用于将获得的危险函数中包含的参数与可控参数集合中的每一个可控参数进行匹配,若匹配成功,则确定危险函数中包含的参数为可控参数;
[0117]确定单元33,用于根据包含有可控参数的危险函数确定相应的代码漏洞。
[0118]较佳的,提取单元30进一步用于:
[0119]在对python代码进行语法解析的过程中,根据指示删除非必要代码.
[0120]较佳的,处理单元31进一步用于,
[0121]在进行数据流跟踪的过程中,基于输入import机制,从数据流以及python代码的环境变量中获取引入的第三方模块或/和第三方函数,并对第三方模块或/和第三方函数进行解析;
[0122]根据解析结果判断所述第三方模块或/和第三方函数包含的参数在整个函数处理过程是否发生改变,将未发生改变的参数归属于可控参数集合中。
[0123]较佳的,将赋值类型满足预设传递规则的参数确定为可控参数时,处理单元31具体用于:
[0124]将赋值类型满足以下规则中的一种或任意组合的参数确定为可控参数:
[0125]参数的赋值类型为:指定的属性取值;
[0126]参数的赋值类型为:字符串拼接,且被拼接的字符串中包含已认定的可控参数;
[0127]参数的赋值类型为:分片符取值;
[0128]参数的赋值类型为:列表解析式,且列表解析式基于至少一个可控因子进行迭代,或者,且列表解析式为包含有可控因子的列表相加。
[0129]参数为赋值类型为:经字符串操作函数处理的返回值,或/和,经未过滤函数处理的返回值。
[0130]较佳的,处理单元31进一步用于:
[0131]对语法树进行类分析,在分析过程中将各个类的初始化参数归属于可控参数集合,以及对各个类的变量赋值进行跟踪,若任一危险函数中使用了类的变量,则确定任一危险函数包含有可控参数。
[0132]较佳的,确定任一危险函数中包含的参数为可控参数后,在根据任一危险函数确定相应的代码漏洞之前,处理单元31进一步用于:
[0133]采用用户预设的安全函数或者python自带的安全函数对任一危险函数包含的可控参数进行处理,确定经处理后的可控参数仍可控时,最终判定任一危险函数为真正的危险函数。
[0134]本发明实施例中,基于待检测python代码生成相应的语法树,提取出危险函数;再对危险函数的外层函数所包含的参数进行跟踪,将赋值类型满足预设传递规则的参数确定为可控参数,组成可控参数集合,以及确定危险函数中包含的参数归属于上述可控参数组合时,确定危险函数中包含有可控参数;最后,再根据包含有可控参数的危险函数确定相应的代码漏洞。
[0135]这样,基于语法树对python进行语法分析,避免了代码中的复杂内容对分析过程所造成的干扰(如,“换行”、“注释”所来来的干扰),能够在语法树中识别出参数,并且能根据预设传递规则判断参数在流动的过程中是否可控,如果在整个解析范围内可控,则认定为可控参数,若识别出的危险函数中存在可控参数,则认为相应的一段代码存在漏洞,这样,大大提高了 python代码漏洞检测的准确性,解决了 python代码语法灵活维护困难的问题,由于是自动化的跟踪参数,免去了人工单步跟踪参数,降低了操作复杂度。
[0136]另一方面,由于基于import机制引入的第三方模块或第三方函数也进行了跟踪,因此,免去了人工跳转到其他文件审查代码,降低了操作复杂度,从而在漏洞报告中可以直接报告了代码位置及产生漏洞的原因,使漏洞报告无需修改就可使用。
[0137]本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
[0138]本发明是参照根
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1