一种基于分析目标驱动的代码分析方法和系统与流程

文档序号:12595952阅读:217来源:国知局
一种基于分析目标驱动的代码分析方法和系统与流程

本发明涉及代码分析技术领域,尤其涉及一种基于分析目标驱动的代码分析方法和系统。



背景技术:

传统的代码分析,是对所有程序代码进行分析,抽取出程序的静态数据模型,然后才根据具体的代码扫描目标规则,对静态数据模型进行检索,得到想扫描出的安全漏洞或者其他类型问题,并没有针对性的对某一个目标进行分析。

代码分析以及数据流、控制流数据结构,都是中立的、一般的,并未专门为了特定分析目的进行数据收集,从而无法准确高效的实现特定的目的,比如代码安全缺陷查找。



技术实现要素:

基于背景技术存在的技术问题,本发明提出了一种基于分析目标驱动的代码分析方法和系统,基于代码分析目标,有针对性对代码进行分析,实现快速高效的代码分析,提高代码分析的准确性和代码分析效率。

本发明提出的一种基于分析目标驱动的代码分析方法,所述方法包括以下步骤:

S1、获取待分析代码;

S2、根据预设的代码分析目标,在所述待分析代码中寻找符合代码分析目标的数据通道;

S3、对所述数据通道所在的方法代码进行代码分析,得到流出所述数据通道所在的方法代码的目标数据;

S4、检测所述目标数据中是否包含不定数据;若所述目标数据中包含不定数据,执行S5;若所述目标数据中不包含不定数据,则执行S6;

S5、对所述不定数据所在的方法代码进行代码分析,将流出所述不定数据所在的方法代码的数据替代所述目标数据中不定数据后,执行S4;

S6、输出所述目标数据。

其中,在S2中,所述数据通道为数据在程序内部传递的通道。

其中,在S3中,对所述数据通道所在的方法代码进行代码分析时,通过数据流分析技术对所述数据通道所在的方法代码进行分析;

和/或,对所述数据通道所在的方法代码进行代码分析时,通过控制流分析技术对所述数据通道所在的方法代码进行分析。

其中,在S4中,所述不定数据为所述目标数据流出的数据通道的子数据通道。

一种基于分析目标驱动的代码分析系统,所述系统包括:

获取模块,用于获取待分析代码;

搜索模块,用于根据预设的代码分析目标,在所述待分析代码中搜索符合代码分析目标的数据通道;

分析模块,用于对所述符合代码分析目标的数据通道所在的方法代码进行代码分析,得到流出所述数据通道所在的方法代码的目标数据,将所述目标数据发送给检测模块;

检测模块,用于接收并检测分析模块得到的目标数据或重分析模块得到的目标数据中是否包含不定数据;若所述目标数据中包含不定数据,将目标数据发送给重分析模块;若所述目标数据中不包含不定数据,将目标数据发送输出模块;

重分析模块,用于接收检测模块发送的目标数据,对所述目标数据中不定数据所在的方法代码进行代码分析,将流出所述不定数据所在的方法代码的数据替代所述目标数据中不定数据后,将所述目标数据发送给检测模块;

输出模块,用于接收检测模块发送的目标数据并输出。

其中,所述搜索模块,具体用于:所述数据通道为数据在程序内部传递的通道。

其中,所述分析模块具体用于:通过数据流分析技术对所述数据通道所在的方法代码进行分析;

和/或,所述分析模块具体用于:通过控制流分析技术对所述数据通道所在的方法代码进行分析。

其中,所述重分析模块,具体用于:所述不定数据为所述目标数据流出的数据通道的子数据通道。

本发明中,基于代码分析的目标,在有明确的目标下启动对代码进行分析,在代码分析过程中,根据代码分析的目标做针对性的数据流信息收集和分析,提高代码分析的准确性;同时,在代码分析过程中,只针对特定目标代码以及相关的数据流进行代码分析实现快速高效的代码分析,节省了无关代码分析的时间耗费,提高代码分析效率。

附图说明

图1是本发明提出的一种基于分析目标驱动的代码分析方法的流程图。

图2是本发明提出的一种基于分析目标驱动的代码分析系统的结构图。

具体实施方式

如图1所示,图1为本发明提出的一种基于分析目标驱动的代码分析方法的流程图;

参照图1,本发明提出的一种基于分析目标驱动的代码分析方法,所述方法包括以下步骤:

步骤S1,获取待分析代码;

在本发明实施例中,待分析代码支持各种不同的语言,比如:Java、C、C++等;同时支持不同的形式,比如:源代码、字节码、二进制可执行代码等。

步骤S2,根据预设的代码分析目标,在所述待分析代码中寻找符合代码分析目标的数据通道。

