【发布时间】:2012-12-20 18:18:07
【问题描述】:
有没有办法将一些 java 字节码运行到正在运行的 JVM 的一个特别受限的部分?我正在考虑访问非常小的内存(可能只有几十千字节)并且无法访问任何外部世界(除了那个内存)。
我们的目标是在这个安全的环境中执行一些用户提供的字节码,以使主机永远不会崩溃或泄漏来自恶意字节码执行的信息。
【问题讨论】:
有没有办法将一些 java 字节码运行到正在运行的 JVM 的一个特别受限的部分?我正在考虑访问非常小的内存(可能只有几十千字节)并且无法访问任何外部世界(除了那个内存)。
我们的目标是在这个安全的环境中执行一些用户提供的字节码,以使主机永远不会崩溃或泄漏来自恶意字节码执行的信息。
【问题讨论】:
您可以在安全沙箱中运行不受信任的字节码,并设置沙箱以防止与外界通信。当您运行不受信任的小程序时,这是浏览器驻留的 JVM 所做的……除了您需要更严格的沙箱限制。 (小程序沙箱不会阻止所有网络连接。)
参考:How do I create a Java sandbox?
但是,完全控制恶意代码的作用是不可能的。例如,如果它决定进入一个无限循环或分配一个巨大的数据结构,你的 JVM 的受信任部分没有防弹的方法来阻止它。如果 JVM、类库或沙箱中存在安全漏洞,那么流氓代码就有可能利用它。
请注意,这些都不涉及将代码限制在 RAM 的特定区域。你不能在 Java 中做到这一点。
【讨论】:
您可以使用JavaPathfinder (JPF) 进行此类练习。 JPF 是一个模型检查工具,它获取源代码/字节码并在自己的虚拟机中执行,您可以定义各种属性(无死锁、无限循环等)进行检查。
JPF 作为独立工具运行,因此很难将其集成到您的应用程序中,但也许您可以从外部调用它,然后只查询结果。
【讨论】: