代码之家  ›  专栏  ›  技术社区  ›  Synesso

沙盒JVM保护服务器免受不受信任的源的攻击

  •  8
  • Synesso  · 技术社区  · 14 年前

    在接受和执行上载的不可信代码时,如何保护服务器免受恶意活动的影响?

    用户应该能够实现我的界面和给定的数据,执行一些计算并返回数据。不需要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)
    

    这是万无一失的吗?我需要做更多的工作来保护我的服务器环境不受不可信的来源的影响吗?

    1 回复  |  直到 14 年前
        1
  •  10
  •   Sami Koivu    14 年前

    如果我是你的话,我不会仅仅依靠保安经理。是的,如果Java沙箱是完美无缺的,那么您的配置看起来是正确的,这就足够了。但是看看Java安全漏洞中有多少Java漏洞。例如, latest Oracle Java CPU . 许多Java漏洞是从沙箱中逃逸出来的。这是非常糟糕的客户端(几个人主张关闭Java从浏览器),但会更糟的服务器端,因为攻击者不必引诱你到他们的网站,他们可以攻击你的服务器。

    例如,目前我个人有几个这样的漏洞,我正在等待Oracle解决,或者我正在与Oracle通信。我不是唯一拥有它们的研究者。一定有坏人也有。所以即使你在新版本的第二个版本中虔诚地更新你的Java,你也不会是安全的。

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