SELinux

SELinux
Логотип программы SELinux
Скриншот программы SELinux
Графический интерфейс администрирования SELinux в Fedora 8
Тип Безопасность
Разработчик Red Hat
Написана на Си
Операционная система Компонент ядра Linux
Первый выпуск 1998
Последняя версия
Кандидат в релизы
Репозиторий github.com/SELinuxProjec…
Лицензия GNU GPL
Сайт selinuxproject.org
Логотип Викисклада Медиафайлы на Викискладе

SELinux (англ. Security-Enhanced Linux — Linux с улучшенной безопасностью) — реализация системы мандатного управления доступа, которая может работать параллельно с классической избирательной системой контроля доступа.

Краткое описание

Оставаясь в рамках избирательной системы контроля доступа, операционная система имеет фундаментальное ограничение в плане разделения доступа процессов к ресурсам — доступ к ресурсам основывается на правах доступа пользователя. Это классические права rwx на трех уровнях — владелец, группа-владелец и остальные.

В SELinux права доступа определяются самой системой при помощи специально определённых политик. Политики работают на уровне системных вызовов и применяются самим ядром (но можно реализовать и на уровне приложения). SELinux действует после классической модели безопасности Linux: через SELinux нельзя разрешить то, что запрещено через права доступа пользователей или групп. Политики описываются при помощи специального гибкого языка описания правил доступа. В большинстве случаев правила SELinux «прозрачны» для приложений, и не требуется никакой их модификации. В состав некоторых дистрибутивов входят готовые политики, в которых права могут определяться на основе совпадения типов процесса (субъекта) и файла (объекта) — это основной механизм SELinux. Две других формы контроля доступа — доступ на основе ролей и на основе многоуровневой системы безопасности. Например, «ДСП», «секретно», «совершенно секретно», «ОВ».

Самый простой для работы и с точки зрения поддержки тип политики — так называемая целевая политика, разработанная в рамках проекта Fedora. В рамках политики описано более 200 процессов, которые могут выполняться в операционной системе. Все, что не описано «целевой» политикой, выполняется в домене (с типом) unconfined_t. Процессы, работающие в этом домене, не защищаются SELinux. Таким образом, все сторонние пользовательские приложения будут без всяких проблем работать в системе с «целевой» политикой в рамках классических разрешений избирательной системы контроля доступа.

Кроме «целевой» политики, в состав некоторых дистрибутивов входит политика с многоуровневой моделью безопасности (с поддержкой модели Белла — Лападулы).

Третий вариант политики — «строгий». Тут действует принцип «что не разрешено, то запрещено» (принцип наименьших привилегий). Политика основывается на Reference Policy от компании Tresys.

SELinux был разработан Агентством национальной безопасности США, и затем его исходные коды были представлены для скачивания.

Оригинальный текст (англ.)
From NSA Security-enhanced Linux Team:

«NSA Security-enhanced Linux is a set of patches to the Linux kernel and some utilities to incorporate a strong, flexible mandatory access control (MAC) architecture into the major subsystems of the kernel. It provides a mechanism to enforce the separation of information based on confidentiality and integrity requirements, which allows threats of tampering and bypassing of application security mechanisms to be addressed and enables the confinement of damage that can be caused by malicious or flawed applications. It includes a set of sample security policy configuration files designed to meet common, general-purpose security goals.»

SELinux включён в состав ядра Linux (начиная с версии 2.6).

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

Основные понятия

  • Домен — это некоторый набор действий, которые может производить один процесс. Главным образом это действия, необходимые процессу для выполнения определённой задачи.
  • Роль — это совокупность нескольких доменов.
  • Контекст безопасности — это совокупность всех атрибутов, которые связаны с объектами и субъектами.
  • Политика безопасности — это набор заданных правил, который регулирует взаимодействие ролей, доменов.

Обзор LSM

LSM (англ. Linux Security Modules — модули безопасности Linux) представляют собой реализацию в виде подгружаемых модулей ядра. В первую очередь, LSM применяются для поддержки контроля доступа. Сами по себе LSM не обеспечивают систему какой-то дополнительной безопасностью, а лишь являются неким интерфейсом для её поддержки. Система LSM обеспечивает реализацию функций перехватчиков, которые хранятся в структуре политик безопасности, охватывающей основные операции, защиту которых необходимо обеспечить. Контроль доступа в систему осуществляется благодаря настроенным политикам.

Методы управления доступом

