一种应用于Java污点分析的依赖补全方法和系统技术方案

技术编号:38323595 阅读:15 留言:0更新日期:2023-07-29 09:05
本发明专利技术公开了一种应用于Java污点分析的依赖补全方法和系统,包括获取Java源代码,根据Java源代码获取单类型导入列表、按需类型导入列表;遍历缺失依赖的语法树节点,当语法树节点为类实例创建或函数调用类型时,获取函数名,并结合单类型导入列表、按需导入列表建立当前语法树节点的类全名集合;根据当前语法树节点的实参获取参数类型列表,将类全名集合中的元素分别与函数名、参数类型列表进行拼接,得到函数签名的集合;使用函数签名的集合与预设的规则库作匹配,判断当前语法树节点是否为污点源或汇聚点。仅仅从源代码获取导入,通过对缺失依赖的类进行依赖补全,较为精确的识别污点源和汇聚点,具有可靠性和高效性,有效减少漏报的出现。少漏报的出现。少漏报的出现。

【技术实现步骤摘要】
一种应用于Java污点分析的依赖补全方法和系统


[0001]本专利技术属于软件源代码静态分析
,特别是涉及一种应用于Java污点分析的依赖补全方法和系统。

技术介绍

[0002]污点分析是分析程序中由污点源引入的数据,是否能够不经无害处理,直接传播到污点汇聚点,如果不能,说明系统是信息流安全的;否则,说明系统产生了隐私数据泄漏或危险数据操作等安全问题。
[0003]污点分析的处理过程可以分成3个阶段:(1)识别污点源和汇聚点;(2)污点传播分析;(3)无害处理。常用于程序静态分析以挖掘安全漏洞。
[0004]然而,由于采用自动化构建工具管理的Java程序项目在缺少依赖仓库链接的情况,静态工具对项目进行分析时无法载入依赖,导致依赖缺失,使污点分析在第一个阶段即失败,缺失依赖的漏洞无法报出,污点分析漏报率非常高。毋庸置疑,这些程序是非常关键且重要的,若其中的安全漏洞未被挖掘并修正,会造成很多不可挽回的后果,所以对于这类程序的检测,要求宁可误报不可漏报,即,宁可把不是漏洞的点报出来供审计人员复核,也不可把任何一个漏洞漏掉。
[0005]因此,亟需一种应用于污点分析的依赖补全方法,可补全缺失的依赖,以降低污点分析的漏报率,提高静态分析准确率,在程序投入使用前检测出尽可能多的安全漏洞供开发人员修正,以提升系统安全性,避免不必要的损失。

技术实现思路

