TABBY 是一款针对 Java 语言的静态代码分析工具,可用于快速发现多种类型的 Java 语言相关的漏洞。
TABBY 使用静态分析框架 Soot 作为语义提取工具,将JAR/WAR/CLASS文件转化为代码属性图, 并使用 Neo4j 图数据库来存储生成的代码属性图CPG。
此外,通过扩展 Neo4j 的路径遍历逻辑,TABBY 可以使用简单的 cypher 语句即可完成复杂污点分析输出潜在的漏洞调用链路。
使用 Tabby 需要有以下环境:
- JAVA 环境
- 可用的 Neo4j 图数据库
- Neo4j Browser 或者其他 Neo4j 可视化的工具或者 Tabby 的 IDEA 插件
具体的使用方法参见: Tabby Quick Start
开发 Tabby 的初衷是想要提高代码审计的效率,尽可能的减少人工检索的工作量
使用 tabby 生成的代码属性图可以完成以下的工作场景:
- 挖掘目标项目中的反序列化利用链,支持大多数序列化机制,包括 Java 原生序列化机制、Hessian、XStream 等
- 挖掘目标项目中的常见 Web 漏洞,支持分析 WAR/JAR/FATJAR/JSP/CLASS 文件
- 搜索符合特定条件的函数、类,譬如检索调用了危险函数的静态函数
利用 tabby 生成后的代码属性图,在 Neo4j 图数据库中进行动态自定义漏洞挖掘/利用链挖掘。
- 现有利用链覆盖
- papers && slides
- KCon 2022 Tabby: Java Code Review Like A Pro
- KCon 议题补充 基于代码属性图的自动化漏洞挖掘实践
- DSN 2023 Tabby: Automated Gadget Chain Detection for Java Deserialization Vulnerabilities
- BlackHat EU 2024 Tabby: Simplifying the Art of Java Vulnerability Hunting
- ICASSP 2025 VulKiller: Java Web Vulnerability Detection with Code Property Graph and Large Language Models
- CVEs
- CVE-2021-21346 如何高效的挖掘 Java 反序列化利用链?
- CVE-2021-21351
- CVE-2021-39147 如何高效地捡漏反序列化利用链?
- CVE-2021-39148
- CVE-2021-39152 m0d9
- CVE-2021-43297
- CVE-2022-39198 yemoli
- CVE-2023-23638
如果使用中存在其他问题,欢迎在 discussions 提问!
如果使用中发现了 Tabby 实现上的 bug,欢迎在 issues 提交相关错误详情!
当初,在进行利用链分析的过程中,深刻认识到这一过程是能被自动化所代替的(不管是 Java 还是 PHP)。但是,国内很少有这方面工具的开源。GI 工具实际的检测效果其实并不好,为此,依据我对程序分析的理解,开发了 tabby 工具。我对 tabby 工具期望不单单只是在利用链挖掘的应用,也希望后续能从漏洞分析的角度利用 tabby 的代码属性图进行分析。我希望 tabby 能给国内的 Java 安全研究人员带来新的工作模式。
当然,当前版本的 tabby 仍然存在很多问题可以优化,希望有程序分析经验的师傅能一起加入 tabby 的建设当中,有啥问题可以直接联系我哦!
如果 tabby 给你的工作带来了便利,请不要吝啬你的🌟哦!
如果你使用 tabby 并挖到了漏洞,非常欢迎提供相关的成功案例 XD
如果你有能力一起建设,也可以一起交流,或直接 PR,或直接 issue
- 优秀的静态分析框架 soot
- gadgetinspector
- ysoserial 和 marshalsec