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