Чрезмерное выделение памяти в безопасности Java Sandbox - PullRequest
2 голосов
/ 12 февраля 2009

В модели безопасности Java можно заблокировать самые опасные действия от ненадежных классов, но в последний раз, когда я проверял (несколько лет назад), все еще было возможно, чтобы ненадежный код выполнял атаку типа «отказ в обслуживании», постоянно выделяя памяти, пока JVM не выйдет из строя с OutOfMemoryException. Сейчас я не вижу улучшения ситуации.

У меня есть требование запускать недоверенный код от сторонних разработчиков внутри Java-приложения, и я хотел бы знать, возможно ли каким-либо образом ограничить пространство кучи / стека, которое класс или поток может выделить в модели безопасности Java. Таким образом предотвращая DoS-атаки на основе выделения памяти. Я знаю о -Xss, но, насколько я понимаю, это ограничивает все потоки, большинство из которых не нуждается в ограничении.

Я также рассмотрел вопрос создания контейнера для ненадежного кода, который будет запускаться в собственной JVM и взаимодействовать с основным приложением через сокеты, или проводить статический анализ ненадежного кода. Тем не менее, они оба звучат как больше усилий, чем я надеялся, хотя, если кто-то знает об этом трюке или библиотеке с открытым исходным кодом, я заинтересован.

Итак, есть ли способ ограничить объем памяти, который поток может выделить себе, или какой-либо другой способ предотвратить атаки памяти на отказ в обслуживании в Java?

Ответы [ 2 ]

2 голосов
/ 12 февраля 2009

В настоящее время нет способа сделать это со стандартными API в Java.

Больше людей заинтересовались этим, и для этого существует JSR, называемый API управления потреблением ресурсов , который может быть чем-то, на что можно обратить внимание.

1 голос
/ 12 февраля 2009

Вам нужно будет запустить ненадежный код в отдельном процессе. До сих пор могут существовать способы DoS, например, в старых версиях Windows вы могли бы легко использовать все ресурсы GDI (не пробовали недавно, сейчас у нас нет Swing).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...