【问题标题】:Sandbox JVM to secure server from untrusted sources沙盒 JVM 以保护服务器免受不受信任的来源
【发布时间】:2010-10-25 00:59:05
【问题描述】:

在接受和执行上传的不受信任的代码时,如何保护我的服务器免受恶意活动?

用户应该能够实现我的界面和给定的数据,执行一些计算并返回数据。不需要 I/O 操作,当然也不需要线程/进程操作或其他愚蠢行为。

使用 java.policy 文件可以拒绝一切(不授予任何内容)。

$ cat test.policy 
grant {
};

使用此策略文件,未授予的操作将导致安全异常。

$ cat Print.java
public class Print {
    public static void main(String a[]) throws Exception {
        System.out.println(System.getProperty("os.name"));
    }
}

$ javac Print.java
$ java -Djava.security.manager -Djava.security.policy==test.policy Print
Exception in thread "main" java.security.AccessControlException: 
  access denied (java.util.PropertyPermission os.name read)
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
    at java.security.AccessController.checkPermission(AccessController.java:546)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
    at java.lang.SecurityManager.checkPropertyAccess(SecurityManager.java:1285)
    at java.lang.System.getProperty(System.java:650)
    at Print.main(Print.java:3)

这是万无一失的吗?我是否需要采取更多措施来保护我的服务器环境不受不受信任的来源的影响?

【问题讨论】:

    标签: java security jvm sandbox


    【解决方案1】:

    如果我是你,我不会简单地依赖 SecurityManager。是的,您的配置看起来是正确的,如果 Java 沙箱完美无缺,这就足够了。但是看看每个 Java 安全版本中修复了多少 Java 漏洞。例如,latest Oracle Java CPU。很多这些 Java 漏洞都是从沙盒中逃脱的。这在客户端非常糟糕(有几个人主张从浏览器中关闭 Java),但在服务器端会更糟,因为攻击者不必引诱您访问他们的站点,他们可以攻击您的站点服务器。

    例如,目前我个人有几个此类漏洞正在等待 Oracle 解决,或者我正在将它们传达给 Oracle。我不是唯一拥有它们的研究人员。也一定有坏人拥有它们。因此,即使您在新版本发布后就虔诚地更新您的 Java,您也不安全。

    我认为至少您应该在操作系统级别、权限等方面拥有一些东西来控制服务器进程。抱歉,我没有很好的建议,但我只是说不,你绝对不能依赖 JVM 沙盒来确保服务器的安全。

    【讨论】:

    • 听起来不错。如果我也以非特权用户的身份在 linux VM 中执行呢?
    • 对我来说似乎很好,但我不能很有权威地谈论这个。我只知道当与整个世界对抗时,仅 JVM 的安全性就很脆弱。
    猜你喜欢
    • 1970-01-01
    • 2011-08-03
    • 2017-10-25
    • 2014-05-23
    • 2017-12-04
    • 2011-06-01
    • 2014-04-15
    • 2015-12-16
    • 1970-01-01
    相关资源
    最近更新 更多