Большинство операционных систем обладают средствами и методами управления доступом, которые в свою очередь определяют, может ли некий объект на уровне операционной системы (пользователь или программа) получить доступ к определённому ресурсу. Используются следующие методы управления доступом:

  • Дискреционный контроль доступа (англ. Discretionary Access Control, DAC). Данный метод реализует ограничение доступа к объектам на основе групп, к которым они принадлежат. В Linux, в основе этого метода, лежит стандартная модель контроля доступа к файлам. Права доступа определены для следующих категорий: пользователь (владелец файла), группа (все пользователи, которые являются членами группы), другие (все пользователи, которые не являются ни владельцами файла, ни членами группы). Причем к каждой из групп предоставляются следующие права: права на запись, на чтение и на исполнение.
  • Мандатное управление доступом (англ. Mandatory Access Control, MAC). Главным образом суть этого метода заключается в установлении определённых прав доступа субъекта к определённым объектам. В ОС реализовано следующее: программа обладает только теми возможностями, которые необходимы ей для выполнения своих задач, и не более того. Данный метод имеет преимущество в сравнении с предыдущим; если в программе будет обнаружена уязвимость, то возможности её доступа будут весьма ограничены.
  • Контроль доступа на основе ролей (англ. Role-Based Access Control, RBAC). Права доступа реализованы в виде ролей, выдаваемых системой безопасности. Роли представляют собой определённые полномочия на выполнение конкретных действий группой субъектов над объектами в системе. Данная политика является улучшением дискреционного контроля доступа.

Внутренняя архитектура SELinux

В самом начале своего появления SELinux была реализована в виде патча. В данном случае было непросто настраивать политику безопасности. С появлением механизмов LSM, настройка и управление безопасностью значительно упростились (политика и механизмы усиления безопасности были разделены), SELinux была реализована в виде подгружаемых модулей ядра. Перед доступом к внутренним объектам операционной системы производится изменение кода ядра. Это реализуется при помощи специальных функций (перехватчиков системных вызовов), так называемых функций «хуков» (англ. hook functions). Функции-перехватчики хранятся в некоторой структуре данных, их целью является выполнение определённых действий по обеспечению безопасности, основанных на заранее установленной политике. Сам модуль включает в себя шесть главных компонентов: сервер безопасности; кэш вектора доступа (англ. Access Vector Cache, AVC); таблицы сетевых интерфейсов; код сигнала сетевого уведомления; свою виртуальную файловую систему (selinuxfs) и реализацию функций-перехватчиков.

  • Кэш вектора доступа используется для кэширования вычисленных результатов (хранения готовых решений управления доступом), полученных из сервера безопасности. Нужно это для того, чтобы минимизировать накладные расходы на производительность со стороны механизмов безопасности SELinux. Интерфейс кэша вектора доступа для сервера безопасности определён в заголовочном файле include/avc_ss.h.
  • Таблица сетевых интерфейсов отображает сетевые устройства в контексты безопасности. Поддержка отдельных таблиц необходима ввиду того, что поле безопасности сетевых устройств было исключено из проекта. Сетевые устройства добавляются в таблицу, когда впервые оказываются в поле видимости функций-перехватчиков (засекаются ими) и удаляются из неё, когда устройство настраивается или перезагружается политика безопасности в связи с перенастройкой. Это возможно благодаря callback-функциям, которые регистрируют изменения конфигурации устройства и перезагрузку политик безопасности. Код таблицы сетевых интерфейсов можно найти в файле netif.c.
  • Код события сетевого уведомления позволяет модулю SELinux уведомлять процессы операционной системы в случае, когда политика безопасности была перезагружена. Эти уведомления используются пространством пользователя для поддержки совместимости с ядром. Этот механизм возможен благодаря библиотеке SELinux. Код события сетевого уведомления можно найти в файле netlink.c.
  • Псевдофайловая система SELinux экспортирует API-функции политики сервера безопасности в процессы операционной системы. Изначально API-функции ядра SELinux были разделены на три компонента (атрибуты процесса, файловые атрибуты, политика API) как часть изменений для внесения в версию ядра Linux 2.6. Также SELinux предоставляет поддержку политики API вызовов. Все три компонента API нового ядра инкапсулированы в библиотеку API SELinux (libselinux). Код псевдофайловой системы можно найти в файле selinuxfs.c.
  • Реализация функций перехватчиков управляет информационной безопасностью связанной с внутренними объектами ядра и реализацией контроля доступа SELinux для каждой операции внутри ядра. Функции перехватчики вызывают сервер безопасности и кэш вектора доступа для получения решений политики безопасности и применения этих решений для маркировки по каким-либо признакам и контроля объектов ядра. Код этих функций перехватчиков расположен в файле hooks.c, а структуры данных, связанные с внутренними объектами, определены в файле include/objsec.h.

