一种针对JavaWeb应用的注入型漏洞检测方法及系统技术方案

技术编号:38533180 阅读:13 留言:0更新日期:2023-08-19 17:05
本发明专利技术公开一种针对Java Web应用的注入型漏洞检测方法及系统,涉及计算机网络安全领域,为提高Java Web应用的安全性对其进行注入型漏洞检测,为安全分析人员和SDLC环节中的测试人员提供漏洞检测服务,本发明专利技术通过对注入型漏洞产生原理进行建模,构建了先验知识规则库,来对类方法进行标记。通过广度优先的污点分析算法对Source方法进行分析,构建局部函数调用图,并将函数调用时的污点传播信息存储到该图中。根据图中的污点传播信息进行分支路径的剪枝操作,最后通过深度遍历局部函数调用图来输出注入型漏洞调用链。此方式极大地提高了漏洞分析的效率以及漏洞的检出率。漏洞分析的效率以及漏洞的检出率。漏洞分析的效率以及漏洞的检出率。

【技术实现步骤摘要】
一种针对Java Web应用的注入型漏洞检测方法及系统


[0001]本专利技术涉及计算机网络安全领域,是针对Java Web应用的注入型漏洞检测系统,更具体地,是一种基于代码属性图的注入型漏洞检测方法及系统。

技术介绍

[0002]随着网络技术的飞速发展,Web应用在社会各个行业都有着广泛的应用,无论是企业业务系统、教育行业的各种应用系统等专业软件,还有如今火爆的短视频平台、外卖平台、网购平台等都使用了Web应用。Java一度被称为是应用最广泛的编程语言,广泛应用于Web应用的服务端编程。JetBrains公司2021年度统计报告指出,在我国,Java语言是使用最广泛的编程语言。在web应用开发方面,Java作为服务端编程语言,由于它跨一次编译随处运行的跨平台特性,更是受到不少开发者的青睐。根据360网络空间测绘引擎的统计数据可知,Java Web应用广泛存在于网络空间中,其中我国共有528,364个网站使用Java进行开发。
[0003]随着Web应用广泛使用,越来越多的安全问题也随之出现。Forrester公司的2021年度《应用安全现状报告》指出虽然近年来人们对应用程序的依赖稳步增强,但Web应用始终是最常见的外部攻击对象,其次才是软件程序。同年,开放式Web应用程序安全项目(OWASP,Open Web Application Security Project)公布了最新的OWASP Top 10漏洞名单,该漏洞名单记录了目前应用程序中危害最严重的10个安全漏洞。从2017年至2021年,注入型漏洞一直位于OWASP Top 10的前列。尤此可见,注入型漏洞一直是Web应用程序内存在的严重安全问题。
[0004]用户与Web应用之间的信息交互是通过外部应用程序接口(API,Application Programming Interface)实现的,对应功能的API通过解析用户的输入来执行相应的操作,并将数据返回给用户。如果用户输入的数据未经清理,或者清理不彻底的话,最终会导致恶意数据流向某些敏感函数(例如数据库操作函数、代码执行函数、命令执行函数、文件读取/写入函数等),从而破坏系统的安全性。此类程序缺陷被称为注入型漏洞。常见的注入型漏洞有:SQL注入、命令注入、代码注入、表达式注入、对象注入等。应用中的注入型漏洞往往会造成严重的安全问题,例如2021年12月10日国家互联网应急中心公布的Log4j2远程代码执行漏洞,该漏洞影响了Github上60644个开源项目发布的321094个软件,我国各个行业也受到了波及。
[0005]如何发现并解决Web应用中存在的注入型风险是现在安全行业面临的严峻问题。Forrester公司的年度《应用安全现状报告》提出应将安全构建到系统发展生命周期(SDLC,System Development Life Cycle)中,并且将自动化应用安全测试集成到DevOps环节中,以此来在应用上线前发现并解决应用存在的风险问题。因此,本专利技术期望在深入分析注入型漏洞的产生原理的基础上,提出一个通用的注入型Java Web漏洞检测方法,设计一个面向Java Web应用的注入型漏洞检测框架,为安全分析人员和SDLC环节中的测试人员提供漏洞检测服务,从而保障Web应用的安全性。

技术实现思路