在本发明实施例中,预设的代码分析目标,就是代码分析的具体目的,数据离开程序的出口;比如:如果要分析代码中的SQL注入漏洞,那么需要关注的代码分析目标就是所有类似java.sql.Statement.execute(String sql)这样的方法的sql参数,凡是最终流向相关参数的数据值,都会作为SQL语句来执行,从而有引起SQL注入问题的可能性。

在本发明实施例中,所述数据通道为数据在程序内部传递的通道;具体地,方法的输入参数,就是最常见的数据通道;方法的返回值,也是一种数据通道;本发明实施例中,所述不定数据和所述数据通道,是同一个概念从不同角度的称呼,从方法内部使用数据的角度而言,方法的输入参数是个不定数据,它的值或者来源,都还不可知;而从方法调用者和被调用者二者之间的数据传递角度而言,方法的参数就是传递数据的一个数据通道。

步骤S3,对所述数据通道所在的方法代码进行代码分析,得到流出所述数据通道所在的方法代码的目标数据;具体地,当前数据通道所在的方法代码包含了方法的调用,所以在代码分析当前数据通道所在的方法代码方法的过程中,会揭示可能流向代码分析目标或数据通道的值。

在本步骤中,对所述数据通道所在的方法代码进行代码分析时,通过数据流分析技术对所述数据通道所在的方法代码进行分析,和/或,对所述数据通道所在的方法代码进行代码分析时,通过控制流分析技术对所述数据通道所在的方法代码进行分析。

其中,数据流分析技术是一项代码分析技术,它能从程序代码中收集程序的语义信息,并通过代数的方法在编译时确定变量的定义和使用,通过数据流分析,可以不必实际运行程序就能够发现程序运行时的行为,这样可以帮助大家理解程序。

其中,控制流分析技术就是用来获取程序控制结构信息的形式化分析方法,它是数据流分析,依赖分析的基础,优化需要从程序中获得足够多的信息。

步骤S4,检测所述目标数据中是否包含不定数据;若所述目标数据中包含不定数据,执行S5;若所述目标数据中不包含不定数据,则执行S6;

具体地,代码分析的目标数据可能是确定数据或不定数据,本发明实施例中,所述确定数据包括具体数据和未知来源数据,本发明实施例中的收集和分析的目标数据是确定数据;所述不定数据和所述数据通道,是同一个概念从不同角度的称呼,从方法内部使用数据的角度而言,方法的输入参数是个不定数据,它的值或者来源,都还不可知;而从方法调用者和被调用者二者之间的数据传递角度而言,方法的参数就是传递数据的一个数据通道。

步骤S5,对所述不定数据所在的方法代码进行代码分析,将流出所述不定数据所在的方法代码的数据替代所述目标数据中不定数据后,执行S4;

具体地,因为目标数据中包含了不定数据,也就是目标数据中还有数据通道,还有方法的调用,于是,需要对不定数据进行数据分析,得到流出不定数据对应数据通的数据来替代不定数据,进一步,在流出不定数据对应数据通道的数据中也可能依然有不定数据,所以对替代不定数据后的目标数据重新检测是否包含不定数据,重复执行S4、S5,直到所述目标数据中不包含不定数据,所有数据均为确定数据,执行S6;

具体地,一个完整的数据流,从数据分析开始,往往经过多个数据通道,多层方法调用,最后才能得到目标数据,所以步骤S4、S5这里的一个小循环,可能会执行多次,把上不定数据待码分析所得到的值,逐步往目标数据中不定数据中带,最终确定目标数据无不定数据,每次小循环,会把不定数据替代一层,所以循环次数是有限的,一定会终结。

步骤S6,输出所述目标数据;

具体地,根据代码分析目标,可以得到代码分析所关心的目标数据,将得到的目标数据进行输出、收集和分析。

如图2所示,图2为本发明提出的一种基于分析目标驱动的代码分析系统的结构图;

参照图2,本发明提出的一种基于分析目标驱动的代码分析系统,所述系统包括:

获取模块201,用于获取待分析代码;

在本发明实施例中,待分析代码支持各种不同的语言,比如:Java、C、C++等;同时支持不同的形式,比如:源代码、字节码、二进制可执行代码等。

搜索模块202,与获取模块201连接,用于根据预设的代码分析目标,在所述待分析代码中搜索符合代码分析目标的数据通道;

在本发明实施例中,搜索模块具体用于:预设的代码分析目标,就是代码分析的具体目的,数据离开程序的出口;比如:如果要分析代码中的SQL注入漏洞,那么需要关注的代码分析目标就是所有类似java.sql.Statement.execute(String sql)这样的方法的sql参数,凡是最终流向相关参数的数据值,都会作为SQL语句来执行,从而有引起SQL注入问题的可能性。

