Как на практике работает MultiLevel Security?

Рейтинг: 2Ответов: 1Опубликовано: 21.05.2023

В SELinux есть такой механизм доступа, как MultiLevel Security. Согласно описанию, это работает так: "no write down, no read up". Однако не совсем понятно, как это работает на деле. Как бы, SELinux берет под свой контроль вообще всю систему, а в ней есть не только обычные файлы и директории. Я представляю, как подобное может работать с файлами, директориями, сокетами, трубами (pipe). Но как это правило работает, например, с процессами, самим ядром или ещё чем-либо? Не говоря уже о том, что даже с тем же файлом возможны операции не только чтения/записи. Как на практике работает MLS?

Даже приведу что-то типа задачи в качестве уточнения своего вопроса:

У нас есть 3 файла: /opt/confidential_exec, /opt/secret_exec, /opt/topsecret_exec. Эти файлы имеют следующие права доступа: владелец root, группа root, права владельца: чтение, запись и исполнение, права членов группы root: никакие, права других: никакие. Запущен процесс bash с контекстом u:r:bash_exec:s0:c0. Файлы /opt/confidential_exec, /opt/secret_exec и /opt/topsecret_exec имеют соответственно контексты u:r:secret_exec:s0:c0, u:r:secret_exec:s1:c0, u:r:secret_exec:s2:c0. Имеем также следующие SELinux правила в формате .te:

allow bash_exec secret_exec:file { getattr relabelto unlink ioctl execute append read setattr swapon write lock create rename mounton quotaon relabelfrom link }

allow bash_exec secret_exec:process { sigchld sigkill sigstop signull signal ptrace getsched setsched getsession getpgid setpgid getcap setcap getattr setrlimit }

neverallow bash_exec secret_exec:process transition

Что процесс с контекстом bash_exec сможет сделать с каждым из трех исполняемых файлов в /opt и с каждым процессом данных файлов, если он сможет их запустить?

Ответы

▲ 0Принят

Политика многоуровневой безопасности (MLS), применяемая SELinux, ограничивает действия процесс с контекстом bash_exec может выполнять над исполняемыми файлами в /opt и над процессами, связанными с этими файлами:

allow bash_exec secret_exec:file { ... }: это правило предоставляет контексту процесса bash_exec различные связанные с файлами разрешения при взаимодействии с файлами, помеченными как secret_exec.

Эти разрешения включают

  • getattr (получение атрибутов файла),
  • relabelto (изменение метки безопасности файла на более высокий уровень),
  • unlink (удаление файла),
  • ioctl (выполнение операций управления вводом/выводом над файлом),
  • append (запись данных в конец файла),
  • read (чтение данных из файла),
  • setattr (установка атрибутов файла),
  • swapon (установка файла как устройства подкачки),
  • write (запись данных в файл),
  • lock (заблокировать файл), create (создать новый файл),
  • rename (переименовать файл),
  • mounton (монтировать файл как файловую систему),
  • quotaon (включить дисковые квоты),
  • relabelfrom (изменить метку безопасности файла с более низким уровнем конфиденциальности) и
  • link (создать жесткую ссылку на файл).

allow bash_exec secret_exec:process { ... }: это правило предоставляет различные разрешения, связанные с процессом, контексту процесса bash_exec при взаимодействии с процессами, помеченными как secret_exec.

Эти разрешения включают:

  • sigchld (получение уведомления об изменении состояния дочернего процесса),
  • sigkill (отправка сигнала для завершения процесса),
  • sigstop (отправка сигнала для остановки процесса),
  • signull (отправка нулевого сигнала),
  • signal (отправка сигнала для процесс),
  • ptrace (трассировка или отладка процесса),
  • getsched (получение информации о планировании процесса),
  • setsched (установка информации о планировании процесса),
  • getsession (получение идентификатора сеанса процесса),
  • getpgid (получение идентификатора группы процессов),
  • setpgid (установка группы процессов ID),
  • getcap (получить возможности процесса),
  • setcap (установить возможности процесса),
  • getattr (получить атрибуты процесса),
  • setrlimit (установить ограничения ресурсов для процесса).

neverallow bash_exec secret_exec:process transition: это правило запрещает любой переход процесса из контекста bash_exec в контекст secret_exec, гарантируя, что процессы с контекстом bash_exec не смогут перейти на более высокие уровни конфиденциальности.

Основываясь на этих правилах и данных контекстах файлов, вот что процесс с контекстом bash_exec сможет сделать с каждым из трех исполняемых файлов в /opt:

/opt/confidential_exec (контекст: u:r:secret_exec:s0:c0):

/opt/secret_exec (контекст: u:r:secret_exec:s1:c0):

/opt/topsecret_exec (контекст: u:r:secret_exec:s2:c0):

  • Прочитать файл
  • Записать в файл
  • Выполнить файл
  • Измените метку безопасности на более высокий уровень
  • Удалить файл (отвязать)
  • Изменить метку безопасности файла с более низкого уровня (relabelfrom)

Что касается процессов, связанных с этими файлами. Процесс с контекстом bash_exec будет иметь разрешения, перечисленные в правиле allow bash_exec secret_exec:process { ... }. Эти разрешения включают взаимодействие с процессом, отправку сигналов, отслеживание или отладку, а также управление атрибутами, связанными с процессом, и ограничениями ресурсов.

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