76
0
0
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники
Назад

Обзор механизмов организации изолированных окружений в Linux

Время чтения 1 минута
Нет времени читать?
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники
76
0
0
Нет времени читать?
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники

Привет, вАЙТИ. Меня зовут Егор Орлов, я более 24 лет в ИТ, преподаю в СПбПУ.

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

Обзор механизмов организации изолированных окружений в Linux

Зачем нужны песочницы 

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

Второе применение изолированных окружений — исследование самого вредоносного программного обеспечения без рисков для системы.

В статье я рассмотрю следующие механизмы ядра Linux для организации изолированных окружений:

  1. Namespaces.
  2. Cgroups.
  3. Seccomp.

Эти механизмы можно использовать для создания изолированных окружений своими силами. Более простой путь — использование готовых решений, существующих для операционных систем на основе ядра Linux, например firejail и bubblewrap.

Технологии контейнеризации — docker, CRI-O, lxc — также используют указанные механизмы. В частности, docker использует namespaces для изоляции файловой системы и системных идентификаторов, а seccomp — для фильтрации системных вызовов, разрешенных в docker-контейнере.

Кроме контейнеризации и песочниц, chroot-изация оказалась полезной при создании изолированных от системы сред для независимого от системы развертывания приложений со всеми их зависимостями. В ОС на основе ядра Linux мы можем увидеть их в таких решениях, как snap и flatpak.

Namespaces

Namespaces — современный наследник механизма chroot, позволяющий изолировать процесс или группу процессов в системе за счет:

  • запуска процесса в изолированной части файловой системы (собственно chroot) — пространство имен MOUNT;
  • создания отдельного пространства идентификаторов процессов — пространство имен PID и механизмов межпроцессного взаимодействия — пространство имен IPC в изолированном окружении, что не дает возможность процессам из песочницы использовать механизмы межпроцессного взаимодействия с процессами, работающими вне песочницы;
  • изоляции сетевых идентификаторов — пространство имен NET, что позволяет использовать в изолированном окружении отдельные от системных идентификаторы сетевых интерфейсов;
  • отдельных диапазонов пользовательских идентификаторов — пространство имен USER, благодаря которому суперпользователь песочницы не имеет привилегий в основной системе;
  • отдельных пространств для имени узла и домена (UTS);
  • отдельного корневого каталога для механизма Cgroups. 

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

Cgroups

Cgroups (Control Groups) — механизм ограничения использования ресурсов процессами изолированного окружения. В соответствии с идеологией cgroups процессы делятся на группы, к каждой из которых можно применить один или несколько ограничивающих контролеров, ответственных за распределение определенного типа ресурсов.

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

Seccomp

Seccomp (сокращение от Secure Computing) — механизм ограничения системных вызовов, выступает как фильтр с возможностью задать как белый, так и черный список.

Если злоумышленник получит возможность выполнить произвольный код в изолированном окружении, seccomp не даст ему использовать системные вызовы, которые не были изначально объявлены. Например, в docker используется фильтр системных вызовов на основе seccomp, который по умолчанию блокирует более 40 системных вызовов.

Seccomp позволят указать, что делать с процессом-нарушителем — например, принудительно завершить работу процесса или просто вернуть в запрещенном системно вызове ошибку.

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

Комментарии0
Тоже интересно
Комментировать
Поделиться
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники