Песочница в Linux - PullRequest
       82

Песочница в Linux

16 голосов
/ 19 июня 2009

Я хочу создать веб-приложение, которое позволит пользователю загружать некоторый код на C и видеть результаты его выполнения (код будет скомпилирован на сервере). Пользователям не доверяют, что, очевидно, имеет огромное значение для безопасности.

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

Загруженные программы будут довольно маленькими, поэтому они должны выполняться быстро (не более пары секунд). Следовательно, я могу завершить процесс после заданного времени ожидания, но как я могу гарантировать, что он не порождает новые процессы? Или, если я не могу, является ли уничтожение всего pgid надежным методом?

Как лучше всего это сделать, кроме как "вообще не делай этого"? :) Какие еще явные проблемы с безопасностью я пропустил?

FWIW, веб-приложение будет написано на Python.

Ответы [ 12 ]

0 голосов
/ 23 июня 2009

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

0 голосов
/ 20 июня 2009

Единственный шанс, который у вас есть, - запустить VirtualMachine, и у них могут быть уязвимости. Если вы хотите, чтобы ваша машина была взломана в краткосрочной перспективе, просто используйте разрешения и создайте специального пользователя с доступом, возможно, к одному каталогу. Если вы хотите отложить взлом на какой-то момент в будущем, запустите веб-сервер на виртуальной машине и перенеситесь на него. Вы захотите сохранить резервную копию этого, потому что вы, вероятно, взломали это менее чем через час и захотите перезапускать новую копию каждые несколько часов. Вы также захотите сохранить образ всей машины, чтобы просто переизображать все это раз в неделю или около того, чтобы преодолеть еженедельные взломы. Не позволяйте этой машине общаться с любой другой машиной в вашей сети. Черный список это везде. Я говорю о виртуальной машине и IP-адресах физической машины. Регулярно проводите аудит безопасности на любых других компьютерах других компьютеров в сети. Пожалуйста, переименуйте машины IHaveBeenHacked1 и IHaveBeenHacked2 и запретите доступ к ним в списках хостов и брандмауэрах.

Таким образом, вы можете на некоторое время снизить уровень взлома.

...