目前个人理解,绕过 Java 安全沙箱一般有这些方式:
利用有缺陷的 API (较常见)
- 能够任意获取构造函数对象、方法对象、域对象、类对象
- 可以被直接或间接地调用
- 优点:稳定,容易利用
- 代表:CVE-2012-4681、CVE-2012-0507、CVE-2012-5076
- 缓冲区溢出
因为我对二进制并不熟,所以接下来说的都是 API 缺陷导致的漏洞。
绕过沙箱最重要的就是将 SecurityManager 设为 null,而更改 SecurityManager 也有几种方式:
获得一个高权限的 ClassLoader,然后加载提权类,在提权类中关闭 SecurityManager
获得一个有 AllPermission 的 AccessControlContext 对象,执行 setSecurityManager(null) 操作
- CVE-2012-4681,漏洞分析
其中 Java 的反射机制经常用到,如 CVE-2012-0507 里经典的类混淆。
一些资料:
空虚浪子心的 Java 安全文章
Java 沙箱安全总结
JVM 逃逸:分析、利用与防御
Hacking_java_sandbox_on_cloud_appEngine.ppt
简单谈谈Java Exploit.doc
Java 安全演进.docx
java 漏洞调试科普.docx
Security-Vulnerabilitie- in-Java-SE-2012-01-report.pdf
Security-Vulnerabilitie- in-Java-SE-2014-02-report.pdf
待续