Java Gadgets 搜索工具是如何工作的(Gadget Inspector)
Gadget Inspector 由 Ian Haken 于 2018 年 8 月在 DEF CON 上发布,其发布开创了Gadget 自动化挖掘的先河。Gadget Inspector 依靠Java ASM
技术,通过静态模拟 Java 程序运行过程中操作数栈以及局部变量表的动态变化来进行数据流跟踪从而实现污点分析进而进行Gadgets探测。
检测原理
Gadget Inspector 的核心逻辑包含5个步骤,分别是类信息分析、数据传播分析、调用图构造、入口探测以及Gadgets串联。
在第一步中 Gadget Inspector 利用 MethodDiscovery 类对 当前环境中所有类的方法、成员、继承结构进行解析并集中存储在特定的数据结构中以便后续进行
数据传播分析以及调用图构造。
在第二步中 Gadget Inspector 利用 PassthroughDiscovery 类运用 深度优先算法、逆拓扑排序等方式进行数据流分析从而确认方法入参与返回值的关系,
即入参是否能够污染到返回值,其根本目的在于确认关键参数是否可以被攻击者控制。
在第三步中 Gadget Inspector 通过 Java ASM 技术构造方法调用图,其目的在于确认主调方法与被调用方法参数之间的关系。
第四步中 Gadget Inspector 通过 SourceDiscovery 针对不同的夫序列化类型进行分发,通过对比第一步中形成的methodMap中存储的方法信息与预定义
的反序列化 Gadget Source点进行比较,从而确定当前项目中可被使用的反序列化入口方法。
在第五步中 Gadget Inspector 开始从Source点开始遍历调用图,直到找到一个方法与预定义的sink点相匹配则说明Gadget Inspector 找到了一条可以
使用的反序列化调用链。