书签 分享 收藏 举报 版权申诉 / 14

一种检测PYTHON代码漏洞的方法及装置.pdf

  • 上传人:Y948****062
  • 文档编号:6409178
  • 上传时间:2019-06-07
  • 格式:PDF
  • 页数:14
  • 大小:967.36KB
  • 摘要
    申请专利号:

    CN201510708735.4

    申请日:

    2015.10.27

    公开号:

    CN105243019A

    公开日:

    2016.01.13

    当前法律状态:

    驳回

    有效性:

    无权

    法律详情:

    发明专利申请公布后的驳回IPC(主分类):G06F 11/36申请公布日:20160113|||实质审查的生效IPC(主分类):G06F 11/36申请日:20151027|||公开

    IPC分类号:

    G06F11/36

    主分类号:

    G06F11/36

    申请人:

    北京神州绿盟信息安全科技股份有限公司; 北京神州绿盟科技有限公司

    发明人:

    廖新喜

    地址:

    100089北京市海淀区北洼路4号益泰大厦三层

    优先权:

    专利代理机构:

    北京同达信恒知识产权代理有限公司11291

    代理人:

    朱佳

    PDF完整版下载: PDF下载
    内容摘要

    本发明涉及计算机技术,公开了一种检测python代码漏洞的方法及装置,用于提高python代码漏洞的检测精准度。该方法为:基于待检测python代码生成相应的语法树,提取出危险函数;再对危险函数的外层函数所包含的参数进行跟踪,将赋值类型满足预设传递规则的参数确定为可控参数,组成可控参数集合,以及确定危险函数中包含的参数归属于上述可控参数组合时,确定危险函数中包含有可控参数;最后,再根据包含有可控参数的危险函数确定相应的代码漏洞。这样,大大提高了python代码漏洞检测的准确性,解决了python代码语法灵活维护困难的问题,由于是自动化的跟踪参数,降低了操作复杂度。

    权利要求书

    权利要求书
    1.  一种检测python代码漏洞的方法,其特征在于,包括:
    对待检测的python代码进行语法解析,生成相应的语法树,以及对语法树进行数据流分析,提取出使用的危险函数;
    对提取出的危险函数的外层函数所包含的参数进行跟踪,将赋值类型满足预设传递规则的参数确定为可控参数,组成可控参数集合;
    将获得的危险函数中包含的参数与可控参数集合中的每一个可控参数进行匹配,若匹配成功,则确定危险函数中包含的参数为可控参数;
    根据包含有可控参数的危险函数确定相应的代码漏洞。

    2.  如权利要求1所述的方法,其特征在于,进一步包括:
    在对python代码进行语法解析的过程中,根据指示删除非必要代码。

    3.  如权利要求1所述的方法,其特征在于,进一步包括,
    在进行数据流跟踪的过程中,基于输入import机制,从数据流以及python代码的环境变量中获取引入的第三方模块或/和第三方函数,并对所述第三方模块或/和第三方函数进行解析;
    根据解析结果判断所述第三方模块或/和第三方函数包含的参数在整个函数处理过程是否发生改变,将未发生改变的参数归属于可控参数集合中。

    4.  如权利要求1、2或3任一项所述的方法,其特征在于,将赋值类型满足预设传递规则的参数确定为可控参数,具体包括:
    将赋值类型满足以下规则中的一种或任意组合的参数确定为可控参数:
    参数的赋值类型为:指定的属性取值;
    参数的赋值类型为:字符串拼接,且被拼接的字符串中包含已认定的可控参数;
    参数的赋值类型为:分片符取值;
    参数的赋值类型为:列表解析式,且所述列表解析式基于至少一个可控因子进行迭代,或者,且所述列表解析式为包含有可控因子的列表相加;
    参数为赋值类型为:经字符串操作函数处理的返回值,或/和,经未过滤函数处理的返回值。

    5.  如权利要求4所述的方法,其特征在于,进一步包括:
    对所述语法树进行类分析,在分析过程中将各个类的初始化参数归属于所述可控参数集合,以及对各个类的变量赋值进行跟踪,若任一危险函数中使用了类的变量,则确定所述任一危险函数包含有可控参数。

    6.  如权利要求4所述的方法,其特征在于,确定任一危险函数中包含的参数为可控参数后,在根据所述任一危险函数确定相应的代码漏洞之前,进一步包括:
    采用用户预设的安全函数或者python自带的安全函数对所述任一危险函数包含的可控参数进行处理,确定经处理后的可控参数仍可控时,最终判定所述任一危险函数为真正的危险函数。

    7.  一种检测python代码漏洞的装置,其特征在于,包括:
    提取单元,用于对待检测的python代码进行语法解析,生成相应的语法树,以及对语法树进行数据流分析,提取出使用的危险函数;
    处理单元,用于对提取出的危险函数的外层函数所包含的参数进行跟踪,将赋值类型满足预设传递规则的参数确定为可控参数,组成可控参数集合;
    匹配单元,用于将获得的危险函数中包含的参数与可控参数集合中的每一个可控参数进行匹配,若匹配成功,则确定危险函数中包含的参数为可控参数;
    确定单元,用于根据包含有可控参数的危险函数确定相应的代码漏洞。

    8.  如权利要求7所述的装置,其特征在于,所述提取单元进一步用于:
    在对python代码进行语法解析的过程中,根据指示删除非必要代码。

    9.  如权利要求7所述的装置,其特征在于,所述处理单元进一步用于,
    在进行数据流跟踪的过程中,基于输入import机制,从数据流以及python代码的环境变量中获取引入的第三方模块或/和第三方函数,并对所述第三方模块或/和第三方函数进行解析;
    根据解析结果判断所述第三方模块或/和第三方函数包含的参数在整个函数处理过程是否发生改变,将未发生改变的参数归属于可控参数集合中。

    10.  如权利要求7、8或9任一项所述的装置,其特征在于,将赋值类型满足预设传递规则的参数确定为可控参数时,所述处理单元具体用于:
    将赋值类型满足以下规则中的一种或任意组合的参数确定为可控参数:
    参数的赋值类型为:指定的属性取值;
    参数的赋值类型为:字符串拼接,且被拼接的字符串中包含已认定的可控参数;
    参数的赋值类型为:分片符取值;
    参数的赋值类型为:列表解析式,且所述列表解析式基于至少一个可控因子进行迭代,或者,且所述列表解析式为包含有可控因子的列表相加;
    参数为赋值类型为:经字符串操作函数处理的返回值,或/和,经未过滤函数处理的返回值。

    11.  如权利要求10所述的装置,其特征在于,所述处理单元进一步用于:
    对所述语法树进行类分析,在分析过程中将各个类的初始化参数归属于所述可控参数集合,以及对各个类的变量赋值进行跟踪,若任一危险函数中使用了类的变量,则确定所述任一危险函数包含有可控参数。

    12.  如权利要求10所述的装置,其特征在于,确定任一危险函数中包含的参数为可控参数后,在根据所述任一危险函数确定相应的代码漏洞之前,所述处理单元进一步用于:
    采用用户预设的安全函数或者python自带的安全函数对所述任一危险函数包含的可控参数进行处理,确定经处理后的可控参数仍可控时,最终判定所述任一危险函数为真正的危险函数。

    说明书

    说明书一种检测python代码漏洞的方法及装置
    技术领域
    本发明涉及网络安全领域,特别涉及一种检测python代码漏洞的方法及装置。
    背景技术
    检测python代码漏洞是系统运维的必备手段,准确检测出python代码漏洞,可以有效防止非法攻击,从而保障系统的平稳运行。
    现有技术下,检测python代码漏洞都是通过正则匹配方式实现的,即使用字符串来描述、匹配一系列符合某个句法规则的字符串。当通过正则匹配方式匹配了危险函数之后则确定选取到危险代码,即检测到python代码漏洞。
    然而,并非每一种危险函数都对应着代码漏洞,部分危险函数包含的参数属于不可控参数,不存在危险性,而采用正则匹配方式仅仅是对代码做粗暴的分析,如果代码中存在“换行”,“注释”等规则难以描述的内容,则无法对其中的参数进行跟踪,无法确认当前参数是否可控。
    显然,通过正则匹配方式进行python代码漏洞检测,误报率非常高,在很大程度上也浪费了系统资源。
    发明内容
    本发明实施例提供一种检测代码漏洞的方法及装置,用以解决现有技术下提高python代码漏洞检测的精准度。
    本发明实施例提供的具体技术方案如下:
    一种检测python代码漏洞的方法,包括:
    对待检测的python代码进行语法解析,生成相应的语法树,以及对语法树 进行数据流分析,提取出使用的危险函数;
    对提取出的危险函数的外层函数所包含的参数进行跟踪,将赋值类型满足预设传递规则的参数确定为可控参数,组成可控参数集合;
    将获得的危险函数中包含的参数与可控参数集合中的每一个可控参数进行匹配,若匹配成功,则确定危险函数中包含的参数为可控参数;
    根据包含有可控参数的危险函数确定相应的代码漏洞。
    这样,基于语法树对python代码进行语法分析,避免了代码中的复杂内容对分析过程所造成的干扰(如,“换行”、“注释”所来来的干扰),能够在语法树中识别出参数,并且能根据预设传递规则判断参数在流动的过程中是否可控,如果在整个解析范围内可控,则认定为可控参数,若识别出的危险函数中存在可控参数,则认为相应的一段代码存在漏洞,这样,大大提高了python代码漏洞检测的准确性,解决了python代码语法灵活正则表达式维护困难的问题,由于是自动化的跟踪参数,免去了人工单步跟踪参数,降低了操作复杂度。
    较佳的,进一步包括:
    在对python代码进行语法解析的过程中,根据指示删除非必要代码。
    较佳的,进一步包括,
    在进行数据流跟踪的过程中,基于输入import机制,从数据流以及python代码的环境变量中获取引入的第三方模块或/和第三方函数,并对所述第三方模块或/和第三方函数进行解析;
    根据解析结果判断所述第三方模块或/和第三方函数包含的参数在整个函数处理过程是否发生改变,将未发生改变的参数归属于可控参数集合中。
    较佳的,将赋值类型满足预设传递规则的参数确定为可控参数,具体包括:
    将赋值类型满足以下规则中的一种或任意组合的参数确定为可控参数:
    参数的赋值类型为:指定的属性取值;
    参数的赋值类型为:字符串拼接,且被拼接的字符串中包含已认定的可控参数;
    参数的赋值类型为:分片符取值;
    参数的赋值类型为:列表解析式,且所述列表解析式基于至少一个可控因子进行迭代,或者,且所述列表解析式为包含有可控因子的列表相加;
    参数为赋值类型为:经字符串操作函数处理的返回值,或/和,经未过滤函数处理的返回值。
    较佳的,进一步包括:
    对所述语法树进行类分析,在分析过程中将各个类的初始化参数归属于所述可控参数集合,以及对各个类的变量赋值进行跟踪,若任一危险函数中使用了类的变量,则确定所述任一危险函数包含有可控参数。
    较佳的,确定任一危险函数中包含的参数为可控参数后,在根据所述任一危险函数确定相应的代码漏洞之前,进一步包括:
    采用用户预设的安全函数或者python自带的安全函数对所述任一危险函数包含的可控参数进行处理,确定经处理后的可控参数仍可控时,最终判定所述任一危险函数为真正的危险函数。
    一种检测python代码漏洞的装置,包括:
    提取单元,用于对待检测的python代码进行语法解析,生成相应的语法树,以及对语法树进行数据流分析,提取出使用的危险函数;
    处理单元,用于对提取出的危险函数的外层函数所包含的参数进行跟踪,将赋值类型满足预设传递规则的参数确定为可控参数,组成可控参数集合;
    匹配单元,用于将获得的危险函数中包含的参数与可控参数集合中的每一个可控参数进行匹配,若匹配成功,则确定危险函数中包含的参数为可控参数;
    确定单元,用于根据包含有可控参数的危险函数确定相应的代码漏洞。
    这样,基于语法树对python进行语法分析,避免了代码中的复杂内容对分析过程所造成的干扰(如,“换行”、“注释”所来来的干扰),能够在语法树中识别出参数,并且能根据预设传递规则判断参数在流动的过程中是否可控,如果在整个解析范围内可控,则认定为可控参数,若识别出的危险函数中存在可 控参数,则认为相应的一段代码存在漏洞,这样,大大提高了python代码漏洞检测的准确性,解决了python代码语法灵活维护困难的问题,由于是自动化的跟踪参数,免去了人工单步跟踪参数,降低了操作复杂度。
    较佳的,所述提取单元进一步用于:
    在对python代码进行语法解析的过程中,根据指示删除非必要代码。
    较佳的,所述处理单元进一步用于,
    在进行数据流跟踪的过程中,基于输入import机制,从数据流以及python代码的环境变量中获取引入的第三方模块或/和第三方函数,并对所述第三方模块或/和第三方函数进行解析;
    根据解析结果判断所述第三方模块或/和第三方函数包含的参数在整个函数处理过程是否发生改变,将未发生改变的参数归属于可控参数集合中。
    较佳的,将赋值类型满足预设传递规则的参数确定为可控参数时,所述处理单元具体用于:
    将赋值类型满足以下规则中的一种或任意组合的参数确定为可控参数:
    参数的赋值类型为:指定的属性取值;
    参数的赋值类型为:字符串拼接,且被拼接的字符串中包含已认定的可控参数;
    参数的赋值类型为:分片符取值;
    参数的赋值类型为:列表解析式,且所述列表解析式基于至少一个可控因子进行迭代,或者,且所述列表解析式为包含有可控因子的列表相加;
    参数为赋值类型为:经字符串操作函数处理的返回值,或/和,经未过滤函数处理的返回值。
    较佳的,所述处理单元进一步用于:
    对所述语法树进行类分析,在分析过程中将各个类的初始化参数归属于所述可控参数集合,以及对各个类的变量赋值进行跟踪,若任一危险函数中使用了类的变量,则确定所述任一危险函数包含有可控参数。
    较佳的,确定任一危险函数中包含的参数为可控参数后,在根据所述任一危险函数确定相应的代码漏洞之前,所述处理单元进一步用于:
    采用用户预设的安全函数或者python自带的安全函数对所述任一危险函数包含的可控参数进行处理,确定经处理后的可控参数仍可控时,最终判定所述任一危险函数为真正的危险函数。
    附图说明
    图1为本发明实施例中检测python代码漏洞流程图;
    图2为本发明实施例中生成可控参数集合流程图;
    图3为本发明实施例中检测python代码漏洞的装置功能结构示意图。
    具体实施方式
    为了提高python代码漏洞检测的精准度,本发明实施例中,针对python代码进行分析,生成一个python语法树,然后对该语法树进行分析,跟踪数据流,当发现危险函数之后,再继续跟踪危险函数包含参数是否可控,若为可控参数,则认定检测到危险函数对应的漏洞。
    下面结合附图对本发明优选的实施方式进行详细说明。
    参阅图1所示,本发明实施例中,检测python代码漏洞的详细流程如下:
    步骤110:对待检测的python代码进行语法解析,生成相应的语法树,以及对语法树进行数据流分析,提取出使用的危险函数。
    实际应用中,用于解析python代码的工具很多,可以采用任意一种工具对python代码进行语法解析,生成相应的语法树。在进行语法分析时,包含但不限于对代码中包含的类,函数,import,控制语句等等进行分析。
    进一步地,在对python代码进行语法解析的过程中,需要根据指示删除非必要代码,从而去语法树中不必要的枝干,降低代码分析的难度,降低干扰。
    另一方面,存在漏洞的场景,很大一部分是由注入引起的,常见的注入场景有操作系统(OperatingSystem,OS)命令注入,代码注入,结构化查询语言(StructuredQueryLanguage,SQL)注入,任意文件读取,下载等等。在这些注入场景中,所有的漏洞都涉及到使用危险函数,并且该危险函数中包含的参数是可控的。因此,在执行步骤110时,经语法解析,获得python的语法树后,得到其语法树,再跟踪语法树产生的数据流,从而提取出python代码中可能使用到的危险函数。
    筛选危险函数的过程较简单,可选的,可以通过学习累积维护一个危险函数列表,若语法树中发现了函数调用并且该函数名称在上述危险函数列表中,就可以标注出相应的代码行,表示查找到危险函数。
    进一步地,在进行数据流跟踪的过程中,基于输入(import)机制,从数据流以及python代码的环境变量中获取引入的第三方模块或/和第三方函数,并对该第三方模块或/和第三方函数进行解析,包括一些简单的函数处理,具体包含但不限于以下两种处理方式的任意一种或组合:
    1、判断引入的第三方模块或/和第三方函数是否为危险函数,确定为危险函数时,将该第三方模块或/和第三方函数包含的参数归属至可控参数集合中;
    2、根据解析结果判断引入的第三方模块或/和第三方函数包含的参数在整个函数处理过程是否发生改变,将未发生改变的参数归属于可控参数集合中。
    例如,输入参数A后,返回值仍为参数A,则认为参数A可控。
    又例如:将已知的可控参数赋值给参数B,那么则认为参数B可控。
    之所以这样处理,是第三方可能会引入可控参数,那么,这些参数在后续的流程中经过各类危险函数处理后,仍然可以是可控参数,因此,需要加强防范。
    步骤120:对提取出的危险函数的外层函数所包含的参数进行跟踪,将赋值类型满足预设传递规则的参数确定为可控参数,组成可控参数集合。
    具体的,在提取出危险函数后,难点在于跟踪危险函数包含的参数。
    本发明实施例中,较佳的,默认危险函数的外层函数所包含的参数为可控参数,那么,只需要对外层函数包含的参数进行跟踪,分析其传递过程,即可确定最终的取值是否可控,从而可以根据分析结果获得相应的可控参数集合。
    可选的,本发明实施例中,只需要确定外层函数包含的参数的赋值类型符合以下传递规则中的任意一条,即可确定其为可控参数。
    1、参数的赋值类型为:指定的属性取值。
    例如,对一个变量取属性,比如:request的GET属性、POST属性和FILES属性。若参数的赋值类型为上述属性取值,或者,进一步地,为上述属性的属性取值,则认为参数是可控参数。
    此外,若参数的赋值类型是request的其他字段,如META、user、session、url等等,则认为不是可控参数。
    2、参数的赋值类型为:字符串拼接,且被拼接的字符串中包含已认定的可控参数。
    由于被可控参数赋值后的值也被认定是可控的,因此,需要考虑到各种拼接情况,如,采用+,%,format函数等等方式进行拼接。
    3、参数的赋值类型为:分片符取值。
    通常情况下一般认为分片后的值也是可控的。
    4、参数的赋值类型为:列表解析式,且该列表解析式基于至少一个可控因子进行迭代,或者,且该列表解析式为包含有可控因子的列表相加。
    在这种情况下,默认赋值后的列表也是可控的。
    5、参数的赋值类型为:经字符串操作函数处理的返回值,或/和,经未过滤函数处理的返回值。
    例如,若参数经过简单的字符串操作函数(如,str,unicode,strip,encode等)处理,或/和,参数经简单的未过滤函数处理,那么,则认定函数的返回参数是可控的。
    另一方面,可选的,还可以进一步对上述python语法树进行类分析,在分 析过程中将各个类的初始化参数归属于可控参数集合(便于后续匹配流程使用),以及对各个类的变量赋值进行跟踪,若任一危险函数中使用了类的变量,则确定该任一危险函数包含有可控参数。
    步骤130:将获得的危险函数中包含的参数与可控参数集合中的每一个可控参数进行匹配,若匹配成功,则确定危险函数中包含的参数为可控参数。
    实际应用中,在确定任一危险函数中包含的参数为可控参数后,在根据上述任一危险函数确定相应的代码漏洞之前,进一步地,采用用户预设的安全函数或者python自带的安全函数对上述任一危险函数包含的可控参数进行处理,确定经处理后的参数仍为可控参数时,最终判定所述任一危险函数为真正的危险函数。
    这是因为,用户可以根据实际需求自行定义安全函数或者用户可以采用python自带的安全函数,如果任一危险函数(以下称为危险函数X)包含的可控参数,经过安全函数处理之后由可控变成了不可控,那么,危险函数X则被排除,安全函数通常是程序员对输入进行安全检查的另外一种封装,相应的,若采用用户预设的安全函数对危险函数X包含的参数进行处理后,参数仍可控,则最终判定危险函数X为真正的危险函数,即需要检测出危险函数X对应的代码漏洞。
    当然,对危险函数进行分析的前提是危险函数中包含有参数,若有,才会进一步判断参数是否可控,否则,则直接排除相应的危险函数,但需要将该危险函数加入危险函数列表中,以便分析其他函数时使用。
    步骤140:根据包含有可控参数的危险函数确定相应的代码漏洞。
    进一步地,在检测到所有的代码漏洞后,根据代码漏洞的类型,对应记录相应级别的系统日志,在不同的级别下输出的系统日志也是不一样的。
    如,代码漏洞可以是sql注入,命令注入等等,相应的,可以选择仅记录系统漏洞类型的方式生成系统日志,也可以选择既记录系统漏洞类型又记录解决方案的方式生成系统日志。
    基于上述实施例中,参阅图2所示,在执行步骤120时,生成可控参数集合的具体过程如下:
    步骤1200:获取body内容。
    body是语法树中的结构,可以理解为在对危险函数的外层函数进行排查。body之中还可以嵌入body,遍历每个body才能实现数据流的跟踪。
    步骤1201:遍历body内容。
    步骤1202:对body进行结构类分析,如,分析orelse结构、handles结构、tests结构等等。
    步骤1203:判断是否获得赋值语句?若是,则执行步骤1204;否则,执行1207。
    在执行步骤1203时,可以理解为在外层函数排查的过程中,检测到了外层函数所包含的参数,那么需要进一步检测这些参数所对应的赋值语句,以便进一步判断这些参数是否可控。
    步骤1204:判断获得的赋值语句是否为预设情况中的一种?若则,则执行步骤1205;否则,执行1207。
    执行步骤1204,即是在判断外层函数包含的参数的赋值类型是否为上述五种情况中的一种,具体为:
    1、参数的赋值类型为:指定的属性取值。
    2、参数的赋值类型为:字符串拼接,且被拼接的字符串中包含已认定的可控参数。
    3、参数的赋值类型为:分片符取值。
    4、参数的赋值类型为:列表解析式,且该列表解析式基于至少一个可控因子进行迭代。
    5、参数的赋值类型为:经字符串操作函数处理的返回值,或/和,经未过滤函数处理的返回值。
    若属于上述五种条件中的一种或任意组合,则确定相应的赋值后的参数为 可控参数。
    步骤1205:将赋值后的参数归属至可控参数集合中。
    步骤1206:判断当前解析的body是否为空?即判断当前解析的body中是否还有尚未完成的内容,若是,则执行步骤1207;否则,返回步骤1201。
    步骤1207:判断待解析的body结构、orelse结构、handles结构、tests结构等等是否为空?若是,则结束当前流程;否则,返回步骤1200。
    上述流程即是通过递归方式遍历语法树结构,跟踪危险函数的外层函数所包含的参数的赋值类型,如果赋值类型属于上述五种情况中的一种且输入的参数是可控的,则认为赋值后的变量还是可控的,这样,就得到了整个外层函数的可控变量,从而组成可控参数集合。
    那么,再判断危险函数包含的参数是否归属于上述可控参数集合,即可以获知危险函数包含的参数是否为可控参数。
    用以解决现有技术下提高python代码漏洞检测的精准度。
    基于上述实施例,参阅图3所示,本发明实施例中,用于检测python漏洞的装置包括提取单元30、处理单元31、匹配单元32和确定单元33,其中,
    提取单元30,用于对待检测的python代码进行语法解析,生成相应的语法树,以及对语法树进行数据流分析,提取出使用的危险函数;
    处理单元31,用于对提取出的危险函数的外层函数所包含的参数进行跟踪,将赋值类型满足预设传递规则的参数确定为可控参数,组成可控参数集合;
    匹配单元32,用于将获得的危险函数中包含的参数与可控参数集合中的每一个可控参数进行匹配,若匹配成功,则确定危险函数中包含的参数为可控参数;
    确定单元33,用于根据包含有可控参数的危险函数确定相应的代码漏洞。
    较佳的,提取单元30进一步用于:
    在对python代码进行语法解析的过程中,根据指示删除非必要代码.
    较佳的,处理单元31进一步用于,
    在进行数据流跟踪的过程中,基于输入import机制,从数据流以及python代码的环境变量中获取引入的第三方模块或/和第三方函数,并对第三方模块或/和第三方函数进行解析;
    根据解析结果判断所述第三方模块或/和第三方函数包含的参数在整个函数处理过程是否发生改变,将未发生改变的参数归属于可控参数集合中。
    较佳的,将赋值类型满足预设传递规则的参数确定为可控参数时,处理单元31具体用于:
    将赋值类型满足以下规则中的一种或任意组合的参数确定为可控参数:
    参数的赋值类型为:指定的属性取值;
    参数的赋值类型为:字符串拼接,且被拼接的字符串中包含已认定的可控参数;
    参数的赋值类型为:分片符取值;
    参数的赋值类型为:列表解析式,且列表解析式基于至少一个可控因子进行迭代,或者,且列表解析式为包含有可控因子的列表相加。
    参数为赋值类型为:经字符串操作函数处理的返回值,或/和,经未过滤函数处理的返回值。
    较佳的,处理单元31进一步用于:
    对语法树进行类分析,在分析过程中将各个类的初始化参数归属于可控参数集合,以及对各个类的变量赋值进行跟踪,若任一危险函数中使用了类的变量,则确定任一危险函数包含有可控参数。
    较佳的,确定任一危险函数中包含的参数为可控参数后,在根据任一危险函数确定相应的代码漏洞之前,处理单元31进一步用于:
    采用用户预设的安全函数或者python自带的安全函数对任一危险函数包含的可控参数进行处理,确定经处理后的可控参数仍可控时,最终判定任一危险函数为真正的危险函数。
    本发明实施例中,基于待检测python代码生成相应的语法树,提取出危险 函数;再对危险函数的外层函数所包含的参数进行跟踪,将赋值类型满足预设传递规则的参数确定为可控参数,组成可控参数集合,以及确定危险函数中包含的参数归属于上述可控参数组合时,确定危险函数中包含有可控参数;最后,再根据包含有可控参数的危险函数确定相应的代码漏洞。
    这样,基于语法树对python进行语法分析,避免了代码中的复杂内容对分析过程所造成的干扰(如,“换行”、“注释”所来来的干扰),能够在语法树中识别出参数,并且能根据预设传递规则判断参数在流动的过程中是否可控,如果在整个解析范围内可控,则认定为可控参数,若识别出的危险函数中存在可控参数,则认为相应的一段代码存在漏洞,这样,大大提高了python代码漏洞检测的准确性,解决了python代码语法灵活维护困难的问题,由于是自动化的跟踪参数,免去了人工单步跟踪参数,降低了操作复杂度。
    另一方面,由于基于import机制引入的第三方模块或第三方函数也进行了跟踪,因此,免去了人工跳转到其他文件审查代码,降低了操作复杂度,从而在漏洞报告中可以直接报告了代码位置及产生漏洞的原因,使漏洞报告无需修改就可使用。
    本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
    本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一 个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
    这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
    这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
    尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
    显然,本领域的技术人员可以对本发明实施例进行各种改动和变型而不脱离本发明实施例的精神和范围。这样,倘若本发明实施例的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

    关 键  词:
    一种 检测 PYTHON 代码 漏洞 方法 装置
      专利查询网所有文档均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    0条评论

    还可以输入200字符

    暂无评论,赶快抢占沙发吧。

    关于本文
    本文标题:一种检测PYTHON代码漏洞的方法及装置.pdf
    链接地址:https://www.zhuanlichaxun.net/p-6409178.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2017-2018 zhuanlichaxun.net网站版权所有
    经营许可证编号:粤ICP备2021068784号-1