一种应用于Java污点分析的依赖补全方法和系统与流程

文档序号:34934593发布日期:2023-07-28 09:17阅读:55来源:国知局
一种应用于Java污点分析的依赖补全方法和系统与流程

本发明属于软件源代码静态分析,特别是涉及一种应用于java污点分析的依赖补全方法和系统。


背景技术:

1、污点分析是分析程序中由污点源引入的数据,是否能够不经无害处理,直接传播到污点汇聚点,如果不能,说明系统是信息流安全的;否则,说明系统产生了隐私数据泄漏或危险数据操作等安全问题。

2、污点分析的处理过程可以分成3个阶段:(1)识别污点源和汇聚点;(2)污点传播分析;(3)无害处理。常用于程序静态分析以挖掘安全漏洞。

3、然而,由于采用自动化构建工具管理的java程序项目在缺少依赖仓库链接的情况,静态工具对项目进行分析时无法载入依赖,导致依赖缺失,使污点分析在第一个阶段即失败,缺失依赖的漏洞无法报出,污点分析漏报率非常高。毋庸置疑,这些程序是非常关键且重要的,若其中的安全漏洞未被挖掘并修正,会造成很多不可挽回的后果,所以对于这类程序的检测,要求宁可误报不可漏报,即,宁可把不是漏洞的点报出来供审计人员复核,也不可把任何一个漏洞漏掉。

4、因此,亟需一种应用于污点分析的依赖补全方法,可补全缺失的依赖,以降低污点分析的漏报率,提高静态分析准确率,在程序投入使用前检测出尽可能多的安全漏洞供开发人员修正,以提升系统安全性,避免不必要的损失。


技术实现思路

1、针对以上技术问题,本发明提供一种应用于java污点分析的依赖补全方法和系统。

2、本发明解决其技术问题采用的技术方案是:

3、一种应用于java污点分析的依赖补全方法,方法包括以下步骤:

4、s100:获取java源代码,根据java源代码获取单类型导入列表、按需类型导入列表;

5、s200:遍历缺失依赖的语法树节点,当语法树节点为类实例创建或函数调用类型时,获取函数名,并结合单类型导入列表、按需导入列表建立当前语法树节点的类全名集合;

6、s300:根据当前语法树节点的实参获取参数类型列表,将类全名集合中的元素分别与函数名、参数类型列表进行拼接,得到函数签名的集合;

7、s400:使用函数签名的集合与预设的规则库作匹配,判断当前语法树节点是否为污点源或汇聚点。

8、优选地,s100包括:

9、s110:根据所给文件路径获取java源代码,使用语法树解析器对java源代码进行解析,得到解析结果;

10、s120:根据解析结果获取java源代码中的import列表,其中,import列表中以具体类名结尾的是单类型导入,以“.*”结尾的是按需类型导入,分类保存,得到单类型导入列表和按需类型导入列表。

11、优选地,s200包括:

12、210:若当前语法树节点的类别为类实例创建classinstancecreation,则表示当前语法树节点调用了一个类的构造函数,其函数名可以用init标识,其类名则为该构造函数名,用单类型导入列表中的元素与类名匹配,若其中一项匹配成功,则得到类全名;若全部匹配失败,则将各个按需类型导入分别与类名拼接,其结果作为类全名集合;

13、s220:若当前语法树节点的类别为函数调用methodinvocation,则表示当前语法树节点调用了一个函数,其函数名就是该函数的名称,将单类型导入列表、按需导入列表作为函数所在类的类全名集合。

14、优选地,s300中中根据当前语法树节点的实参获取参数类型列表,包括:

15、当前语法树节点的实参是类实例创建或函数调用的实参,参数类型是实参的类全名,可从语法树解析器的解析结果中获取。

16、优选地,s400中预设的规则库包括污点源或汇聚点的函数特征,函数特征包括包名、类名、函数名和函数参数类型列表。

17、一种应用于java污点分析的依赖补全系统,包括:

18、列表获取模块,用于获取java源代码,根据java源代码获取单类型导入列表、按需类型导入列表;

19、类全名集合建立模块,用于遍历缺失依赖的语法树节点,当语法树节点为类实例创建或函数调用类型时,获取函数名,并结合单类型导入列表、按需导入列表建立当前语法树节点的类全名集合;

20、函数签名的集合获取模块,用于根据当前语法树节点的实参获取参数类型列表,将类全名集合中的元素分别与函数名和参数类型列表进行拼接,得到函数签名的集合;

21、污点分析模块,用于使用函数签名与预设的规则库作匹配,判断当前语法树节点是否为污点源或汇聚点。

22、上述一种应用于java污点分析的依赖补全方法和系统,首先对java源代码进行分析;其次,遍历缺失依赖的语法树节点,当语法树节点为类实例创建时,根据类名和导入列表找到类全名;然后,当语法树节点为函数调用时,用单类型导入列表、按需导入列表共同构成函数的类全名;最后,将类全名集合中的元素分别与函数名、参数类型列表拼接作为函数签名的集合,与规则库匹配,识别污点源、汇聚点。在进行污点分析时,通过对缺失依赖的类进行依赖补全,较为精确的识别污点源和汇聚点,具有可靠性和高效性。通过使用本发明,仅仅从源代码获取导入,根据语法树节点的不同类型进行相应依赖补全,就可以减少这些漏报的出现。



技术特征:

1.一种应用于java污点分析的依赖补全方法,其特征在于,所述方法包括以下步骤:

2.根据权利要求1所述的方法,其特征在于,s100包括:

3.根据权利要求1所述的方法,其特征在于,s200包括:

4.根据权利要求1所述的方法,其特征在于,s300中根据所述当前语法树节点的实参获取参数类型列表包括:

5.根据权利要求1所述的方法,其特征在于,s400中所述预设的规则库包括污点源或汇聚点的函数特征,所述函数特征包括包名、类名、函数名和函数参数类型列表。

6.一种应用于java污点分析的依赖补全系统,其特征在于,包括:


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

技术研发人员:龚晓玉,杨智霖,杨云帆
受保护的技术使用者:湖南泛联新安信息科技有限公司
技术研发日:
技术公布日:2024/1/13
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1