gpt4 book ai didi

java - 是否可以通过使用 JNI 来避免 jvm 安全性?

转载 作者:行者123 更新时间:2023-12-01 12:55:34 26 4
gpt4 key购买 nike

我一直在思考 jvm 安全的工作方式。原则是 jvm 始终信任并运行任何 native 代码。因此,从概念上讲,如果您的代码不调用 checkpermission(permission)无论是显式还是隐式,这意味着它永远不会失败任何安全验证。当然,所有这些验证调用通常都是在 Java API 类中完成的,因此我们不需要自己调用它们以获得内置权限。

现在,只要你使用像 FileOutputStream 这样的内置类,您的代码始终需要接受权限检查。但想了一会儿,我想知道是否可以通过使用 Java Native Interface 运行 c++ 代码来避免安全检查。

想象一下,您导入了一些 jar,而不是使用 FileOutputStream写入文件使用一些手工制作的 JNI,该 JNI 绑定(bind)到文件编写 C++ 程序(显然不调用任何 checkpermission() )。基于问题“How to bundle a native library and a JNI library inside a JAR?”,我了解到可以将所有内容捆绑在一个不错的恶意 jar 中。因此,使用此 jar 的任何代码都不再安全,因为从 jar 执行代码时不会发生安全验证。这意味着这个 c++ 程序可以有效地覆盖运行 jvm 的进程具有写权限的所有文件。

这是正确的思维方式,是有意的还是我错过了什么?

最佳答案

您是对的, native 代码不受 JVM 控制。如果 Java 安全管理器允许加载 JNI 库,则将其视为根本没有安全管理器。

这就是为什么,如果使用 SecurityManager,它很重要 不是 授予loadLibrary.* permission .

关于java - 是否可以通过使用 JNI 来避免 jvm 安全性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61177842/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com