本发明专利技术公开了一种Java源代码缺陷检测方法及装置,所述方法首先对Java源程序字节码进行静态分析,生成函数调用图;根据所述函数调用图生成保存有所述Java源程序基本信息的关系数据库;根据预先建立的漏洞模式,以关系数据库查询的方式对所述Java源程序进行指针别名分析和污点分析;根据污点分析的结果,产生缺陷报告。该方法及装置能够全面而准确地检测Java源代码的安全缺陷,同时减少程序运算量,提高检测性能。
【技术实现步骤摘要】
【专利摘要】本专利技术公开了一种Java源代码缺陷检测方法及装置,所述方法首先对Java源程序字节码进行静态分析,生成函数调用图;根据所述函数调用图生成保存有所述Java源程序基本信息的关系数据库;根据预先建立的漏洞模式,以关系数据库查询的方式对所述Java源程序进行指针别名分析和污点分析;根据污点分析的结果,产生缺陷报告。该方法及装置能够全面而准确地检测Java源代码的安全缺陷,同时减少程序运算量,提高检测性能。【专利说明】—种Java源代码缺陷检测方法及装置
本专利技术涉及源代码静态分析
,尤其涉及一种Java源代码缺陷检测方法及装置。
技术介绍
源代码的静态安全检测是指在不运行代码的前提下,分析程序的语法、语义、控制流等信息,验证代码是否满足安全性。目前,静态分析主要有类型推断、数据流分析和约束分析3种方法: I)类型推断方法:类型推断是一个处理过程,其目的是保证每个操作都是针对一组数目正确,类型合适的对象进行,以保证操作的有效性。类型推断可以检查类型错误,选择合适的操作,根据情况确定必要的类型转换。2)数据流分析方法:数据流分析是一项编译时使用的技术,它能从程序代码中收集程序的语义信息并通过代数的方法在编译时确定变量的定义和使用,数据流分析被用于解决编译优化、程序验证、调试、测试、并行、向量化和串行编程环境等问题。数据流分析是通过对变量构造定义一引用对来实现的。3)约束分析方法将程序分析过程分为约束产生和约束求解两个阶段,前者利用约束产生规则建立变量类型或分析状态之间的约束系统,后者对这些约束系统进行求解。约束系统可以分为等式约束、集合约束和混合。上述现有技术中的三种方法都是通过解释程序的抽象语义,建立程序属性的数学模型,再通过求解这个数学模型,确定程序的属性。相比较而言,约束分析具有最强的检测能力和最慢的检测速度,适合进行软件的安全检测;数据流分析具有较强和较快的检测速度,适合检查需要考虑控制流信息而且变量属性之间的操作十分简单的静态分析问题;类型推断则具有最弱的检测能力和最快的检测速度,适合检查属性域有限而且与控制流无关的安全属性。但上述三种方法均无法全面准确的检测出Java源代码的安全缺陷,检测性能无法得到提高。
技术实现思路
本专利技术的目的是提供一种Java源代码缺陷检测方法及装置,能够全面而准确地检测Java源代码的安全缺陷,同时减少程序运算量,提高检测性能。一种Java源代码缺陷检测方法,所述方法包括: 对Java源程序字节码进行静态分析,生成函数调用图; 根据所述函数调用图生成保存有所述Java源程序基本信息的关系数据库; 根据预先建立的漏洞模式,以关系数据库查询的方式对所述Java源程序进行指针别名分析和污点分析; 根据污点分析的结果,产生缺陷报告。所述以关系数据库查询的方式对所述Java源程序进行指针别名分析,具体包括: 获得每个函数调用图以及函数依赖分析生成的函数调用序列; 以main函数为入口,根据函数调用持续迭代计算每个过程的指针信息; 根据所述函数调用序列分别计算每个语句对所述指针信息的影响; 其中,在此框架中过程内分析与过程间分析是并行的,当在过程内分析,遇到函数调用时,则进行过程间的分析;当在过程间分析,如果将调用者名字空间内的信息映射到被调用者名字空间中,则可进入过程间分析。所述以关系数据库查询的方式对所述Java源程序进行污点分析,具体包括: 通过查询所述关系数据库,并与漏洞模式比对,找到将用户数据引入到所述Java源程序中的函数,并将其返回结果标记为污点数据; 记录所述污点数据在所述Java源程序中的传播; 通过查询所述关系数据库,并与漏洞模式比对,找到使所述污点数据执行的函数,并记录污点传播的过程。一种Java源代码缺陷检测装置,所述装置包括: 程序识别模块,用于对Java源程序字节码进行静态分析,生成函数调用图,根据所述函数调用图生成保存有所述Java源程序基本信息的关系数据库; 解释模块,用于对Java源程序安全漏洞描述进行解释; 静态数据流分析模块,用于根据预先建立的漏洞模式,以关系数据库查询的方式对所述Java源程序进行指针别名分析; 安全漏洞分析模块,以关系数据库查询的方式对所述Java源程序进行污点分析,根据污点分析的结果,产生缺陷报告。 所述解释模块进一步包括: 别名解释单元,用于使用形式化的描述语言对别名分析规则进行描述; 漏洞模式解释单元,用于使用形式化的语言完整描述SQL注入等漏洞。所述安全漏洞分析模块进一步包括: 污点数据引入单元,用于通过查询所述关系数据库,并与漏洞模式比对,找到将用户数据引入到所述Java源程序中的函数,并将其返回结果标记为污点数据; 污点数据传播单元,用于记录所述污点数据在所述Java源程序中的传播; 污点数据执行单元,通过查询所述关系数据库,并与漏洞模式比对,找到使所述污点数据执行的函数,并记录污点传播的过程。由上述本专利技术提供的技术方案可以看出,该方法及装置能够全面而准确地检测Java源代码的安全缺陷,同时减少程序运算量,提高检测性能。【专利附图】【附图说明】为了更清楚地说明本专利技术实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他附图。图1为本专利技术实施例所提供Java源代码缺陷检测方法流程示意图; 图2为本专利技术实施例提供的对所述Java源程序进行指针别名分析的过程示意图; 图3为本专利技术实施例提供的对所述Java源程序进行污点分析的过程示意图; 图4为本专利技术实施例所提供Java源代码缺陷检测装置的结构示意图。【具体实施方式】下面结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术的保护范围。本专利技术实施例所述检测方法及装置针对的是Java的字节码,用于检测Java源代码的未验证输入漏洞中的SQL注入漏洞和跨站脚本漏洞,并生成缺陷报告。下面将结合附图对本专利技术实施例作进一步地详细描述,如图1所示为本专利技术实施例所提供Java源代码缺陷检测方法流程示意图,所述方法包括: 步骤11:对Java源程序字节码进行静态分析,生成函数调用图; 步骤12:根据所述函数调用图生成保存有所述Java源程序基本信息的关系数据库;步骤13:根据预先建立的漏洞模式,以关系数据库查询的方式对所述Java源程序进行指针别名分析和污点分析; 在该步骤中,本实施例提供了指针别名分析的方法,该方法全面而高效;此外本实施例还提供了污点分析的方法,全面而准确地分析了污点传播过程,减少了误报率和漏报率。以关系数据库查询的方式对所述Java源程序进行指针别名分析的具体过程如图2所示,参考图2: 首先,在预处理阶段首先进行准备工作,即先获得每个函数调用图以及函数依赖分析生成的函数调用序列; 以main函数为入口,根据函数调用持续迭代计算每个过程的指本文档来自技高网...
【技术保护点】
一种Java源代码缺陷检测方法,其特征在于,所述方法包括:对Java源程序字节码进行静态分析,生成函数调用图;根据所述函数调用图生成保存有所述Java源程序基本信息的关系数据库;根据预先建立的漏洞模式,以关系数据库查询的方式对所述Java源程序进行指针别名分析和污点分析;根据污点分析的结果,产生缺陷报告。
【技术特征摘要】
【专利技术属性】
技术研发人员:韩丽芳,崔宝江,侯婷婷,刘楠,高昆仑,
申请(专利权)人:国家电网公司,中国电力科学研究院,北京华夏信安科技有限公司,江苏省电力公司,
类型:发明
国别省市:北京;11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。