一种JavaWeb系统的越权漏洞检测方法及系统
未命名
09-15
阅读:114
评论:0

一种java web系统的越权漏洞检测方法及系统
技术领域
1.本发明涉及计算机网络安全和程序的静态分析领域,具体涉及一种java web系统的越权漏洞检测方法及系统。
背景技术:
2.随着信息化建设的持续性推进,web系统在信息处理中的使用场景越来越多。web应用的功能也随着需求变的日益复杂多样,导致web应用程序也越来越庞大。但是针对web应用的攻击却没有变少,反而因为复杂多变的功能导致越权漏洞层出不穷。越权漏洞因为其危害性大,始终是于各种java web系统的关键安全隐患。
3.越权(broken access control)是web应用程序中一种比较常见的漏洞。不仅存在于php的web应用中,java、c等其他语言中均可能存在越权漏洞。越权漏洞既有可能出现在开发人员在代码开发时遗留的技术漏洞,例如对url的处理方法不一致导致的越权,也有可能出现在开发人员在设计系统时的漏洞,比如多级url的权限覆盖。
4.越权漏洞使攻击者能超出其预期权限进行操作。漏洞通常会导致未经授权的信息泄露、修改或破坏所有数据或执行超出用户限制的业务功能。例如用户越权查看管理员资料,用户越权修改其他用户的用户名密码等。严重的情况下,攻击者可以在获取管理员的权限后,进行进一步的攻击活动,比如登录服务器,关闭防火墙等操作。由于web系统的应用越来越广泛,各行各业都有其内在的java web系统,并且根据业务不同,系统设计逻辑也复杂多变。传统的动态流量越权漏洞检测方法在检测的覆盖度、精准度上均有一定的劣势。为此,针对java web的越权漏洞进行有效的检测是至关重要的,这将大大降低企业面临的安全风险。
技术实现要素:
5.针对上述问题,本发明提出了一种java web系统的越权漏洞检测方法及系统,通过获取网站jar包或者源代码,通过在源码和字节码层面的检测分析,即可分析并检测网站中存在的越权漏洞。越权漏洞具体包括鉴权框架越权漏洞和控制器越权漏洞两类漏洞,其中鉴权框架越权漏洞存在于java web系统的鉴权框架中,鉴权框架由于其代码结构的稳定性特点,本发明以statement结构进行描述;控制器越权漏洞由于其从入口函数到敏感函数的调用链特点,本发明以chainnode结构进行描述。
6.为达到上述目的,本发明采取的具体技术方案是:
7.一种java web系统的越权漏洞检测方法,其步骤包括:
8.获取网站的jar包,若获取的是网站的源码,则编译成网站的jar包;提取jar包中的信息,将jar包中的字节码编译为jimple中间代码;
9.构建先验知识库,该先验知识库包括鉴权框架的配置信息和mvc架构的控制器注解信息,其信息内容是java web系统的类和方法的签名,用以定位指定类和函数的位置;还包括敏感函数库sinks,包括java web系统中后端部分的敏感函数和敏感函数的函数签名;
10.基于先验知识库和jimple中间代码,构建statement链结构;
11.基于先验知识库和jimple中间代码,构建chainnode链结构;
12.根据statement链结构形成的调用链进行漏洞检测,找出鉴权框架越权漏洞;
13.根据chainnode链结构形成的调用图进行漏洞检测,找出控制器越权漏洞。
14.进一步地,所述jar包以fatjar包为主,该fatjar包包含了除开发者自己编写的逻辑以外的所有依赖,在java runtime environment存在的情况下能够独立运行。
15.进一步地,提取jar包中的信息的步骤包括:
16.在jar包所在目录创建lib目录和classes目录;
17.解压jar包,以深度优先遍历的方法搜索所有.class文件,并存入classes目录;
18.以深度优先遍历的方法搜索所有.jar文件,存入lib目录;
19.对每一个.class文件进行分析,并装载到内存;
20.对装载到内存的类和类中的方法的基本信息进行分析,分析是否含有入口函数注解信息或是否匹配敏感函数签名,并标记;
21.对每一个类,分析其是否有父类,如有则在内存中存入父子类关联信息,否则在内存中寻找父类,如果没有找到,则设置该类为虚类;
22.对每一个类,分析其是否含有接口,如有则在内存中存入接口信息,否则在内存中寻找接口类,如果没有找到,则设置该类为虚类。
23.进一步地,使用开源工具soot把字节码编译为jimple中间代码,soot工具包含方法的代表类sootmethod和类的代表类sootclass以及类作为程序中函数与类的语义信息载体。
24.进一步地,statement链结构删减了jimple中的15种语法表示方式,用一个统一的结构表示语句。
25.进一步地,基于先验知识库和jimple中间代码构建statement链结构的步骤包括:
26.通过先验知识库,直接从内存中获取到鉴权框架配置的类和方法;
27.设定context环境变量,并获取方法体对应的jimple代码,遍历jimple代码,进行statement链结构构建;
28.判断鉴权框架的鉴权类型,进行statement链结构构建。
29.进一步地,遍历jimple代码,采用以下步骤进行statement链结构构建:
30.遍历jimple语句,寻找assignstmt、invokestmt、identitystmt这三种语句;
31.针对assignstmt语句,对llop、caller、callee、args进行相应赋值;
32.针对invokestmt语句,对caller、callee、args进行相应赋值;
33.针对identitystmt语句,对llop、caller进行相应赋值。
34.进一步地,判断鉴权框架的鉴权类型,采用以下步骤进行statement链结构构建:
35.如果鉴权框架配置的类包含先验知识库标记的方法,则从方法中提取所有的statement链结构的节点并进行遍历;
36.针对每一个statement链结构的节点,取callee和caller,如果caller的做左操作数部位空,
37.则将(callee,caller)元组存入内存;
38.针对每一个statement链结构的节点,提取其中的鉴权动作和url,将(动作,url)
元组存入内存中;
39.由(callee,caller)元组和(动作,url)元组构成statement链结构。
40.进一步地,基于先验知识库和jimple中间代码构建chainnode链结构的步骤包括:
41.从内存中获取所述入口函数的信息,采用深度优先遍历的方法,构建chainnode单个节点信息;
42.基于先验知识库中的控制器入口的注解信息,扫描java web的所有方法,定位java web系统中控制器的入口函数,从该入口函数开始采用深度优先遍历算法扫描被调用函数,构建chainnode单个节点信息;
43.获取入口函数对应的jimple中间代码,遍历jimple中间代码,对其中的invokestmt语句进行分析,获得入口函数的下一层调用关系,并存入chainnode节点,完成next属性设置;
44.根据深度优先遍历算法继续分析下一层调用的所有方法,把上一层的chainnode和下一层连接起来,并根据深度优先遍历继续分析下一层调用的所有方法,完成up属性设置;
45.以先验知识库中的敏感函数库里的函数签名信息为扫描终止条件,扫描出所有从入口函数到敏感函数的鉴权调用链通路,并基于该鉴权调用链通路构建chainnode链结构。
46.进一步地,根据statement链结构形成的调用链进行漏洞检测的步骤包括:
47.从statement链结构中提取一个调用链,并获取该调用链的规则优先级;
48.以高优先级规则尝试匹配低优先级url,若匹配成功,则含有规则覆盖漏洞;
49.若匹配失败,则根据操作敏感性进行排序,判断低敏感性操作是否覆盖高敏感性操作,若覆盖,则有规则覆盖漏洞;
50.若未覆盖,则判断规则之间是否互相匹配,若匹配,则有规则冲突漏洞检测,否则无漏洞。
51.进一步地,以chainnode链结构形成调用图的步骤包括:
52.获取入口函数对应的chainnode;
53.对入口函数的所有next进行判断,如果next连接到上层chainnode,则判断为递归调用,终止该chainnode链构建;
54.如果chainnode的next为敏感函数,则调用链构建完成;
55.如果chainnode的next为空,则调用链结束并丢弃;
56.如果chainnode的next不为空且不是敏感函数,则继续深度优先遍历并进行调用链构建;
57.由上述构建的调用链形成调用图。
58.进一步地,根据chainnode链结构形成的调用图进行漏洞检测的步骤包括:
59.从chainnode链中取出一条,开始从入口函数遍历next;
60.判断next是否为外部库类,若是则跳过;
61.判断是否在next里调用自身,过滤掉无限自我调用的函数;
62.判断是否在next里有敏感函数,若是则得到一条通路;
63.判断是否还有next,若有next则继续递归遍历;
64.进行上述判断,直到没有chainnode链,通过比对所有通路来分析是否有鉴权缺
失,输出漏洞信息。
65.一种java web系统的越权漏洞检测系统,包括存储器和处理器,在该存储器上存储有计算机程序,该处理器执行该程序时实现上述方法的步骤。
66.本发明的积极效果如下:
67.本发明提出了一种基于静态分析技术的java web系统的越权漏洞检测方法,通过在源码和字节码层面的检测分析,大大提高了对系统业务逻辑检测的覆盖度,并通过改进的数据结构提升了系统的性能,最终达到有效检测两种越权漏洞的效果。
附图说明
68.图1是本发明针对java web系统进行越权漏洞检测的流程图。
69.图2是statement数据结构示例图。
70.图3是构建statement链结构的流程图。
71.图4是chainnode数据结构示例图。
72.图5是构建chainnode链结构的流程图。
73.图6是鉴权框架漏洞检测流程图。
74.图7是控制器漏洞检测流程图。
具体实施方式
75.为了使本技术领域的人员更好地理解本发明实施例中的技术方案,并使本发明的目的、特征和优点能够更加明显易懂,下面结合附图和实施例对本发明作进一步详细说明。
76.本实施例提供一种java web系统的越权漏洞检测方法,对webshell进行检测来查找漏洞,如图1所示,具体包括以下步骤:
77.步骤100:获取待检测的jar包。获取的jar包以fatjar包为主,fatjar包包含了除了开发者自己编写的逻辑以外的所有依赖,可以在java runtime environment存在的情况下独立运行。如果获取到的jar包类型不是fatjar包,亦可以进行后续处理。如果获取的不是网站的jar包,而是网站的源码,则使用开源编译工具javac对源码进行编译即可获得网站的jar包。
78.提取jar包中信息的步骤包括:
79.1)在jar包所在目录创建lib目录和classes目录;
80.2)解压jar包,以深度优先遍历的方法搜索所有.class文件,并存入classes目录;
81.3)以深度优先遍历的方法搜索所有.jar文件,存入lib目录;
82.4)对每一个.class文件进行分析,并装载到内存;
83.5)对装载到内存的类和类中的方法的基本信息进行分析,分析是否含有入口函数注解信息或是否匹配敏感函数签名,并标记;
84.6)对每一个类,分析其是否有父类,如有则在内存中存入父子类关联信息,否则在内存中寻找父类,如果没有找到,则设置该类为虚类;
85.7)对每一个类,分析其是否含有接口,如有则在内存中存入接口信息,否则在内存中寻找接口类,如果没有找到,则设置该类为虚类。
86.步骤110:获取先验知识库。通过调研开源的漏洞分析文章和检测工具的数据,总
结归纳先验知识库并保存。先验知识库第一部分包括鉴权框架的配置信息和mvc架构的控制器注解信息,其信息内容是java web系统的类和方法的签名,用以定位指定类和函数的位置;第二部分是敏感函数库sinks,包括java web系统中后端部分的敏感函数(或称敏感操作),如数据库增删改查、发送http请求包、执行命令等,敏感函数库包含以上敏感函数的函数签名。
87.步骤120:通过soot工具把jar包编译为jimple中间代码表示层。
88.soot工具提供了方法的代表类sootmethod和类的代表类sootclass以及类作为程序中函数与类的语义信息载体,本方法结合实际分析需求,实现了classref类和methodrefe类分别对上述两个类进行了进一步的封装。
89.classref类表示类节点,包含下述语义信息:
90.1)id:每个类节点自身唯一的id编号;
91.2)name:当前类节点的全名,包含类所在的包名;
92.3)isinterface:是否是接口,接口类没有实际方法的实现;
93.4)superclass:当前类节点继承的父类名;
94.5)fields:当前类节点的字段内容;
95.6)interfaces:当前类节点实现的接口名;
96.7)properties:当前类节点自身的属性,例如是否为接口、是否可序列化等
97.methodrefe类表示函数节点,包含下述语义信息:
98.1)id:每个函数节点自身唯一的id编号;
99.2)name:当前函数节点的全名;
100.3)classname:当前函数节点所在类节点的全名;
101.4)signature:当前函数节点的函数签名,全局唯一;
102.5)subsignature:简化的函数节点的函数签名
103.6)isinitialed:是否被初始化过,防止重复分析
104.7)modifier:当前函数节点的访问修饰符,例如public等;
105.8)parameters:当前函数节点的参数列表;
106.9)returntype:当前函数节点的返回值类型;
107.10)properties:当前函数节点自身的属性,例如是否为入口函数、是否为sink函数等。
108.步骤130:基于先验知识库和jimple构建statement链结构,属于预处理过程。statement链结构删减了jimple中的15种语法表示方式,最终用一个统一的结构表示语句。statement对鉴权框架中的数组形式进行了针对性优化。
109.statemen的数据结构如图2的示例所示,statement的属性如下:
110.1)llop:表示被赋值数组或者变量的数组名或者变量名
111.2)lrop:表示被赋值数组的下标,或者如果这个值为空,则表示被赋值变量
112.3)callee:表示调用者的名字
113.4)caller:表示被调用者的名字
114.5)args:储存了所有的调用参数的名字
115.除了以上的信息外,在实际的系统实现中,还需要以下属性:
116.1)alias:在jimple中,有非常多的变量实际指向同一个内存中的对象,这个值指向的是最初的变量,通过alias可以大大减少分析的复杂程度
117.2)linenumber:表示了语句在函数中的行号,用于函数的精确定位
118.图3所示为构建statement链结构的流程,构建statement链结构的具体步骤包括:
119.1)通过先验知识库,直接从内存中获取到鉴权框架配置的类和方法;
120.2)设定context环境变量,用于分析过程中的信息储存;
121.3)获取方法体对应的jimple代码;
122.4)遍历jimple代码,使用算法1进行statement结构构建;
123.5)判断鉴权框架的鉴权类型,使用算法2进行statement的链构建。
124.其中,算法1如下:
125.1)遍历jimple语句,寻找assignstmt、invokestmt、identitystmt这三种语句;
126.2)针对assignstmt,例如a=b.c(d),则给llop赋值a,给caller赋值b,给callee赋值c,给args赋值d;
127.3)针对invokestmt,例如b.c(d),给caller赋值b,给callee赋值c,给args赋值d;
128.4)针对identitystmt,例如a=b,则给llop赋值a,给caller赋值b。
129.算法2如下:
130.1)如果鉴权框架配置的类包含先验知识库标记的方法,则从方法中提取所有的statement节点,遍历节点;
131.2)针对每一个statement节点,取callee和caller,如果caller的做左操作数部位空,则将(callee,caller)元组存入内存;
132.3)针对每一个statement节点,提取其中的鉴权动作和url,将(动作,url)元组存入内存中;
133.4)上述元组信息,即为statement处理之后的用于漏洞扫描算法的statement链信息。
134.步骤140:基于先验知识库和jimple构建chainnode链结构。基于先验知识中的注解信息,扫描java web的所有方法,定位java web系统中的入口函数。基于编译后的jimple代码,从控制器的入口函数开始扫描被调用函数,采用深度优先算法扫描,以先验知识库中的敏感函数库里的函数签名信息为扫描终止条件,扫描出所有从入口函数到敏感函数的鉴权调用链通路,以chainnode链的数据结构储存调用链中的每一个节点。
135.chainnode的数据结构如图4所示的示例,chainnode的属性如下:
136.1)methodref:表示节点包含的完整方法
137.2)classref:表示节点包含的完整方法所在的类
138.3)id:由于部分方法会重名,所以通过id来进行唯一性识别
139.4)args:表示节点包含的完整方法中的参数
140.5)up:指向调用这个方法的上一个方法,在一条链里,up只指向一个方法
141.6)next:指向当前方法所调用的方法,为空时表示调链的终点
142.图5所示为构建chainnode链结构的流程,构建chainnode链结构的步骤包括:
143.1)基于先验知识库中的控制器入口的注解信息,扫描java web的所有方法,定位javaweb系统中控制器的入口函数(即在获取网站的jar包原始信息的过程中存到内存中的
入口函数信息),从该入口函数开始采用深度优先遍历算法扫描被调用函数,构建chainnode单个节点信息;
144.2)获取入口函数对应的jimple代码;
145.3)遍历jimple代码,对其中的invokestmt语句进行分析,获得函数的下一层调用关系,并存入chainnode节点,这时next属性完成设置;
146.4)根据深度优先遍历算法,继续分析下一层调用的所有方法,在分析之前把上一层的chainnode和下一层连接起来,这时up属性完成设置;
147.5)以先验知识库中的敏感函数库里的函数签名信息为扫描终止条件,扫描出所有从入口函数到敏感函数的鉴权调用链通路,并基于该鉴权调用链通路构建chainnode链结构。
148.步骤150:把statement形成的调用链和chainnode形成的调用图输入到漏洞检测算法中进行漏洞检测。
149.步骤151:根据statement链结构形成的调用链进行鉴权框架越权的漏洞检测,如图6所示,步骤包括:
150.1)从statement集合中取得一个调用链;
151.2)取得调用链的规则优先级;
152.3)尝试高优先级规则匹配低优先级,成功则有规则覆盖漏洞,失败则进入步骤4);
153.4)根据操作敏感性进行排序,判断低敏感性操作是否覆盖高敏感性操作,若是则有规则覆盖漏洞,否则进入步骤5);其中敏感性操作指的是鉴权动作,其中鉴权动作有:
154.(1)anon表示不拦截
155.(2)authc表示需要认证
156.(3)roles表示需要某种角色
157.(4)perms表明需要某种权限。
158.从(1)到(4),鉴权越来越严格,则越不敏感;
159.5)判断规则之间是否互相匹配,若是则有规则冲突漏洞检测,否则无漏洞;其中规则之间的匹配遵循的是antpathmatcher规则,即“?”匹配一个字符,“*”匹配一个目录,“**”匹配0个或多个目录。
160.步骤152:在根据chainnode链结构形成的调用图进行漏洞检测之前,首先根据chainnode链结构形成调用图,步骤包括:
161.1)获取入口函数对应的chainnode;
162.2)对入口函数的所有next进行判断,如果next连接到上层chainnode,则这是一个递归调用,终止这条chainnode链构建;
163.3)如果chainnode的next为敏感函数,则此调用链构建完成;
164.4)如果chainnode的next为空,则调用链结束,但是没有达到敏感函数,抛弃这条链;
165.5)如果chainnode的next不为空且不是敏感函数,则继续深度优先进行构建,由上述构建的调用链形成调用图。
166.步骤153:根据chainnode链结构形成的调用图进行漏洞检测,如图7所示,步骤包括:
167.1)从chainnode链中取出一条,开始从入口方法遍历next。
168.2)判断是否为外部库类,外部库逻辑过于复杂且在大多数情况下不参与权限鉴别,所以如果是外部库类就要跳过。
169.3)判断是否在next里调用自身,过滤掉无限自我调用的函数。
170.4)判断是否在next里有敏感函数,如果是,则得到一条通路。
171.5)判断是否还有next,有next则需要继续递归遍历。
172.6)完成2-5的判断后,查看是否还有chainnode,没有就比较通路,输出漏洞信息。有chainnode则继续从1开始。
173.步骤160:得到漏洞信息数据。
174.实验测试:
175.本实验根据本发明提出的技术方案设计了一个原型系统,在测试方面将从效果和效率两个方面进行针对性实验。一共进行了四个实验,并与目前主流的商业静态分析工具fortify sca 20.2.2.0003版本进行比较。测试集为cve-2019-3778、cve-2020-11989、cve-2016-6802、cve-2020-1957、cve-2020-13933、cve-2020-17510、cve-2020-17523、cve-2021-41303和2个github开源springboot系统pybbs和vul-java。代码量分别为21.1mb、15.5mb、14.7mb、15.5mb、15.5mb、15.6mb、15.6mb、15.6mb、70.1mb、82.7mb。
176.测试结果为本系统全部检出对应越权漏洞,fortify未检出cve-2021-41303、pybbs和vul-java。本系统消耗时间为107、46、53、42、43、38、43、39、277、370秒。fortify消耗时间为432、294、285、274、245、265、281、284、891、1129秒。根据以上结果,可以表明原型系统针对java web的越权漏洞的检测具有更好的性能和功能。
177.最后所应说明的是,以上实施案例仅用以说明本发明的技术方案而非限制,尽管使用事例对本发明进行了详细说明,本领域的技术人员应当理解,可对本发明的技术方案进行修改或者等价替换,而不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。
技术特征:
1.一种java web系统的越权漏洞检测方法,其特征在于,步骤包括:获取网站的jar包,若获取的是网站的源码,则编译成网站的jar包;提取jar包中的信息,将jar包中的字节码编译为jimple中间代码;构建先验知识库,该先验知识库包括鉴权框架的配置信息和mvc架构的控制器注解信息,其信息内容是java web系统的类和方法的签名,用以定位指定类和函数的位置;还包括敏感函数库sinks,包括java web系统中后端部分的敏感函数和敏感函数的函数签名;基于先验知识库和jimple中间代码,构建statement链结构;基于先验知识库和jimple中间代码,构建chainnode链结构;根据statement链结构形成的调用链进行漏洞检测,找出鉴权框架越权漏洞;根据chainnode链结构形成的调用图进行漏洞检测,找出控制器越权漏洞。2.如权利要求1所述的方法,其特征在于,提取jar包中的信息的步骤包括:在jar包所在目录创建lib目录和classes目录;解压jar包,以深度优先遍历的方法搜索所有.class文件,并存入classes目录;以深度优先遍历的方法搜索所有.jar文件,存入lib目录;对每一个.class文件进行分析,并装载到内存;对装载到内存的类和类中的方法的基本信息进行分析,分析是否含有入口函数注解信息或是否匹配敏感函数签名,并标记;对每一个类,分析其是否有父类,如有则在内存中存入父子类关联信息,否则在内存中寻找父类,如果没有找到,则设置该类为虚类;对每一个类,分析其是否含有接口,如有则在内存中存入接口信息,否则在内存中寻找接口类,如果没有找到,则设置该类为虚类。3.如权利要求1所述的方法,其特征在于,基于先验知识库和jimple中间代码构建statement链结构的步骤包括:通过先验知识库,直接从内存中获取到鉴权框架配置的类和方法;设定context环境变量,并获取方法体对应的jimple代码,遍历jimple代码,进行statement链结构构建;判断鉴权框架的鉴权类型,进行statement链结构构建。4.如权利要求3所述的方法,其特征在于,所述遍历jimple代码,采用以下步骤进行statement链结构构建:遍历jimple语句,寻找assignstmt、invokestmt、identitystmt这三种语句;针对assignstmt语句,对llop、caller、callee、args进行相应赋值;针对invokestmt语句,对caller、callee、args进行相应赋值;针对identitystmt语句,对llop、caller进行相应赋值。5.如权利要求3所述的方法,其特征在于,所述判断鉴权框架的鉴权类型,采用以下步骤进行statement链结构构建:如果鉴权框架配置的类包含先验知识库标记的方法,则从方法中提取所有的statement链结构的节点并进行遍历;针对每一个statement链结构的节点,取callee和caller,如果caller的做左操作数部位空,则将(callee,caller)元组存入内存;
针对每一个statement链结构的节点,提取其中的鉴权动作和url,将(动作,url)元组存入内存中;由(callee,caller)元组和(动作,url)元组构成statement链结构。6.如权利要求1所述的方法,其特征在于,基于先验知识库和jimple中间代码构建chainnode链结构的步骤包括:从内存中获取所述入口函数的信息,采用深度优先遍历的方法,构建chainnode单个节点信息;基于先验知识库中的控制器入口的注解信息,扫描java web的所有方法,定位java web系统中控制器的入口函数,从该入口函数开始采用深度优先遍历算法扫描被调用函数,构建chainnode单个节点信息;获取入口函数对应的jimple中间代码,遍历jimple中间代码,对其中的invokestmt语句进行分析,获得入口函数的下一层调用关系,并存入chainnode节点,完成next属性设置;根据深度优先遍历算法继续分析下一层调用的所有方法,把上一层的chainnode和下一层连接起来,并根据深度优先遍历继续分析下一层调用的所有方法,完成up属性设置;以先验知识库中的敏感函数库里的函数签名信息为扫描终止条件,扫描出所有从入口函数到敏感函数的鉴权调用链通路,并基于该鉴权调用链通路构建chainnode链结构。7.如权利要求1所述的方法,其特征在于,根据statement链结构形成的调用链进行漏洞检测的步骤包括:从statement链结构中提取一个调用链,并获取该调用链的规则优先级;以高优先级规则尝试匹配低优先级url,若匹配成功,则含有规则覆盖漏洞;若匹配失败,则根据操作敏感性进行排序,判断低敏感性操作是否覆盖高敏感性操作,若覆盖,则有规则覆盖漏洞;若未覆盖,则判断规则之间是否互相匹配,若匹配,则有规则冲突漏洞检测,否则无漏洞。8.如权利要求1所述的方法,其特征在于,以chainnode链结构形成调用图的步骤包括:获取入口函数对应的chainnode;对入口函数的所有next进行判断,如果next连接到上层chainnode,则判断为递归调用,终止该chainnode链构建;如果chainnode的next为敏感函数,则调用链构建完成;如果chainnode的next为空,则调用链结束并丢弃;如果chainnode的next不为空且不是敏感函数,则继续深度优先遍历并进行调用链构建;由上述构建的调用链形成调用图。9.如权利要求8所述的方法,其特征在于,根据chainnode链结构形成的调用图进行漏洞检测的步骤包括:从chainnode链中取出一条,开始从入口函数遍历next;判断next是否为外部库类,若是则跳过;判断是否在next里调用自身,过滤掉无限自我调用的函数;判断是否在next里有敏感函数,若是则得到一条通路;
判断是否还有next,若有next则继续递归遍历;进行上述判断,直到没有chainnode链,通过比对所有通路来分析是否有鉴权缺失,输出漏洞信息。10.一种java web系统的越权漏洞检测系统,其特征在于,包括存储器和处理器,在该存储器上存储有计算机程序,该处理器执行该程序时实现权利要求1-9任一项所述方法的步骤。
技术总结
本发明公开了一种Java Web系统的越权漏洞检测方法及系统,涉及计算机网络安全和程序的静态分析领域,通过获取网站的JAR包或网站源码编译成的JAR包,通过编译得到Jimple中间代码;构建先验知识库;基于先验知识库和Jimple中间代码,构建Statement链结构;基于先验知识库和Jimple中间代码,构建ChainNode链结构;根据Statement链结构形成的调用链进行漏洞检测,找出鉴权框架越权漏洞;根据ChainNode链结构形成的调用图进行漏洞检测,找出控制器越权漏洞。本发明通过获取网站JAR包或者源代码,通过在源码和字节码层面的检测分析,即可分析并检测网站中存在的越权漏洞。即可分析并检测网站中存在的越权漏洞。即可分析并检测网站中存在的越权漏洞。
技术研发人员:刘奇旭 刘清越 曹雅琴 谭儒 李香龙 何松林 姚敦宇
受保护的技术使用者:中国科学院信息工程研究所
技术研发日:2023.06.14
技术公布日:2023/9/14
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/