Песочница JVM для защиты сервера от ненадежных источников - PullRequest
8 голосов
/ 25 октября 2010

Как защитить мой сервер от злонамеренных действий при принятии и выполнении загруженного, ненадежного кода?

Пользователи должны иметь возможность реализовать мой интерфейс и данные, выполнить некоторые вычисления и вернуть данные. Никаких операций ввода-вывода не требуется, и, конечно же, никаких манипуляций с потоками / процессами или другим дурачеством.

Используя файл 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 Ответ

10 голосов
/ 25 октября 2010

Я бы не стал полагаться на SecurityManager на вашем месте. Да, ваша конфигурация выглядит правильной, и этого было бы достаточно, если бы песочница Java была безупречна. Но посмотрите, сколько уязвимостей Java исправлено в каждом выпуске безопасности Java. Например, последний Oracle Java CPU . Многие из этих уязвимостей Java - те, которые уходят из Песочницы. Это очень плохо на стороне клиента (несколько человек выступают за отключение Java из браузера), но было бы еще хуже на стороне сервера, так как злоумышленникам не нужно заманивать вас на свой сайт, они могут просто атаковать ваш сервер.

Например, в настоящее время у меня лично есть несколько таких уязвимостей, которые я ожидаю, чтобы Oracle исправила их, или я нахожусь в процессе передачи их в Oracle. И я не единственный исследователь, у которого они есть. И, должно быть, плохие парни тоже их имеют. Поэтому, даже если вы будете религиозно обновлять Java, когда выйдет новая версия, вы не будете в безопасности.

Я думаю, что по крайней мере у вас должно быть что-то на уровне ОС, разрешения и т. Д., Чтобы контролировать процесс сервера. Извините, у меня нет хороших предложений, но я просто говорю, что нет, вы абсолютно не можете полагаться на JVM Sandbox для обеспечения безопасности на сервере.

...