Поместите процесс в песочницу, где он может нанести наименьший вред - PullRequest
23 голосов
/ 26 сентября 2008

Я ищу концепцию порождать процесс такой, что:

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

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

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

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

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

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

этот вопрос FAQ

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

Ответы [ 9 ]

14 голосов
/ 30 сентября 2008

Mac OS X имеет средство песочницы с кодовым названием «Ремень безопасности». Открытый 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 использует его для защиты некоторых системных служб в некоторых своих продуктах.

7 голосов
/ 26 сентября 2008

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

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

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

5 голосов
/ 27 декабря 2008

На сайте codepad.prg есть хорошая страница "О программе" , посвященная тому, как безопасно выполнять любые фрагменты кода.

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

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

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

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

2 голосов
/ 27 декабря 2008

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

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

2 голосов
/ 27 сентября 2008

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

2 голосов
/ 26 сентября 2008

FreeBSD имеет определенные концепции jails , а Solaris имеет контейнеры . В зависимости от того, что вы ищете, это может помочь.

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

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

1 голос
/ 26 сентября 2008

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

0 голосов
/ 12 ноября 2011

Обычно любой виртуальный частный сервер будет делать:

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

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

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

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

  • Java
  • .NET
0 голосов
/ 27 декабря 2008

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

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