Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пасоиб.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
325.28 Кб
Скачать

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

Маркер доступа (access token) (МД) является объектом, который описывает контекст безопасности процесса или нити. Информация в МД включает принадлежность (authority) и привилегии пользователя, связанные процессом или нитью.

Структура МД достаточна обширна, поэтому рассмотрим основной компонент со сылками на дополнительные структуры. Эти сведения носят справочный характер, так как МД-структура создаётся при регистрации пользователя и просмотреть или изменить её можно соответствующими функциями.

Структура TOKEN_INFORMATION_CLASS перечислимого типа, содержит значения которые определяют информацию, содержащуюся в МД.

typedef enum _TOKEN_INFORMATION_CLASS

{

TokenUser, // структура TOKEN_USER, идентифицирующая пользователя, связанного с данным МД

TokenGroups, // структура TOKEN_GROUPS, описывающая SID групп, ккоторым принадлежит владелец МД

TokenPrivileges, // структура TOKEN_PRIVILLEGES, описывающая привилегии владельца МД

TokenOwner, // структура TOKEN_OWNER, содержащая SID владельца, используемая при создании объектов

TokenPrimaryGroup, // структура TOKEN_PRIMARY_GROUP, описывающая первичную группу владельца МД

TokenDefaultDacl, // структура TOKEN_DEFAULT_DACL, содержащая DACL владельца, используемая при создании объектов

TokenSource, // структура TOKEN_SOURCE, описывающая источник создания МД: Session Manager, LAN Manager, RPC Server

TokenType, // значение TOKEN_TYPE, указывающее является ли МД первичным или олицетворением.

TokenImpersonationLevel, // значение SECURITY_IMPERSONATION_LEVEL, указывающее уровень олицетво­ре­ния признака. Если МД является первичным, то оно имеет значение ЛОЖЬ.

TokenStatistics, // структура TOKEN_STATISTICS, содержащая различную информацию о МД.

TokenRestrictedSids, // структура TOKEN_GROUPS, содержащая список ограничивающих SID в МД.

TokenSessionId // значение идентификатора сессии

} TOKEN_INFORMATION_CLASS;

Для работы с МД используются следующие функции.

  1. Функция GetTokenInformation извлекает информацию о МД. Вызывающий процесс должен иметь соответствующие права доступа, для получения информацию.

  2. Функция AdjustTokenGroups изменяет информацию о группе в МД.

  3. Функция AdjustTokenPrivileges разрешает или запрещает привилегии в МД.

  4. Функция CheckTokenMembership определяет доступен ли данный SID в указанном МД.

  5. Функция CreateRestrictedToken создаёт новый МД с ограничением возможностей исходного МД.

  6. Функция DuplicateToken создаёт новый олицетворённый МД, являющийся дуб­ли­ка­том существующего МД.

  7. Функция DuplicateTokenEx создаёт новый первичный или олицетворённый МД.

  8. Функция IsTokenRestricted определяет для МД список ограниченных SID.

  9. Функция OpenProcessToken возвращает хендл первичного МД для процесса.

  10. Функция OpenThreadToken возвращает хендл олицетворённого МД для нити.

  11. Функция SetThreadToken устанавливает или удаляет олицетворённый МД для нити.

  12. Функция SetTokenInformation изменяет владельца, первичную группу или DACL, задаваемую по умолчанию.

Пример получения данных из МД. Если требуется исследовать маркер чьей-либо учётной записи можно войти в систему под этой учётной записью или использовать команду RunAs для запуска нового экземпляра командного процессора. Так для выполнения приложения под именем администратора в командной строке набрать

RunAs/user:MyMachine\administrator cmd

16 1616161616161616161616161616161616161616161616161616