在本发明实施例中,搜索模块具体用于:所述数据通道为数据在程序内部传递的通道;具体地,方法的输入参数,就是最常见的数据通道;方法的返回值,也是一种数据通道;本发明实施例中,所述不定数据和所述数据通道,是同一个概念从不同角度的称呼,从方法内部使用数据的角度而言,方法的输入参数是个不定数据,它的值或者来源,都还不可知;而从方法调用者和被调用者二者之间的数据传递角度而言,方法的参数就是传递数据的一个数据通道。

分析模块203,与搜索模块202和检测模块204连接,用于对所述符合代码分析目标的数据通道所在的方法代码进行代码分析,得到流出所述数据通道所在的方法代码的目标数据,将所述目标数据发送给检测模块;具体地,当前数据通道所在的方法代码包含了方法的调用,所以在代码分析数据通道所在的方法代码的过程中,会揭示可能流向代码分析目标或数据通道的值。

具体的,所述分析模块具体用于:通过数据流分析技术对所述数据通道所在的方法代码进行分析;

和/或,所述分析模块具体用于:通过控制流分析技术对所述数据通道所在的方法代码进行分析。

其中,数据流分析技术是一项代码分析技术,它能从程序代码中收集程序的语义信息,并通过代数的方法在编译时确定变量的定义和使用,通过数据流分析,可以不必实际运行程序就能够发现程序运行时的行为,这样可以帮助大家理解程序。

其中,控制流分析技术就是用来获取程序控制结构信息的形式化分析方法,它是数据流分析,依赖分析的基础,优化需要从程序中获得足够多的信息。

检测模块204,分别与分析模块203、重分析模块205、输出模块206连接,用于接收并检测分析模块得到的目标数据或重分析模块得到的目标数据中是否包含不定数据;若所述目标数据中包含不定数据,将目标数据发送给重分析模块;若所述目标数据中不包含不定数据,将目标数据发送输出模块;

具体地,检测模块用于:代码分析的目标数据可能是确定数据或不定数据,本发明实施例中,所述确定数据包括具体数据和未知来源数据,本发明实施例中的收集和分析的目标数据是确定数据;所述不定数据和所述数据通道,是同一个概念从不同角度的称呼,从方法内部使用数据的角度而言,方法的输入参数是个不定数据,它的值或者来源,都还不可知;而从方法调用者和被调用者二者之间的数据传递角度而言,方法的参数就是传递数据的一个数据通道。

重分析模块205,与检测模块204连接,用于接收检测模块发送的目标数据,对所述目标数据中不定数据所在的方法代码进行代码分析,将流出所述不定数据所在的方法代码的数据替代所述目标数据中不定数据后,将所述目标数据发送给检测模块;

具体地,重分析模块用于:因为目标数据中包含了不定数据,也就是目标数据中还有数据通道,还有方法的调用,于是,需要对不定数据进行数据分析,得到流出不定数据对应数据通的数据来替代不定数据,进一步,在流出不定数据对应数据通道的数据中也可能依然有不定数据,所以对替代不定数据后的目标数据重新检测是否包含不定数据,目标数据会在重分析模块和检测模块中来回传送,直到所述目标数据中不包含不定数据,所有数据均为确定数据,将目标数据发送给输出模块;

具体地,一个完整的数据流,从数据分析开始,往往经过多个数据通道,多层方法调用,最后才能得到目标数据,所以步骤S4、S5这里的一个小循环,可能会执行多次,把上不定数据待码分析所得到的值,逐步往目标数据中不定数据中带,最终确定目标数据无不定数据,每次小循环,会把不定数据替代一层,所以循环次数是有限的,一定会终结。

输出模块206,与检测模块204连接,用于接收检测模块发送的目标数据并输出。

举例:如果以SQL注入漏洞分析为例,那么需要关注的代码分析目标就是所有类似java.sql.Statement.execute(String sql)这样的方法的sql参数,凡是最终流向相关参数的数据值,都会作为SQL语句来执行,从而有引起SQL注入问题的可能性,等所有代码都分析完,那么流向所有代码分析目标的所有可能的值都将已经存储并输出,代码分析完成,意味着所有的SQL查询的SQL值都已经确定,每个含有被污染的数据的SQL值,都对应着潜在的SQL注入漏洞,其中本实例中,被污染的数据指的是系统外部来的数据,比如从网络连接读取的数据,从DB读取的数据等,对于当前的代码分析而言,外部来的数据都是不可信的,或者说被污染的。

通过本发明的技术方案,基于代码分析的目标,在有明确的目标下启动对代码进行分析,在代码分析过程中,根据代码分析的目标做针对性的数据流信息收集和分析,提高代码分析的准确性,同时只针对特定目标代码以及相关的数据流进行代码分析实现快速高效的代码分析,提高代码分析效率。

以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。

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