【问题标题】:Can one break a secury manager with sun.misc.unsafe?可以用 sun.misc.unsafe 破坏安全管理器吗?
【发布时间】:2011-04-23 02:19:20
【问题描述】:

在另一个question 的对话之后,提出了一个有趣的问题。

使用安全管理器加载的类受到相应安全性的保护。这种安全性可以禁用反射(例如)。

问题是:是否可以使用 sun.misc.unsafe 破坏安全管理器?如果是,怎么做?

编辑

SecuredClassLoader 更改为有问题的安全经理。

【问题讨论】:

    标签: java security classloader


    【解决方案1】:

    没有。 sun.misc.Unsafe 类需要访问检查,就像任何其他特权操作一样。您可以使用自定义类加载器或安全管理器来阻止它。这是一个带有空安全管理器的简单示例,显示它会抛出一个AccessControlException

    System.setSecurityManager(new SecurityManager());
    Unsafe unsafe = Unsafe.getUnsafe();
    

    【讨论】:

    • 这家伙忘了提到代码是在最终用户(可能是黑客)的机器上执行的。我相信它会改变整个游戏......有点;)
    • 是的,我同意这会改变整个游戏。我只是在回答这个具体问题,而将另一部分留给另一个问题:)
    • @road to yamburg 因此,我们已经确定,在受控服务器和桌面应用程序上运行代码时,情况并不相同。
    【解决方案2】:

    什么是“安全类加载器”?安全类加载器?尽管它的名字是不安全的。它所做的只是将类加载源限制到特定的代码位置。

    因此,您甚至不需要任何不安全的操作来“破坏”它。例如,确保在 SecureClassLoader 甚至获得控制权之前,替换的被黑类在类路径中。

    该线程中的某个人已经告诉过你——你不能在不安全的环境中拥有一个安全的位置。如果你的代码部署到用户机器上,用户就是上帝,没有 JVM 安全可以帮助你,因为 JVM 是更强大的原生事物之上的一个微小层。

    【讨论】:

    • 即使机器具有内存帘等可信计算设施? ;-)(哦,等等。我所知道的没有 JVM 实现使用任何 TC 功能。)
    • 还有一个排在用户肩膀上的伞兵?不,Java 还没有这个特性! :D
    • 我已经编辑了这个问题。您在用户机器上的类路径 + 部署中提出了一个很好的观点。
    猜你喜欢
    • 2012-08-30
    • 2015-10-03
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 2014-08-19
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    相关资源
    最近更新 更多