thomasleplus/java-memory-safety
GitHub: thomasleplus/java-memory-safety
一份关于 Java 内存安全极限的研究,揭示语言与 JVM 保护机制可被绕过的条件与场景。
Stars: 0 | Forks: 0
# Java 内存安全
一项关于 Java 内存安全极限的研究。
[](https://github.com/thomasleplus/java-memory-safety/actions?query=workflow:"Maven")
[](https://github.com/thomasleplus/java-memory-safety/actions?query=workflow:"NPM")
## 目标
本项目的目的是研究 Java [内存
安全](https://en.wikipedia.org/wiki/Memory_safety) 的极限。Java
语言和 Java 虚拟机(JVM)提供了强大的机制来防止开发者错误管理内存。所有 Java
语言中的数组原语都带有边界检查,以防止缓冲区溢出等问题。语言不包含原始指针类型来
访问任意内存以防止内存访问违规(可怕的段错误)。JVM 的垃圾回收器减轻了悬空指针的
风险并减少了内存泄漏。
但 Java SDK 和第三方库提供了绕过这些保护的方法,以允许开发者探索常规 Java 应用程序
能力的极限(例如高效地操作大量数据)。Java 中的自管理内存通常被称为堆外内存(尽管
并非所有堆外内存都由应用程序管理,部分也由 JVM
自身使用)。在与非 Java 库(如操作系统库)交互时,堆外内存的使用也是必需的,以便交换数据。
## 演示
我曾在 [BSides London 2025](https://bsides.london/bsides-london-2025) 会议上以演讲形式展示了这项研究。
你可以观看 [录像](https://www.youtube.com/watch?v=xy46UYWCo2E) 或获取 [幻灯片](https://thomasleplus.github.io/java-memory-safety/bsides-london-2025)。
还有一份更长的 [幻灯片](https://thomasleplus.github.io/java-memory-safety/) 版本。
## 代码
[`unsafe`](unsafe/) 目录包含各种代码示例,展示如何**不**编写 Java
代码。正如其名称所暗示的,该目录中的代码并不安全,绝不能用于除说明本研究要点之外的任何目的。所有示例均可作为概念验证运行。它也可用于使用静态应用程序安全测试(SAST)工具检测内存安全问题的能力进行基准测试。
[`safe`](safe/) 目录包含更安全的替代实现。
[`exploit`](exploit/) 目录包含用于自动化利用上述不安全实现的脚本。这些代码也可用于与安全实现进行对比测试。
## 扫描器
关于使用各种代码扫描工具检测不安全类的方法指导:
- [Checkstyle](checkstyle/)
- [PMD/Codacy](pmd/)
- [Semgrep](semgrep/)
- [SonarQube](sonar/)
- [SpotBugs](spotbugs/)
[`reports`](reports/) 目录包含在研究本项目过程中收集的一些数据。
## 结果
本研究的结果在本文档中分享,关键要点已发布在 OSSF 内存安全特别兴趣组(SIG)的最佳实践系列中(尤其是
[内存安全默认语言](https://github.com/ossf/Memory-Safety/blob/main/docs/best-practice-memory-safe-by-default-languages.md)
和 [内存安全默认语言与非内存安全默认语言之间的交互](https://github.com/ossf/Memory-Safety/blob/main/docs/best-practice-interfacing.md))。
## 安全性
请阅读 [SECURITY.md](SECURITY.md) 了解我们的安全策略以及如何报告安全漏洞。
## 行为准则
请阅读 [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) 了解我们的行为准则。
## 许可证
本项目根据 [LICENSE](LICENSE) 文件中规定的条款进行授权。
标签:Cilium, Java SDK, JS文件枚举, JVM, Maven, NPM, Off-Heap Memory, 内存安全, 内存安全研究, 内存泄漏, 内存管理, 内存绕过, 内存防护, 后端开发, 堆外内存, 开发实践, 技术研究, 指针安全, 操作系统交互, 数据交换, 漏洞验证, 第三方库, 缓冲区溢出, 边界检查