代码之家  ›  专栏  ›  技术社区  ›  Johannes Kuhn

模块边界也是安全边界吗?

  •  7
  • Johannes Kuhn  · 技术社区  · 6 年前

    无非法访问( --illegal-access=deny jdk.unsupported (使用完成) accessClassInPackage 支票),看起来像 ReflectPermission "suppressAccessChecks" 不会再导致一个完整的沙盒逃脱。

    以下是设置:

    • 这个java.policy策略文件授予所有代码 ReflectPermission“suppressAccessChecks” .
    • 使用默认的java安全管理器。这是通过添加 -Djava.security.manager
    • 通过添加 --非法访问=拒绝 到VM选项。

    • 已安装SecurityManger。(为什么我还要说这个?)
    • RuntimePermission("loadLibrary.*") -这是不允许的
    • 访问 sun.misc.Unsafe 你需要进入 RuntimePermission("accessClassInPackage.sun.misc") -这是不允许的
    • 访问,例如。 ClassLoader.defineClass 通过反射和 setAccessible(true) , java.base 必须打开 java.lang 你的模块-它没有。

    所以要么:

    • 如果 ReflectPermission“suppressAccessChecks” 是否批准?
    • 或者将模块边界视为安全边界,这样的沙盒旁路将被视为安全缺陷?

    简而言之:

    my.policy :

    grant {
        permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
    };
    

    Main.java :

    public class Main {
        public static void main(String[] args) {
            // Your code here
        }
    }
    

    和你一起跑 java --illegal-access=deny -Djava.security.manager -Djava.security.policy=my.policy Main

    0 回复  |  直到 4 年前