【发布时间】:2020-07-25 10:03:22
【问题描述】:
我一直在思考 jvm 安全的工作方式。原则是 jvm 始终信任并运行任何本机代码。因此,从概念上讲,如果您的代码没有显式或隐式调用checkpermission(permission),这意味着它永远不会失败任何安全验证。当然,所有这些验证调用通常都在 Java API 类中完成,因此我们不需要自己调用它们以获得内置权限。
现在,只要您使用像 FileOutputStream 这样的内置类,您的代码始终需要接受权限检查。但是想了想,是否可以通过使用 Java Native Interface 运行 c++ 代码来避免安全检查。
假设您导入一些 jar,而不是使用 FileOutputStream 写入文件,而是使用一些手工制作的 JNI,该 JNI 绑定到文件编写 C++ 程序(显然不调用任何 checkpermission())。基于问题“How to bundle a native library and a JNI library inside a JAR?”,我了解到可以将所有内容捆绑在一个不错的恶意 jar 中。因此,使用此 jar 的任何代码都不再安全,因为从 jar 执行代码时不会发生安全验证。这意味着这个 c++ 程序可以有效地覆盖所有运行 jvm 的进程具有写权限的文件。
这是正确的思维方式,是有意为之还是我错过了什么?
【问题讨论】:
标签: java jar jvm java-native-interface java-security