Общие сведения о библиотеке parsec#
Библиотека PARSEC предназначена для реализации функций СЗИ ОС Astra Linux.
Библиотека позволяет управлять метками безопасности и привилегиями.
Термины и определения#
Субъект доступа - активный компонент ОС (например, процесс, запущенный от имени учетной записи пользователя), доступы которого регламентируются политиками управления доступом.
Объект доступа - пассивный компонент ОС, доступ к которому регламентируется политиками управления доступом. Может быть составным объектом (контейнером или каталогом, содержащим другие объекты и контейнеры или каталоги, к которым по отдельности можно применять политики управления доступом) или единым объектом (файлом).
Целостность объекта - сохранение неизменным содержимого объекта при хранении, передаче или отображении объекта. Целостность объекта контролируется значением хэш-функции над содержимым объекта. Объект сохраняет свою целостность, если значение хэш-функции остаётся неизменным (с учётом коллизий при вычислении хэш-функции).
Линейная часть метки целостности (линейный (иерархический) уровень целостности) - это число со знаком длиной 1 байт и диапазоном значений от -128 до 127. Линейные уровни целостности можно сравнивать на большеменьшеравно. Смысл у этого числа - чем оно больше у субъекта (пользователяпроцесса), тем большими полномочиями он наделён по модификацииизменению целостности объекта, чем больше он у объекта, тем более защищён объект от изменений субъектами. Устанавливаемый по-умолчанию линейный уровень целостности равен 0. Отрицательные значения введены для того, чтобы субъекты с линейным уровнем целостности 0 могли запускать недоверенные процессы с пониженным (отрицательным) уровнем целостности .
Категория целостности (неиерархическая часть метки целостности) - (битовая маска длиной 32 бита).
Метка целостности - совокупность (декартово произведение) категорий целостности и линейных уровней целостности. Правило сравнения меток целостности: метка 1 больше или равна метке 2, если в категории целостности метки 1 установлены все те же биты, что и в категории целостности 2 (в метке 1 могут быть установлены и другие биты) и линейный уровень целостности метки 1 больше либо равен линейному уровню целостности метки 2. Две метки целостности могут быть несравнимы, если у категорий целостности меток нет совпадающих битов.
Иногда вместо термина “метка целостности” используется термин “уровень целостности”, имея ввиду полную метку целостности и такой способ сравнения.
Политика мандатного контроля целостности - политика управления доступом, при реализации которой каждому объекту и субъекту доступа присваивается метка целостности. Правила мандатного контроля целостности:
субъект доступа (процесс) с определенной меткой целостности может получить доступ на запись к Объект доступа (каталогу, файлу, сокету), если его метка целостности не ниже метки целостности объекта
субъект не может получить доступ к управлению другим субъектом или объектом, если его метка целостности ниже или не сравнима с меткой целостности этого другого субъекта/объекта
процесс, непосредственно запускаемый пользователем, наследует метку целостности этого пользователя (процесса-родителя)
субъекты и объекты, у которых не установлена метка целостности имеют линейный уровень целостности равный 0 и низшую категорию целостности равную 0
Из перечисленных правил могут быть исключения, определяемые специальными атрибутами сущностей ssi, irelax, iinh, silev или некоторыми привилегиями процессов.
Атрибуты сущностей#
irelax - присваивается каталогам. Определяет, что в каталог может осуществлять запись процесс с любой меткой целостности.
silev - присваивается файлам. Процессу, запускаемому из файла с атрибутом silev, присваивается метка целостности, равная наибольшему значению, которое одновременно меньше или равно значениям метки целостности файла и максимальной метки целостности в системе. Например, если метка целостности файла меньше или равна максимальной метке целостности в системе, то процессу назначается метка целостности, равная метке целостности файла. Атрибут silev необходим, например, для корректного запуска процесса смены пароля из файла /usr/bin/passwd, имеющего высокую метку целостности, пользователем с низкой меткой целостности.
iinh - присваивается каталогам. Файлы и каталоги, создаваемые внутри каталога с атрибутом iinh наследуют метку целостности родительского каталога.
ssi - присваивается файлам. Содержимое файла с атрибутом ssi становится недоступным на чтение процессам с меткой целостности ниже метки целостности файла. Привилегии процессов
PARSEC_CAP_INHERIT_INTEGRITY - аналог атрибута iinh. При создании файлов и каталогов процессом с данной привилегией создаваемые файлы и каталоги наследуют метку целостности родительского каталога.
Правила мандатного контроля целостности#
запуск процесса пользователем запрещён, если метка целостности исполнимого файла процесса меньше или не сравнима с меткой целостности процесса-родителя. Если на исполнимом файле установлен атрибут silev, то запускаемому из этого файла процессу присваивается метка целостности равная наибольшему значению, которое одновременно меньше или равно метке целостности файла и максимальной метки целостности в системе
при создании файла или каталога им назначается метка целостности, явно зависящая от метки целостности родительского каталога, только в случае, если он помечен атрибутом iinh или процесс, в рамках которого создаётся файл или каталог имеет привилегию PARSEC_CAP_INHERIT_INTEGRITY. В этом случае действуют следующие правила наследования (с учётом атрибута irelax):
в каталоге без атрибута irelax и с атрибутом iinh (либо если процесс имеет привилегию PARSEC_CAP_INHERIT_INTEGRITY) (уровень целостности процесса, создающего файл или каталог, должен быть не ниже уровня целостности каталога) файлам и подкаталогам назначается уровень целостности, равный уровню целостности каталога;
в каталоге с атрибутом irelax и с атрибутом iinh (либо если процесс имеет привилегию PARSEC_CAP_INHERIT_INTEGRITY) (уровень целостности процесса, создающего файл или каталог, может быть любым) файлам и подкаталогам назначается уровень целостности как наибольшая нижняя граница значений уровней целостности каталога и процесса (другими словами результирующий уровень целостности вычисляется как совпадающие биты неиерархических частей меток целостности и минимальное значение из линейных частей меток целостности каталога и процесса);
атрибут iinh наследуется на создаваемые подкаталоги в момент их создания;
изменять атрибут каталогов iinh разрешается процессу (субъекту), обладающему уровнем целостности не меньше уровня целостности каталога
В остальных случаях действуют следующие правила:
неиерархические категории уровня целостности создаваемого файла или подкаталога устанавливаются равными 0
в каталоге без атрибута irelax создаваемым процессом (уровень целостности которого должен быть не ниже уровня целостности каталога) файлам и подкаталогам назначается линейный уровень целостности, равный минимуму линейного уровня целостности каталога и 0
в каталоге с атрибутом irelax создаваемым процессом (уровень целостности которого может быть любым) файлам и подкаталогам назначается линейный уровень целостности, равный минимуму линейного уровня целостности каталога, линейного уровня целостности процесса и 0 файлы с установленным атрибутом ssi могут открываться на чтение только процессами, имеющими уровень целостности больший или равный уровню целостности открываемого файла
домашний каталог пользователя имеет максимальную доступную пользователю метку целостности
пользователь входит в систему с максимальной доступной ему меткой целостности
Общие принципы работы мандатного контроля целостности (МКЦ)#
Метки целостности файлов и каталогов хранятся в расширенных атрибутах (xattr), поэтому для работы МКЦ необходимо использовать файловую систему, которая поддерживает хранение расширенных атрибутов. Могут возникнуть сложности с хранением меток целостности при использовании внешних носителей и сетевых файловых систем (NFS), если они не поддерживают хранение расширенных атрибутов.
Метки целостности пользователей хранятся в локальной БД /etc/parsec/micdb или в учётной записи FreeIPA. Метки целостности групп пользователей хранятся в локальной БД /etc/parsec/micgrdb. При запуске процесса пользователем его метка целостности помещается в атрибут процесса cred.security
При работе утилит МКЦ взаимодействие библиотеки parsec с модулем ядра lam происходит с помощью системных вызовов через /parsecfs/ctl
Модуль ядра lam перехватывает события ОС с помощью регистрации функций-перехватчиков (hooks) в инфраструктуре LSM (Linux Security Management) ОС и проверяет возможность проведения запрошенной операции в соответствии с требованиями МКЦ.
Для первоначальной разметки и последующего поддержания разметки файлов ОС подходящими метками целостности используется файл /etc/parsec/fs-ilev.conf, в котором содержится список файлов и каталогов с их метками целостности. При старте ОС (или при вызове утилиты set-fs-ilev) проверяется соответствие меток файлов этому списку и исправление несоответствий.