Подтвердить что ты не робот

Поместите процесс в песочницу, где он может нанести наименьший вред

Я ищу концепцию для создания процесса, чтобы:

  • он имеет доступ только к определенным библиотекам /API
  • он не может работать с файловой системой или только с определенными частями
  • он может наносить наименьший вред, если вредоносный код работает в нем

Эта концепция известна как песочница или тюрьма.

Требуется сделать это для каждой основной операционной системы (Windows, MacOSX и Linux), и вопрос концептуальен (как в том, что делать, , какие API использовать и что для наблюдения), а не для языка.

требования к ответам

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

  • Ответ должен быть конкретным и полным
  • С конкретным я имею в виду, что это больше, чем указатель на какой-то ресурс в Интернете. Он должен суммировать то, что ресурс говорит о теме по крайней мере.
  • Он может содержать или не содержать пример кода, но, если он это делает, напишите его в C
  • Я не могу принять ответ, полный 2/3, даже если 2/3, которые есть, идеальны.

этот вопрос FAQ

  • Это домашнее задание? Нет.
  • Почему вы спрашиваете об этом как о домашнем задании? Если вы зададите конкретный вопрос и хотите получить конкретный ответ, и вы знаете, как должен выглядеть этот ответ, даже если вы не знаете ответа, этот стиль вопроса вы получите.
  • Если вы знаете, как это должно выглядеть, почему вы спрашиваете? 1), потому что я не знаю всего ответа 2), потому что в Интернете нет единого места, которое содержит все детали этого вопроса в одном месте. Также прочитайте FAQ по stackoverflow.
  • Почему основная часть вашего вопроса, как ответить на этот вопрос? Потому что никто не читает FAQ.
4b9b3361

Ответ 1

Mac OS X имеет средство для песочницы с кодовым названием Seatbelt. Открытый API для него документируется в песочнице (7), sandbox_init (3) и связанных страницах руководства. Публичный API несколько ограничен, но сам объект очень мощный. Хотя общедоступный API позволяет вам выбирать из определенных заранее изолированных песочниц (например, "Все сокеты-сети запрещены" ), вы также можете использовать более мощную базовую реализацию, которая позволяет точно указать, какие ресурсы операционной системы доступны через Схемуподобный язык. Например, вот выдержка из песочницы, используемой для portmap:

(allow process-exec (regex #"^/usr/sbin/portmap$"))
(allow file-read-data file-read-metadata (regex
    #"^/etc"
    #"^/usr/lib/.*\.dylib$"
    #"^/var"
    #"^/private/var/db/dyld/"
    #"^/dev/urandom$"))
(allow file-write-data (regex
    #"^/dev/dtracehelper$"))

Вы можете увидеть много песочниц, используемых системой в /usr/share/sandbox. Легко поэкспериментировать с песочницами с помощью команды sandbox-exec (1).

Для Windows вы можете взглянуть на беседу Дэвида ЛеБланка "Практическая песочница" , прочитанная в Black Hat USA 2007. Windows не имеет встроенной технологии песочницы как таковой, поэтому описанные методы используют неполный механизм, введенный в Windows 2000 под названием SAFER. Используя ограниченные токены, можно создать процесс, который имеет ограниченный доступ к ресурсам операционной системы.

Для Linux вы можете исследовать сложный механизм SELinux: SELinux home, HOWTO. Например, Red Hat используется для упрощения некоторых системных служб в некоторых своих продуктах.

Ответ 2

Для Windows есть песочница в Google Chrome. Вы можете изучить его. Он использует либеральную BSD-подобную лицензию.

Для Linux будет хороший старый chroot или более сложный http://plash.beasts.org/wiki/.

OS X, поскольку Leopard имеет доступную для SELinux защиту.

Ответ 3

Сайт codeepad.prg имеет хороший "About" о том, как они безопасно позволяют выполнять любые фрагменты кода.

Исполнение кода обрабатывается супервизором на основе geordi. Стратегия заключается в том, чтобы запускать все под управлением ptrace, при этом многие системные вызовы запрещены или игнорируются. Компиляторы и конечные исполняемые файлы выполняются в chroot-тюрьме со строгими ограничениями ресурсов. Надзор написан в Haskell.

Когда ваше приложение является удаленным выполнением кода, вы должны ожидать проблем с безопасностью. Вместо того, чтобы полагаться только на администратора chroot и ptrace, я принял некоторые дополнительные меры предосторожности:

  • Процессы диспетчера запускаются на виртуальных машинах, которые являются брандмауэрами, так что они неспособны выполнять исходящие соединения.

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

Ответ 4

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

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

Ответ 5

FreeBSD имеет конкретные понятия jails, а Solaris имеет containers. В зависимости от того, что вы ищете, они могут помочь.

chroot jails может помочь ограничить возможности приложения (хотя любое приложение с привилегиями root может выйти из тюрьмы), и они доступны в большинстве UNIXen, включая OS X.

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

Ответ 6

Для Linux существует AppArmor. К сожалению, проект несколько в перерыве.
Другая альтернатива для песочницы - VServer, которая использует виртуализацию.

Ответ 7

В окнах (2000 и более поздних) вы можете использовать объекты Job для ограничения процессов.

Ответ 8

Я не эксперт по этой теме, но я считаю, что стандартный ответ для Linux - это определение политики SeLinux с правильными возможностями для процесса.

Ответ 9

Как правило, любой виртуальный частный сервер будет делать:

Linux VServer http://linux-vserver.org/Welcome_to_Linux-VServer.org

Parallels Virtuozzo Containers http://www.parallels.com/products/pvc/

и, как уже упоминалось, FreeBSD и Solaris имеют собственные реализации.

О. на самом деле я заметил, что вы просите его работать над ЛЮБОЙ ОС. Ну, это может быть сложно, так как я думаю, что меньше усилий - это просто повторное использование некоторой виртуальной машины, которая может поддерживать некоторый уровень песочницы:

  • Java
  • .NET