Как на практике работает MultiLevel Security?
В 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и с каждым процессом данных файлов, если он сможет их запустить?
Ответы (1 шт):
Политика многоуровневой безопасности (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 предназначена для обеспечения строгого контроля доступа на основе уровней конфиденциальности и предотвращения утечки информации с более высоких уровней конфиденциальности на более низкие (без записи, без чтения).