Как сделать песочницу для приложений?

66

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

мишель
источник
Я никогда не использовал его, поэтому я не могу дать полный ответ, но AFAIK, AppArmor ( wiki.ubuntu.com/AppArmor ) должен быть в состоянии сделать это.
Хавьер Ривера
Проверьте Vagrant, обертку для VirtualBox. vagrantup.com и [в Википедии] ( en.wikipedia.org/wiki/Vagrant_(software%29) и на github
Янус Троелсен
@JavierRivera FWIW, а также SELinux. Не знаю, как легко было бы запустить Ubuntu.
TC1
Apparmor уже установлен по умолчанию в Ubuntu, так что должно быть проще.
Хавьер Ривера
1
Кажется, что у них много возможностей: виртуализация с использованием чего-то вроде Virtualbox (например, Vagrant), chroot, LXC, App Armor и SE Linux.
Flimm

Ответы:

26

Если они действительно не заслуживают доверия, и вы хотите быть уверенным, вы должны установить отдельное поле. Либо действительно, либо виртуально.

Кроме того, вы не хотите, чтобы этот ящик находился в той же сети, что и ваши важные вещи, если вы достаточно параноик. Во всех решениях вы бы создали отдельного пользователя без прав, чтобы не открывать слишком много инструментов для потенциального компромиссного решения.

  • Поэтому самым безопасным вариантом будет отдельное поле, физически удаленное из вашей сети.
  • Можно добавить немного, добавив его в физическую сеть, но в другой подсети: внутри нет «реального» соединения
  • Виртуальная машина может быть вариантом, но, возможно, придется отказаться от некоторой производительности

Если вы обязаны запустить его в том же окне, у вас есть, например, эта опция

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

В конце вам может понадобиться настроить конкретную модель песочницы без хлопот виртуализации или отдельных блоков, или ситуации все еще подверженной риску chroot. Я сомневаюсь, что это то, что вы имели в виду, но посмотрите на эту ссылку для получения более подробной информации.

Nanne
источник
Насколько безопасным было бы с точки зрения безопасности запускать ненадежное приложение на виртуальной машине? Я слышал о теоретических эксплойтах, которые могут получить доступ к операционной системе хоста через гипервизор и заразить его.
Зуаллауз
Возможно, хотя в настоящее время я не знаю о таких реальных угрозах, конечно же, о нецелевых. Вы должны учитывать, что злоумышленник, пишущий вредоносное ПО в игре, не пойдет на все это. Теперь, конечно, копье-атака на вас, если они знают ваше расположение, но я все же не думаю, что это ваше первое беспокойство. Если вы уверены, что они недобросовестны, вы все равно должны установить изолированную коробку, по сети.
Нанне
14

Firejail довольно новый и находится в постоянном развитии. Легко использовать.

Вы можете просто:

sudo apt-get install firejail
firejail app
penguinforsupper
источник
Добро пожаловать в Спросите Ubuntu! Хотя это может теоретически ответить на вопрос, было бы предпочтительным включить здесь основные части ответа и предоставить ссылку для справки.
Марк Кирби
12

Docker поможет вам настроить контейнеры, которые вы можете запускать из вашего текущего ядра, но хранить отдельно от остальной части вашей системы. Это кажется довольно современным, но в Ubuntu есть хорошая документация.

Н. Томас Кор
источник
4
Я думаю, что это хороший вариант для большинства случаев. Тем не менее, «недоверенная» часть первоначального вопроса меня немного волнует. Доступны продемонстрированные хаки, которые могут позволить приложению «вырваться» из своего контейнера. А учитывая, что Docker-контейнеры запускаются с правами суперпользователя, это может быть опасно, если вашей целью было изолировать приложения друг от друга.
Крис Холдорф
@CrisHoldorph правильно, хотя Docker становится лучше, и я даже думаю, что в настоящее время возможно запустить докер непривилегированным (не как root). Это, безусловно, верно для LXC, и LXD (иногда так называемый демон LXC) может значительно упростить создание таких контейнеров. Таким образом, современные непривилегированные контейнеры можно рассматривать как улучшение с точки зрения безопасности по сравнению с chroot. Но они не являются непробиваемым барьером!
Гюйгенс
Докер не инструмент безопасности!
Федерико
10

Полная виртуализация / эмуляция (VirtualBox)

Одним из возможных решений является программное обеспечение для виртуализации, такое как VirtualBox, которое вы можете найти в центре программного обеспечения.

  • Установить виртуальную коробку
  • Создать виртуальную машину с поддержкой сети
  • Установите Ubuntu или, возможно, более легкий рабочий стол, такой как Lubuntu
  • Полностью обновить установленную ОС (внутри Виртуальной коробки)
  • Отключить сеть на виртуальной машине
  • Сделать снимок

Теперь вы можете установить программное обеспечение, которому вы не доверяете, чтобы увидеть, что оно делает. Это не может расстроить внешний мир или вы размещаете ОС, так как у нее нет доступа.

Тем не менее, он может разрушить вашу виртуальную машину, но если это так, вы можете просто восстановить из своего снимка.

Могут быть и другие способы ограничения разрушительной силы ненадежного программного обеспечения, но это самый надежный метод, который я могу придумать.

Контейнерная виртуализация (Docker / LXC)

Другой вариант может быть LXC больше информации здесь

LXC - это пакет управления пользовательским пространством для контейнеров Linux, облегченный механизм виртуальной системы, который иногда называют «chroot на стероидах».

LXC создается из chroot для реализации законченных виртуальных систем, добавляя механизмы управления ресурсами и изоляции в существующую инфраструктуру управления процессами Linux.

Это доступно в программном центре. У меня нет опыта, однако.

Уоррен Хилл
источник
1
Это просто неудобно. Создайте целую виртуальную машину только для запуска игр !! это не очень хорошее решение. Не думаете ли вы настройки GID процесса и UID будет WAY легче , чем это?
Джек Майерц
На самом деле, я думаю, что настроить виртуальную коробку достаточно просто, поэтому я бы не стал делать снимок. Если это повредит мою виртуальную машину, я могу отказаться от нее.
Эмори
Даунвот: Фактически неверные рассуждения, даже если решение является правильным. Программы не должны иметь те же привилегии, что и пользователь, выполняющий их. Linux и Ubuntu поддерживают MAC с годами. Ubuntu использует для этого AppArmos, и вы можете легко разместить программу в каталоге.
Хавьер Ривера
@JavierRivera «легко» - это не правильное слово, иначе профиль AppArmor и политика SELinux для Firefox будут поставляться по умолчанию с каждым дистрибутивом, а это не так. Ubuntu поставляет такой профиль, но по умолчанию он не активен, поскольку нарушает некоторые «популярные» функции Firefox. Для большинства приложений с графическим интерфейсом не так много политик SELinux, таким приложениям требуется слишком много разрешений, чтобы их можно было назвать изолированными. Если вы не согласны, пожалуйста, оставьте здесь ссылки на безопасную песочницу Firefox, используя либо AppArmor, либо SELinux! Если бы вы могли, я был бы очень счастлив :-)
Huygens
Вы, вероятно, должны определить «безопасный» для значимого ответа, но политика Firefox по умолчанию в Ubuntu для меня вполне разумна. Конечно, это не так удобно, как использование ничего, но для меня это все же гораздо удобнее, чем полноценная виртуальная машина (что также нарушает популярные функции Firefox).
Хавьер Ривера
9

Mbox

Mbox - это легкий механизм песочницы, который любой пользователь может использовать без специальных привилегий в обычных операционных системах.

Я использовал это для нескольких вещей надежно.

0x78
источник
4

subuser

Вы можете использовать subuser для песочницы ваших приложений с Docker. Это позволяет вам делать такие вещи, как приложения для песочницы с графическим интерфейсом, что нелегко сделать напрямую с Docker.

sudo apt install subuser
timthelion
источник
1

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

Phlya
источник
2
Это не защищает систему от вредоносного программного обеспечения, которое все еще может быть установлено или запущено - это также не является «песочницей» в том смысле, в каком этот вопрос означает
Томас Уорд
1

DoSH - Докер Шелл

В случае, если вы просто хотите изолировать деятельность пользователей, вы можете использовать «DoSH»

DoSH (что означает Docker SHell) - это разработка для создания контейнеров Docker, когда пользователи входят в систему Linux и запускают в них оболочку вместо простого создания оболочки.

ubuser
источник