Общие сведения о библиотеке 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) проверяется соответствие меток файлов этому списку и исправление несоответствий.