вторник, июля 14, 2009

SELinux Lockdown, 9: Переключатели

оригинал - SELinux Lockdown Part Nine: Booleans

Продолжаю выкладывать перевод цикла статей по использованию SELinux. Оригинал на английском языке опубликован в блоге Доминика Грифта (Dominick Grift).


Переключатели (booleans) это блоки политики, которые можно добавлять или удалять на лету, переключая их значение. Старая примерная политика АНБ (NSA) основывалась на модели минимальных привилегий. Это значит, что разрешалось насколько возможно мало для успешного совершения задания. Почти каждое правило, добавляемое в политику SELinux, добавляет новые привилегии. Для максимального повышения безопасности, обеспечиваемой SELinux, число активных правил следует минимизировать.

В Fedora версии 11 переключателями включены некоторые политики, которые возможно в вашем случае не нужны. Рекомендуется удалять такие политики и добавлять их только при необходимости.

Какие-то переключатели во включенном состоянии добавляют политики, другие добавляют политики в выключенном состоянии. Простое описание функциональности переключателя можно просмотреть командой: sudo semanage boolean -l. Этих описаний обычно достаточно для понимания назначения переключателя, хотя описания короткие. Если пропустить сообщение AVC: denied (Access Vector Cache) через команду audit2why, можно узнать, какой переключатель позволяет устранить эту проблему (если данная проблема может быть решена установкой значения переключателя).

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

Существует три относительно старые утилиты, позволяющие просмотреть, установить и переключить значение SELinux-переключателей: getsebool, setsebool и togglesebool. В Fedora 11 функциональность этих утилит была встроена в команду semanage: semanage boolean.

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

Пример:
Как найти объявление и содержимое переключателя gpg_agent_env_file boolean

# semanage boolean -l | grep gpg
gpg_agent_env_file -> off Allow usage of the gpg-agent --write-env-file option. This also allows gpg-agent to manage user files


Как следует из названия переключателя, он определяется где-то в модуле gpg.te (в данном случае это строки с 196 по 203).

Данный переключатель, будучи включенным, позволяет программам, работающим в SELinux-домене gpg_agent_t, записывать файлы в домашней директории пользователя с обычным типом user_home_t.

Автор предполагает, что в блоке политики имеется ошибка, так как gpg_agent_t может осуществить переход типа (type transition) только для файлов user_home_t и не может для директорий.

Объявление этого переключателя, содержащее краткое описание функциональности, можно найти на строках с 9 по 15.

Описать в рамках данной статьи все переключатели не представляется возможным, поэтому было показано, как в общем случае найти объявление и актуальное описание переключателя. При необходимости ограничения переключателей, можно посмотреть добавляет он или удаляет политику при включении и что фактически он делает. Кроме того, можно включить или выключить переключатель, чтобы определить, нужна ли вам, реализованная им политика. Также при необходимости можно «скормить» имеющиеся сообщения AVC: denied утилите audit2why и посмотреть существуют ли переключатели, позволяющие решить существующую проблему.

Далее рассматриваются некоторые переключатели.

unconfined_login

unconfined_login -> off Allow a user to login as an unconfined domain

Переключатель обсуждался в восьмой части этой серии. Если он установлен в положение on (включен), тогда пользователи могут входить в систему в домене unconfined_t. Можно сильно повысить безопасность установкой его в значение off (выключено). Содержимое переключателя доступно в исходном файле политики unconfineduser.te.

ssh_sysadm_login и xdm_sysadm_login

ssh_sysadm_login -> off Allow ssh logins as sysadm_r:sysadm_t
xdm_sysadm_login -> off Allow xdm logins as sysadm


Переключатель похож на unconfined_login, только имеет дело с доменом sysadm_t. В настоящее время он НЕ работает. Поэтому пока не рекомендуется сопоставлять любых пользователей SELinux роли sysadm_r. Пользователи, имеющие доступ к этой роли, могут сразу входить в систему в привилегированный домен.

*_allow_exec_content_t

allow_sysadm_exec_content -> off allow_sysadm_exec_content
allow_xguest_exec_content -> off allow_xguest_exec_content
allow_user_exec_content -> off allow_user_exec_content
allow_staff_exec_content -> off allow_staff_exec_content
allow_guest_exec_content -> off allow_guest_exec_content


Как видно описание этого переключателя не сильно полезно. Когда переключатель включен пользователям, в соответствующем домене, разрешается запускать их пользовательское содержимое в их собственном окружении. Имеются в виду файлы с типами user_home_t, user_tmp_t или если включены домашние директории nfs или samba типы nfs_t и cifs_t, соответственно. Данные переключатели являются особенностью Fedora, их содержимое можно найти в файле userdomain.if.

secure_module

secure_mode -> off Enabling secure mode disallows programs,
such as newrole, from transitioning to administrative user domains


Переключатель secure_mode можно включить для запрета переходов пользовательских доменов в привилегированные домены. Переключатель определяется в файле selinuxutil.te (строки с 289 по 295).

Пока переключатель работает только для команды newrole и НЕ работает для команды sudo. Поэтому не поощряется рассчитывать на данный переключатель.

secure_mode_insmod

secure_mode_insmod -> off Disable transitions to insmod

При включении данного переключателя для замкнутых (confined) пользователей не разрешается осуществлять доменный переход к домену insmod. Ограниченным пользовательским доменам будет запрещено загружать модули ядра Linux. Переключатель определен в исходном файле modutils.te (политика – строки 120-122, объявление переключателя – строки 4-6).

secure_mode_policyload

secure_mode_policyload -> off boolean to determine whether the system
permits loading policy, setting enforcing mode, and changing boolean values.
Set this to true and you have to reboot to set it back


Описание в принципе понятно. При включении переключателя исключается политика, разрешающая загрузку других политик, изменять режим работы SELinux и изменять значения переключателей. Политика описывается в исходном файле selinux.te (строки с 44 по 52).

xserver_object_manager

xserver_object_manager -> off Support X userspace object manager

Данный переключатель оказывает достаточно сильный эффект. При его включении становится доступным контроль доступа на уровне X сервера. XACE (X Access Control Extension) позволяет оператору настраивать взаимодействие процессов с X сервером. Политика по умолчанию всё ещё имеет определенные шероховатости. XACE реализован для политики безопасности SELinux, реализующей модель Multi Level Security, ориентированной на обеспечение конфиденциальности. В целевой политике (SELinux Targeted Policy) по умолчанию он выключен. Если вам хватает смелости, включите его и опробуйте силу XACE.
После включения переключателя необходимо перезапустить X сервер.

Переключатель описан в файле с исходным текстом политики xserver.te (строки с 749 по 766).

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

Вывод:
Для большей безопасности минимизируйте объем политики.
Иногда включением переключателя политика добавляется, иногда политика добавляется выключением переключателя.
Описание переключателя можно просмотреть в исходном тексте политики.

Справка: man getsebool, man setsebool, man togglesebool, man audit2why, man semanage

Комментариев нет: