Маркер доступа

Эта статья находится на начальном уровне проработки, в одной из её версий выборочно используется текст из источника, распространяемого под свободной лицензией
Материал из энциклопедии Руниверсалис

Маркер доступа (англ. Access token) — программный объект операционных систем класса Microsoft Windows, содержит информацию по безопасности сеанса и идентифицирует пользователя, группу пользователей и пользовательские привилегии.

Обзор

Маркер доступа — это объект, инкапсулирующий дескриптор безопасности процесса[1]. Прилагаемый к процессу, дескриптор безопасности идентифицирует собственника объекта[2][3]. Пока маркер используется для представления только информации по безопасности, он технически свободен по своему содержанию и может содержать любые данные. Маркер доступа используется Windows, когда процесс пытается взаимодействовать с объектами, дескрипторы безопасности которых требуют контроль доступа[1]. Маркер доступа представлен системным объектом типа Token . По причине того, что маркер — обычный системный объект, доступ к самому маркеру может быть проконтролирован с помощью дескриптора безопасности, но это обычно никогда не делается на практике.

Маркер доступа генерируется сервисом входа в систему, когда пользователь регистрируется и его подлинность успешно установлена, определяя права пользователя в дескрипторе безопасности, заключенном в маркер. Маркер прилагается к каждому процессу, созданному сессией пользователя (процессы, собственником которых является пользователь)[1]. Когда бы такой процесс ни запрашивал любой ресурс, доступ к которому контролируется, Windows смотрит в дескрипторе безопасности в маркере доступа, имеет ли пользователь, владелец данного процесса, право доступа к данным, и, если да, какие операции (чтение, запись/изменение) ему дозволены. Если операция дозволена в контексте данного пользователя, Windows позволяет процессу её продолжать, если нет, то отказывает в доступе.

Типы маркеров доступа

Существует два типа маркеров доступа:

Первичный маркер доступа

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

Имперсонализирующие маркеры доступа

Имперсонализация — это концепт безопасности, присущий только Windows NT, что позволяет серверному приложению временно «быть» клиентом для доступа к охраняемому объекту. Имперсонализация состоит из трёх возможных уровней: идентификация, позволяющий серверу проверять подлинность клиента, имперсонализация, позволяющая серверу работать от имени клиента, и делегация, то же, что и имперсонализация, только расширена на работу с удалёнными системами, с которыми связывается сервер. Клиент может выбрать максимально возможный уровень имперсонализации на сервере в параметре подключения. Делегация и имперсонализация — привилегированные операции. Имперсонализирующие маркеры доступа могут быть ассоциированы только с потоками и представляют собой субъекты безопасности клиентского процесса. Имперсонализирующие маркеры обычно создаются и ассоциируются с текущим потоком неявно при помощи IPC механизмов, таких как DCE RPC, DDE и именованные каналы.

Составляющие маркера доступа

Маркер доступа состоит из различных полей, включая, но не ограничиваясь, следующие:

  • идентификатор;
  • идентификатор ассоциированной сессии входа в систему. Сессия обслуживается сервисом идентификации и заполняется идентификационными пакетами с коллекцией всей информации (мандат), сообщенной пользователем во время входа в систему. Мандат используется для доступа к удаленным системам без необходимости переидентифицировать клиента, предусматривающий, что все вовлеченные системы делятся информацией по идентификации.
  • идентификатор пользователя. Это поле наиболее важное и защищено от записи.
  • идентификатор групп, частью который является пользователь (или, точнее, субъект). Идентификаторы групп не могут быть удалены, но могут быть отключены. Как максимум, одна из групп назначается идентификатором сессии, произвольная группа, представляющая собой сессию входа в систему, позволяющая получить доступ к различным объектам, ассоциированным с сессией.
  • ограничивающие идентификаторы группы (поле не обязательно). Это дополнительное множество групп, не дающее дополнительного доступа, но ограничивающее его: доступ к объекту открыт только, если он также открыт для одной из этих групп. Данный вид групп не может быть ни удалён, ни отключён.
  • привилегии, то есть специальные возможности пользователя. Большинство привилегий по умолчанию отключено, чтобы исключить возможные повреждения от плохо защищённых программ. Начиная с Windows XP Service Pack 2 и Windows Server 2003, привилегии могут быть удалены из маркера доступа вызовом AdjustTokenPrivileges() с атрибутом SE_PRIVILEGE_REMOVE.

Владелец по умолчанию, первичная группа и ACL для объектов, созданных субъектом, ассоциированным с маркером пользователя.

Примечания

  1. 1,0 1,1 1,2 Access Tokens Архивная копия от 21 июля 2012 на Wayback Machine  (англ.)
  2. Security descriptors Архивная копия от 5 августа 2011 на Wayback Machine  (англ.)
  3. Securable objects Архивная копия от 5 августа 2011 на Wayback Machine  (англ.)