一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于Java字节码技术的代码审计方案的制作方法

2022-05-27 00:17:38 来源:中国专利 TAG:

stack)和局部变量表(local variables array),并最终得到返回结果是否可以被参数标记“污染”;
12.(7)搜索生成调用链:用户提供输入入口(source)方法和危险函数(sink)方法;source方法(也可以是一个包,那包里的所有方法都将被当成输入入口)为输入入口,sink方法也就是常见的危险方法(漏洞);对于每个入口来说,其全部子方法调用、孙子方法调用等等递归下去,就构成了一棵树;利用(5)得到的信息,从根节点(入口)出发,找到一条通往叶子节点的道路,使得这个叶子节点正好是我们所期望的漏洞方法;对树的遍历采用的是广度优先(bfs)算法,而且对于已经检查过的节点会直接跳过,避免了环路;
13.(8)输出:使用画图工具生成所有方法调用关系图,将所有source到sink的调用链进行着色,输出符合预期的调用关系图;针对目前已知危险漏洞,输出漏洞的审计报告。
14.与现有技术相比,本发明的有益效果如下:
15.本发明通过asm扫描jar包或者war包中的字节码,获取包中的方法调用关系,然后对方法调用关系进行逆拓扑排序,并且分析每个方法的“污点”传递关系。最后根据用户提供的输入入口和漏洞方法搜索整个方法调用关系图,找到含有漏洞的调用链。
附图说明
16.附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
17.图1是本发明的实施例示意图之一;
18.图2是本发明的实施例示意图之二。
具体实施方式
19.以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。其中附图中相同的标号全部指的是相同的部件。
20.实施例1
21.如图1-2,本发明提供一种基于java字节码技术的代码审计方案,以ssrf漏洞审计为例:
22.(1)asm字节码分析:编写springboot项目,自定义接口ssrfservice,里面包含4个方法:ssrf1、ssrf2、ssrf3、ssrf4,在实现类中重写这4个方法,其中ssrf1使用含有url.openconnection()的方法(此方法会导致ssrf漏洞)实现,其余三种方法均使用不包含ssrf漏洞的方法实现。将项目打包生成jar包。使用asm分析字节码得到所有的方法信息、类信息、和继承关系。继承关系指示该类的父类和实现的接口都有哪些。
23.(2)获取调用关系:利用asm遍历jar包里的class文件(字节码),记录所遍历的方法以及该方法调用了哪些子方法,方法之间形成方法调用关系图。
24.(3)特殊语法处理:处理特殊语法中的方法调用和类信息。隐式调用处理,编译器编译源代码时隐式调用会被自动处理为显式调用;lambda表达式处理,使用asm手动识别字节码中的lambda表达式,提取表达式中的接口调用;匿名内部类处理,使用asm的visitinnerclass()方法访问内部类,再将获取到的内部类当成普通类进行分析接口实现
和方法调用。
25.(4)逆拓扑排序:利用(2)(3)得到的信息将方法调用图转换成有向无环图(tag)。方法调用图可能存在环路,使用深度遍历(dfs)加方法标记(已经遍历过的方法后面再遇到就直接跳过,避免了环路影响)对调用图进行逆拓扑排序。
26.(5)参数-返回值关系分析:对入参进行“污点”标记。
27.(6)参数传递关系分析:再次利用asm扫描全部方法来进行方法字节码的分析。它通过模拟java虚拟机在执行方法时的操作数栈(operand stack)和局部变量表(local variables array)的变化,最终得到返回结果是否可以被参数标记污染。
28.(7)搜索生成调用链:将此项目中的controller包名作为输入入口(source)。将url.openconnection()方法作为漏洞(sink)。利用(5)得到的信息,从根节点(入口)出发,找到一条通往叶子节点的道路,使得这个叶子节点正好是我们所期望的sink方法。对树的遍历采用的是广度优先(bfs)算法,而且对于已经检查过的节点会直接跳过,避免了环路。
29.(8)输出从controller包中的方法到实现了ssrfservice接口类中的ssrf1()方法的方法调用链;输出ssrf漏洞审计报告。
30.最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。


技术特征:
1.一种基于java字节码技术的代码审计方案,其特征在于,包括以下步骤:(1)asm字节码分析:根据jdk和输入的jar或者war得到所有的字节码;使用asm分析字节码得到所有的方法信息、类信息、和继承关系;继承关系指示该类的父类和实现的接口都有哪些;(2)获取调用关系:利用asm遍历字节码时记录所遍历的方法以及该方法调用了哪些子方法,方法之间形成方法调用关系图;(3)特殊语法处理:处理特殊语法中的方法调用和类信息;隐式调用处理,编译器编译源代码时隐式调用会被自动处理为显式调用;lambda表达式处理,使用asm手动识别字节码中的lambda表达式,提取表达式中的接口调用;匿名内部类处理,使用asm的visitinnerclass()方法访问内部类,再将获取到的内部类当成普通类进行分析接口实现和方法调用;(4)逆拓扑排序:利用(2)(3)得到的信息将方法调用图转换成有向无环图(tag)提供给后面步骤做链路追踪;如果存在子方法调用并传递了父方法参数给子方法时,需要先判断子方法返回值与子方法参数的关系;因此需要让子方法的判断在前面,这就是要进行逆拓扑排序的原因;方法调用图可能存在环路,使用深度遍历(dfs)加方法标记(已经遍历过的方法后面再遇到就直接跳过,避免了环路影响)对调用图进行逆拓扑排序;(5)参数-返回值关系分析:这里的关系指的是每个方法的返回结果与方法参数的关系,表明方法的返回值会被哪些参数影响,会影响返回值的参数被标记为“污点”;(6)参数传递关系分析:这里的参数传递关系指的是方法的参数与其所调用的子方法的关系,即子方法的参数是否可以被父方法的参数所影响;再次利用asm扫描全部方法来进行方法字节码的分析;它通过标记追踪java虚拟机在执行方法时的操作数栈(operand stack)和局部变量表(local variables array),并最终得到返回结果是否可以被参数标记“污染”;(7)搜索生成调用链:用户提供输入入口(source)方法和危险函数(sink)方法;source方法(也可以是一个包,那包里的所有方法都将被当成输入入口)为输入入口,sink方法也就是常见的危险方法(漏洞);对于每个入口来说,其全部子方法调用、孙子方法调用等等递归下去,就构成了一棵树;利用(5)得到的信息,从根节点(入口)出发,找到一条通往叶子节点的道路,使得这个叶子节点正好是我们所期望的漏洞方法;对树的遍历采用的是广度优先(bfs)算法,而且对于已经检查过的节点会直接跳过,避免了环路;(8)输出:使用画图工具生成所有方法调用关系图,将所有source到sink的调用链进行着色,输出符合预期的调用关系图;针对目前已知危险漏洞,输出漏洞的审计报告。

技术总结
本发明公开了一种基于Java字节码技术的代码审计方案,简叙如下:通过ASM扫描Jar包或者War包中的字节码,获取包中的方法调用关系,父方法调用子方法;对方法调用关系进行逆拓扑排序,生成方法关系的有向无环图(TAG);分析每个方法的返回值和参数的关系,对参数进行污点标记;分析子方法的参数是否会被父方法参数影响,获取“污点”传递关系;最后根据用户提供的输入入口(source)和漏洞方法(sink)搜索整个方法调用关系图,找出输入入口到漏洞方法的方法调用链。法调用链。法调用链。


技术研发人员:郑振宇 王振 张氣箔 张坤洋
受保护的技术使用者:天翼电子商务有限公司
技术研发日:2021.12.30
技术公布日:2022/5/25
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献