[0006]针对上述问题,本专利技术提出了一种针对于Java Web应用的注入型漏洞检测方法与系统。本专利技术利用注入型漏洞的污点传播路径特征,在代码属性图的基础上进行污点分析,检测已知和未知的注入型漏洞。
[0007]为达到上述目的,本专利技术采取的技术方案是:
[0008]一种针对Java Web应用的注入型漏洞检测方法,包括以下步骤:
[0009]1)对Java Web应用程序包解析为Jimple中间表示形式,提取类对象之间的继承关系和接口实现关系以及类方法之间的别名关系,并对类方法Source、Sink和无关函数进行标记,根据提取的关系和标记的函数构建类关系图;
[0010]2)针对类关系图,以Source函数为起始节点进行广度优先的污点分析,根据语句类型、被调用函数的返回值类型、函数类型进行污点传播,并将函数调用间的污点传播信息存储到Call边中;该Call边由调用函数指向被调用函数和与其具有别名关系的函数,并且针对被指向的函数继续进行污点分析,直到分析完全部函数,最终构建出局部函数调用图;
[0011]3)污点分析结束后,获取局部函数调用图中所有的Sink节点,并针对Sink节点进行建栈操作,然后基于栈结构进行调用链挖掘;在调用链挖掘过程中,使用Sink节点中记录的初始污点信息以及指向Sink节点的Call边中记录的污点传播信息进行剪枝操作,获得可控的Call边和该Call边中起始节点的污点参数信息;根据起始节点的污点参数信息继续向后追溯,获取指向起始节点的可控Call边,并继续向后追溯,直到追溯到Source节点为止,然后输出挖掘的调用链即注入型漏洞信息。
[0012]优选地,步骤1)在对类方法进行标记之前,构建先验知识规则库,其包括Source规则、Sink规则和剪枝规则;根据Source规则标记Source函数,根据Sink规则标记Sink函数,根据剪枝规则标记无关函数。
[0013]优选地,步骤1)中提取类对象之间的接口实现关系和继承关系的步骤包括:
[0014]获取JavaWeb应用程序内所有的SootClass对象;
[0015]解析SootClass对象,获取类的属性信息、父类信息、接口信息并存储到ClassReference类对象中;
[0016]根据ClassReference类对象的父类信息、接口信息依次提取继承关系和接口实现关系。
[0017]优选地,步骤1)中提取类方法之间的别名关系的步骤包括:通过目标方法签名在父类中递归式搜索同名方法,确定类方法之间的别名关系。
[0018]优选地,步骤1)中构建类关系图的步骤包括:
[0019]对SootClass对象中存储的所有SootMethod对象逐个提取代码语义信息,将信息存储到MethodReference类对象中,构建ClassReference类对象与MethodReference类对象之间的Has边;
[0020]根据提取的继承关系在两个类之间建立Extend边;
[0021]根据提取的接口实现关系在两个类对象之间建立Extend边;
[0022]根据类方法之间的别名关系,在两个方法之间建立Alias边;
[0023]由上述的Has边、Extend边、Alias边构建类关系图。
[0024]优选地,步骤1)中在标记完成后,将Source函数存储到WorkList列表中,然后在步
骤2)中以WorkList列表中的Source函数为起始节点进行广度优先的污点分析,对Source节点进行数据流分析。
[0025]优选地,步骤2)中根据语句类型进行污点传播的步骤包括:
...

【技术保护点】

【技术特征摘要】
1.一种针对Java Web应用的注入型漏洞检测方法,其特征在于,包括以下步骤:1)对Java Web应用程序包解析为Jimple中间表示形式,提取类对象之间的继承关系和接口实现关系以及类方法之间的别名关系,并对类方法Source、Sink和无关函数进行标记,根据提取的关系和标记的函数构建类关系图;2)针对类关系图,以Source函数为起始节点进行广度优先的污点分析,根据语句类型、被调用函数的返回值类型、函数类型进行污点传播,并将函数调用间的污点传播信息存储到Call边中;该Call边由调用函数指向被调用函数和与其具有别名关系的函数,并且针对被指向的函数继续进行污点分析,直到分析完全部函数,最终构建出局部函数调用图;3)污点分析结束后,获取局部函数调用图中所有的Sink节点,并针对Sink节点进行建栈操作,然后基于栈结构进行调用链挖掘;在调用链挖掘过程中,使用Sink节点中记录的初始污点信息以及指向Sink节点的Call边中记录的污点传播信息进行剪枝操作,获得可控的Call边和该Call边中起始节点的污点参数信息;根据起始节点的污点参数信息继续向后追溯,获取指向起始节点的可控Call边,并继续向后追溯,直到追溯到Source节点为止,然后输出挖掘的调用链即注入型漏洞信息。2.如权利要求1所述的方法,其特征在于,步骤1)在对类方法进行标记之前,构建先验知识规则库,其包括Source规则、Sink规则和剪枝规则;根据Source规则标记Source函数,根据Sink规则标记Sink函数,根据剪枝规则标记无关函数。3.如权利要求1所述的方法,其特征在于,步骤1)中,提取类对象之间的接口实现关系和继承关系的步骤包括:获取JavaWeb应用程序内所有的SootClass对象;解析SootClass对象,获取类的属性信息、父类信息、接口信息并存储到ClassReference类对象中;根据ClassReference类对象的父类信息、接口信息依次提取继承关系和接口实现关系;和/或提取类方法之间的别名关系的步骤包括:通过目标方法签名在父类中递归式搜索同名方法,确定类方法之间的别名关系。4.如权利要求3所述的方法,其特征在于,步骤1)中构建类关系图的步骤包括:对SootClass对象中存储的所有SootMethod对象逐个提取代码语义信息,将信息存储到MethodReference类对象中,构建ClassReference类对象与MethodReference类对象之间的Has边;根据提取的继承关系在两个类之间建立Extend边;根据提取的接口实现关系在两个类对象之间建立Extend边;根据类方法之间的别名关系,在两个方法之间建立Alias边;由上述的Has边、Extend边、Alias边构建类关系图。5.如权利要求1所述的方法,其特征在于,步骤1)中在标记完成后,将Source函数存储到WorkList列表中,然后在步骤2)中以WorkList列表中的Source函数为起始节点进行广度优先的污点分析,对Source节点进行数据流分析。6.如权利要求1所述的方法,其特征在于,步骤2)中根据语句类型进行污点传播的步骤包括:
对于代码片段中的语句,首先判断该语句的类型;如果语句是非调用类型,则直接通过分析表达式运算进行污点传播,记录污点参数的污点来源信息;如果语句是调用类型,则判断参数中是否存在污点参数,若不存在污点参数,则继续分析下条语句。7.如权利要求6所述的方法,其特征在于,步骤2)中,根据被调用函数的返回值类型、函数类型进行污点传播的步骤包括:对于调用类型的语句,如果参数中存在污点参数且函数不为Sink函数和过滤函数,则根据被调用函数的返回值类型以及函数类型进行污点传播;如果返回值类型为字符串、类对象、字节数组类...

【专利技术属性】
技术研发人员:刘潮歌李香龙刘奇旭陈星辰刘清越谭儒汪旭童尹捷
申请(专利权)人:中国科学院信息工程研究所
类型:发明
国别省市:

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

1