Возможности

  • Разные политики в зависимости от поставленных задач
  • Четкая реализация политик
  • Поддержка приложений, запрашивающих политику и исполнение контроля доступа этих приложений (для примера, задача, запущенная в cron, с корректным контекстом)
  • Независимые специфичные политики и интернациональные языковые политики SELinux
  • Независимые специфичные форматы меток безопасности и их содержание
  • Индивидуальные метки и рычаги управления для объектов ядра и сервисов (демонов)
  • Кэширование доступных решений для эффективности
  • Возможность изменения политик
  • Различные меры для защищенности целостности системы и конфиденциальности данных
  • Очень гибкие политики
  • Управление процессом инициализации, наследование прав, запуск программ
  • Управление файловыми системами, папками, файлами и открытыми дескрипторами
  • Управление сокетами, сообщениями (ядра и системы) и сетевыми интерфейсами

Реализации

SELinux доступен с коммерческой поддержкой как часть Red Hat Enterprise Linux начиная с версии 4.

В сообществе поддерживаемые дистрибутивы Linux:

  1. CentOS
  2. Debian
  3. ArchLinux (неофициально)
  4. Fedora Core начиная с версии 2
  5. Hardened Gentoo
  6. openSUSE начиная c версии 11.1
  7. Ubuntu
  8. ROSA
  9. ALT Linux СПТ 6

Мобильная ОС Android поддерживает SELinux начиная с версии 4.3[3]. Начиная с версии 5.0, распространители Андроида должны включать SELinux в режиме Enforcing.

Другие системы

SELinux представляет один из нескольких возможных подходов к ограничению действий, выполняемых установленным ПО.

Система AppArmor делает примерно то же самое, что и SELinux. Одно важное различие между этими системами — способ идентификации объектов файловой системы: AppArmor использует полный путь, SELinux же работает глубже, используя индексный дескриптор.

Эти различия проявляются в двух случаях:

  • если файл имеет вторую, незащищенную жёсткую ссылку, то AppArmor разрешит доступ через неё, а SELinux откажет, так как жёсткие ссылки ссылаются на один и тот же индексный дескриптор
  • если же приложение пересоздает защищенный файл, что используется довольно часто и приводит к изменению индексного дескриптора, то AppArmor продолжит отказывать в доступе, а SELinux его разрешит

Избежать этих проблем в обеих системах позволит применение политики «no access» по умолчанию.

См. также

  • LIDS — Linux Intrusion Detection System
  • Агентство национальной безопасности США
  • TrustedBSD
  • AppArmor

Примечания

  1. Release 3.6 — 2023.
  2. https://github.com/SELinuxProject/selinux/commit/ee1809f453038f7f34719f3fbd448893853d473f
  3. Security-Enhanced Linux in Android  (неопр.). Android Open Source Project. Дата обращения: 31 января 2016. Архивировано 4 января 2018 года.

Литература

  • Анатомия SELinux. Архитектура и реализация Архивная копия от 31 декабря 2010 на Wayback Machine developerWorks,Тим Джонс, 23.10.2008
  • SELinux: бронежилет для корпоративного пингвина Архивная копия от 26 сентября 2011 на Wayback Machine Журнал Хакер

Ссылки

  • SEBSD Архивная копия от 24 февраля 2022 на Wayback Machine
  • SEDarwin Архивная копия от 7 мая 2021 на Wayback Machine
  • SELinux by NSA Архивная копия от 14 февраля 2019 на Wayback Machine Наиболее полная информация о проекте SELinux
  • Документация для пользователей и разработчиков Архивная копия от 22 декабря 2011 на Wayback Machine (selinuxproject.org)
  • SELinux в Debian Архивная копия от 2 декабря 2011 на Wayback Machine
  • Configurating SELinux for your needs Архивная копия от 23 декабря 2011 на Wayback Machine
  • Linux с улучшенной безопасностью. Руководство Пользователя Архивная копия от 2 июня 2012 на Wayback Machine (рус) Документация к Fedora Linux