[0006]针对以上技术问题,本专利技术提供一种应用于Java污点分析的依赖补全方法和系统。
[0007]本专利技术解决其技术问题采用的技术方案是:
[0008]一种应用于Java污点分析的依赖补全方法,方法包括以下步骤:
[0009]S100:获取Java源代码,根据Java源代码获取单类型导入列表、按需类型导入列表;
[0010]S200:遍历缺失依赖的语法树节点,当语法树节点为类实例创建或函数调用类型时,获取函数名,并结合单类型导入列表、按需导入列表建立当前语法树节点的类全名集合;
[0011]S300:根据当前语法树节点的实参获取参数类型列表,将类全名集合中的元素分别与函数名、参数类型列表进行拼接,得到函数签名的集合;
[0012]S400:使用函数签名的集合与预设的规则库作匹配,判断当前语法树节点是否为污点源或汇聚点。
[0013]优选地,S100包括:
[0014]S110:根据所给文件路径获取Java源代码,使用语法树解析器对Java源代码进行
解析,得到解析结果;
[0015]S120:根据解析结果获取Java源代码中的import列表,其中,import列表中以具体类名结尾的是单类型导入,以“.*”结尾的是按需类型导入,分类保存,得到单类型导入列表和按需类型导入列表。
[0016]优选地,S200包括:
[0017]210:若当前语法树节点的类别为类实例创建ClassInstanceCreation,则表示当前语法树节点调用了一个类的构造函数,其函数名可以用init标识,其类名则为该构造函数名,用单类型导入列表中的元素与类名匹配,若其中一项匹配成功,则得到类全名;若全部匹配失败,则将各个按需类型导入分别与类名拼接,其结果作为类全名集合;
[0018]S220:若当前语法树节点的类别为函数调用MethodInvocation,则表示当前语法树节点调用了一个函数,其函数名就是该函数的名称,将单类型导入列表、按需导入列表作为函数所在类的类全名集合。
[0019]优选地,S300中中根据当前语法树节点的实参获取参数类型列表,包括:
[0020]当前语法树节点的实参是类实例创建或函数调用的实参,参数类型是实参的类全名,可从语法树解析器的解析结果中获取。
[0021]优选地,S400中预设的规则库包括污点源或汇聚点的函数特征,函数特征包括包名、类名、函数名和函数参数类型列表。
[0022]一种应用于Java污点分析的依赖补全系统,包括:
[0023]列表获取模块,用于获取Java源代码,根据Java源代码获取单类型导入列表、按需类型导入列表;
[0024]类全名集合建立模块,用于遍历缺失依赖的语法树节点,当语法树节点为类实例创建或函数调用类型时,获取函数名,并结合单类型导入列表、按需导入列表建立当前语法树节点的类全名集合;
[0025]函数签名的集合获取模块,用于根据当前语法树节点的实参获取参数类型列表,将类全名集合中的元素分别与函数名和参数类型列表进行拼接,得到函数签名的集合;
[0026]污点分析模块,用于使用函数签名与预设的规则库作匹配,判断当前语法树节点是否为污点源或汇聚点。
[0027]上述一种应用于Java污点分析的依赖补全方法和系统,首先对Java源代码进行分析;其次,遍历缺失依赖的语法树节点,当语法树节点为类实例创建时,根据类名和导入列表找到类全名;然后,当语法树节点为函数调用时,用单类型导入列表、按需导入列表共同构成函数的类全名;最后,将类全名集合中的元素分别与函数名、参数类型列表拼接作为函数签名的集合,与规则库匹配,识别污点源、汇聚点。在进行污点分析时,通过对缺失依赖的类进行依赖补全,较为精确的识别污点源和汇聚点,具有可靠性和高效性。通过使用本专利技术,仅仅从源代码获取导入,根据语法树节点的不同类型进行相应依赖补全,就可以减少这些漏报的出现。
附图说明
[0028]图1为本专利技术一实施例中一种应用于Java污点分析的依赖补全方法的流程图;
[0029]图2为本专利技术另一实施例中一种应用于Java污点分析的依赖补全方法的流程图。
具体实施方式
[0030]为了使本
的人员更好地理解本专利技术的技术方案,下面结合附图对本专利技术作进一步的详细说明。
[0031]在一个实施例中,如图1所示,一种应用于Java污点分析的依赖补全方法,方法包括以下步骤:
[0032]S100:获取Java源代码,根据Java源代码获取单类型导入列表、按需类型导入列表。
[0033]在一个实施例中,S100包括:
[0034]S110:根据所给文件路径获取Java源代码,使用语法树解析器对Java源代码进行解析,得到解析结果;
[0035]S120:根据解析结果获取Java源代码中的import列表,其中,import列表中以具体类名结尾的是单类型导入,以“.*”结尾的是按需类型导入,分类保存,得到单类型导入列表和按需类型导入列表。
[0036]具体地,使用语法树解析器获取Java源代码的import列表。
[0037]使用语法解析器工具,获取import列表,以具体类名结尾的是单类型导入,以“.*”结尾的是按需类型导入,分类保存在列表中,用于之后步骤中获取类全名。其中,语法树解析器是自研开发的一款Java代码解析工具,它将Java代码构建成一个基于DOM结构的抽象语法树,即将Java源代码语法结构用一种树形结构抽象表示,并本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种应用于Java污点分析的依赖补全方法,其特征在于,所述方法包括以下步骤:S100:获取Java源代码,根据所述Java源代码获取单类型导入列表、按需类型导入列表;S200:遍历缺失依赖的语法树节点,当所述语法树节点为类实例创建或函数调用类型时,获取函数名,并结合所述单类型导入列表、所述按需导入列表建立当前语法树节点的类全名集合;S300:根据所述当前语法树节点的实参获取参数类型列表,将所述类全名集合中的元素分别与所述函数名、所述参数类型列表进行拼接,得到函数签名的集合;S400:使用所述函数签名的集合与预设的规则库作匹配,判断当前语法树节点是否为污点源或汇聚点。2.根据权利要求1所述的方法,其特征在于,S100包括:S110:根据所给文件路径获取Java源代码,使用语法树解析器对所述Java源代码进行解析,得到解析结果;S120:根据所述解析结果获取所述Java源代码中的import列表,其中,所述import列表中以具体类名结尾的是单类型导入,以“.*”结尾的是按需类型导入,分类保存,得到单类型导入列表和按需类型导入列表。3.根据权利要求1所述的方法,其特征在于,S200包括:S210:若所述当前语法树节点的类别为类实例创建ClassInstanceCreation,则表示所述当前语法树节点调用了一个类的构造函数,其函数名可以用init标识,其类名则为该构造函数名,用所述单类型导入列表中的元素与类名匹配,若其中一项匹配成功,则得到类全名;若全部...

【专利技术属性】
技术研发人员:龚晓玉杨智霖杨云帆
申请(专利权)人:湖南泛联新安信息科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1