Поделиться через


Проектирование механизма целостности Windows

Механизм целостности Windows является расширением архитектуры безопасности Windows, основанной на эталонном мониторе безопасности в ядре. Монитор ссылок по безопасности обеспечивает контроль доступа путем сравнения идентификаторов безопасности пользователей и групп в маркере доступа безопасности с предоставленными разрешениями доступа в ACL дескриптора безопасности объекта. Механизм целостности добавляет уровень целостности к маркеру доступа безопасности и обязательную запись управления доступом меток в системный ACL (SACL) в дескрипторе безопасности.

Ниже перечислены основные компоненты механизма целостности.

  • Предопределенные уровни целостности и их представление.
  • Политики целостности, ограничивающие разрешения доступа.
  • Уровень целостности, назначенный маркеру доступа безопасности.
  • Обязательная запись управления доступом к метки.
  • Обязательные метки, назначенные объектам.
  • Ограничения целостности в API AccessCheck и режиме ядра SeAccessCheck.

Каждая из этих частей подробно описана ниже. Механизм целостности Windows действует всегда, независимо от других параметров политики безопасности. Проверки уровня целостности, как и проверки контроля доступа, не являются необязательными. Нет параметров политики безопасности для отключения проверок уровня целостности. Хотя механизм целостности поддерживает контроль учетных записей, механизм целостности остается в силе, когда контроль учетных записей отключен групповая политика безопасности.

Уровни целостности

Windows определяет уровни целостности с помощью идентификатора безопасности. Использование идентификатора безопасности для представления уровня целостности упрощает интеграцию механизма целостности в существующие структуры данных безопасности без необходимости изменения кода. Идентификаторы безопасности уровня целостности имеют следующую форму: S-1-16-xxxx. В таблице 1 показаны компоненты идентификаторов безопасности уровня целостности.

Таблица 1. Значения центра идентификатора идентификатора sid уровня целостности

Значение Описание

16

Представляет центр обязательной метки (SECURITY_MANDATORY_LABEL_AUTHORITY).

xxxx

Представляет поле относительного идентификатора (RID), которое является уровнем целостности. RID — это шестнадцатеричное значение, представляющее уровень целостности.

В Windows Vista существует четыре основных уровня целостности с четырьмя соответствующими значениями. Меньшее значение указывает на более низкий уровень целостности или более низкий уровень надежности. Эти значения определяются в файле заголовка winnt.h. В таблице 2 показаны определенные уровни целостности и соответствующие им значения.

Таблица 2. Определенные уровни целостности и соответствующие значения

Значение Описание Символ

0x0000

Уровень "Ненадежный"

SECURITY_MANDATORY_UNTRUSTED_RID

0x1000

Низкий уровень целостности

SECURITY_MANDATORY_LOW_RID

0x2000

Средний уровень целостности

SECURITY_MANDATORY_MEDIUM_RID

0x3000

Высокий уровень целостности

SECURITY_MANDATORY_HIGH_RID

0x4000

Уровень целостности системы

SECURITY_MANDATORY_SYSTEM_RID

Примером идентификатора безопасности среднего уровня целостности является строка S-1-16-8192. Значение RID 8192 является десятичным эквивалентом 0x2000.

Идентификаторы ИДЕНТИФИКАТОРов разделяются интервалами 0x1000, чтобы в будущем можно было определить дополнительные уровни. Разделение также позволяет назначить уровень целостности процессу, который немного выше среднего: например, для достижения конкретных целей проектирования системы.

Идентификаторы безопасности определенного уровня целостности имеют связанные с ними значения строковых имен. При использовании API LookupAccountSID будут возвращены имена строк для каждого идентификатора безопасности уровня целостности. В таблице 3 показаны имена строк для уровней целостности.

Таблица 3. Имена строк уровня целостности

Sid уровня целостности Имя

S-1-16-4096

Обязательная метка\Низкий обязательный уровень

S-1-16-8192

Обязательная метка\Средний обязательный уровень

S-1-16-12288

Обязательная метка\Высокий обязательный уровень

S-1-16-16384

Обязательная метка\Системный обязательный уровень

Уровни целостности также определяются как строки sid в языке определения дескриптора безопасности (SDDL). SDDL определяет формат строки, используемый функциями ConvertSecurityDescriptorToStringSecurityDescriptor и ConvertStringSecurityDescriptorToSecurityDescriptor для описания дескриптора безопасности в виде текстовой строки. Язык также определяет строковые элементы для описания информации в компонентах дескриптора безопасности. Использование SDDL для определения уровней целостности упрощает определение уровня целостности объекта при его создании. Дополнительные сведения о строках идентификаторов безопасности для уровней целостности см. в разделе Ресурсы механизма целостности Windows. Поддержка SDDL для обязательных меток описана в приложении A. SDDL для обязательных меток.

Windows Vista использует идентификаторы безопасности уровня целостности в маркере доступа безопасности для представления уровня целостности субъекта и использует идентификаторы безопасности уровня целостности в обязательной метке ACE в дескрипторе безопасности для представления уровня целостности объекта.

Политики целостности

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

Таблица 4. Категории политик целостности

Категория Описание

Политики обязательных маркеров доступа

Задайте в маркере доступа и определите, как обязательные политики применяются к субъекту, который представлен в маркере доступа.

Политики обязательных меток

Установите в обязательной метке ACE (описано ниже) для объектов и определите, как ограничить доступ к объекту.

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

Политики обязательных маркеров доступа

В таблице 5 показаны политики обязательных маркеров доступа, определенные в Windows Vista.

Таблица 5. Обязательные политики маркеров доступа в Windows Vista

Политика Описание

TOKEN_MANDATORY_NO_WRITE_UP

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

TOKEN_MANDATORY_NEW_PROCESS_MIN

Управляет поведением назначения уровня целостности дочерним процессам. Как правило, дочерний процесс наследует уровень целостности родительского процесса, когда маркер доступа родительского процесса назначается дочернему процессу. При использовании политики NEW_PROCESS_MIN уровень целостности дочернего процесса будет минимальным уровнем целостности родительского маркера доступа или уровня целостности объекта исполняемого файла для нового процесса. Эта политика задается по умолчанию во всех маркерах доступа.

Политику NEW_PROCESS_MIN можно описать в примере. Предположим, что существует исполняемая программа с именем lowcalc.exe. Файлу программы присваивается метка с низкой целостностью. Из командной строки пользователь запускает lowcalc.exe. Родительский процесс, cmd.exe, выполняется на среднем уровне целостности. Так как файл образа, lowcalc.exe, имеет низкую метку целостности, политика NEW_PROCESS_MIN устанавливает низкий уровень целостности нового процесса (lowcalc). Это показано в приведенном ниже примере в разделе Проектирование приложений для запуска на низком уровне целостности.

Обязательные политики меток

Политики обязательных меток определяются как флаги (биты) в поле Маска обязательной записи управления доступом к меткам. Эти флаги политики определяют ограничения на разрешения доступа, применяемые к субъектам с более низким уровнем целостности. В таблице 6 показаны обязательные политики меток, определенные в Windows Vista.

Таблица 6. Обязательные политики меток в Windows Vista

Политика Описание

SYSTEM_MANDATORY_POLICY_NO_WRITE_UP

Политика по умолчанию для всех обязательных меток объекта. Флаг эквивалентен политике маркеров доступа NO_WRITE_UP. Политика ограничивает доступ на запись к объекту субъектом с более низким уровнем целостности.

SYSTEM_MANDATORY_POLICY_NO_READ_UP

Ограничивает доступ на чтение к объекту субъектом с более низким уровнем целостности. Политика используется, например, для ограничения доступа на чтение к адресным пространствам виртуальной памяти процесса.

SYSTEM_MANDATORY_POLICY_NO_EXECUTE_UP

Ограничивает доступ к объекту субъектом с более низким уровнем целостности. Политика используется, например, для ограничения разрешений на активацию запуска в COM-классе более низким уровнем целостности.

Эти определенные политики соответствуют целям проектирования для Windows Vista. Архитектура механизма целостности позволяет в будущем расширяться путем определения дополнительных параметров политики, которые управляют разрешениями доступа между субъектами и объектами на разных уровнях целостности.

Сопоставление политик целостности с универсальными правами

Обязательный проверка политики выполняется в рамках функции безопасности AccessCheck. AccessCheck (и SeAccessCheck в режиме ядра) имеет в качестве одного из параметров функции GENERIC_MAPPING структуру. Универсальное сопоставление, предоставляемое вызывающим объектом, сопоставляет права доступа для конкретного объекта с универсальными категориями чтения, записи и выполнения. Политики обязательных меток реализуют ограничения на разрешенный доступ на основе универсальных категорий. Для определенного типа объекта GENERIC_MAPPING сообщает обязательной политике, проверка каких конкретных прав доступа запрещены.

Если структура GENERIC_MAPPING, передаваемая в вызов AccessCheck, равна нулям (0), универсальное сопоставление не определено. Если универсальное сопоставление не определено, обязательная политика проверка ограничивает все права доступа субъектами с низкой целостностью. Диспетчеры ресурсов, использующие AccessCheck для защиты частных объектов и передающие GENERIC_MAPPING структуру всех нулей, будут видеть ошибки Access Denied . Чтобы сопоставить права доступа, относящиеся к конкретному типу объекта, с универсальными правами доступа, которые применяет обязательная политика, требуется изменение кода в приложении Resource Manager.

Назначение уровней целостности маркерам доступа

Маркер доступа безопасности — это внутренняя структура данных, используемая ядром. Маркер доступа безопасности содержит различные значения информации, соответствующие привилегиям, членству в группах и другим сведениям, связанным с безопасностью. Инициализация маркера доступа происходит при интерактивном входе пользователя в Windows или при выполнении сетевой проверки подлинности. При инициализации маркера доступа добавляются идентификатор безопасности пользователя, идентификаторы БЕЗОПАСНОСТИ группы и привилегии в дополнение к другим значениям. Windows Vista назначает уровень целостности для маркера доступа при инициализации маркера доступа.

Ядро назначает маркер доступа каждому процессу и потоку. Основной маркер доступа процесса содержит уровень целостности, связанный с этим процессом. В механизме целостности Windows уровень целостности процесса называется уровнем целостности субъекта. Если маркер доступа приложения содержит идентификатор безопасности средней целостности, процесс приложения выполняется на уровне средней целостности. Нескольким процессам приложений, выполняемым под одной учетной записью пользователя, назначается один и тот же основной маркер доступа. Таким образом, каждому из приложений назначается один и тот же уровень целостности.

Уровни целостности назначаются маркерам доступа на основе определенных идентификаторов БЕЗОПАСНОСТИ группы, присутствующих в структуре TOKEN_GROUPS. Ядро Windows назначает уровень целостности на основе конкретных встроенных учетных записей пользователей или групп. Windows Vista назначает маркер доступа с идентификатором безопасности учетной записи локальной системы, который соответствует уровню целостности системы, маркер доступа с идентификатором безопасности локальной группы администраторов — высокий, а маркер доступа для учетной записи обычного пользователя — средний.

В таблице 7 показаны назначения уровня целостности маркеру доступа на основе наличия определенных идентификаторов безопасности.

В таблице 7 уровни целостности, связанные с определенными идентификаторами безопасности

SID в маркере доступа Назначенный уровень целостности

локальная система;

Система

локальная служба.

Система

сетевая служба;

Система

Администраторы

Высокий

Операторы архива

Высокий

Операторы настройки сети

Высокий

Криптографические операторы

Высокий

Прошедшие проверку пользователи

Средний

Все (мир)

Низкая

Анонимная

Ненадежный

Уровни целостности определяют различные уровни надежности для приложений, работающих на разных уровнях доступа. Большинство приложений в Windows Vista выполняются на уровне стандартного пользователя с доступом на среднем уровне целостности. Приложения на уровне средней целостности не испытывают ограничений на то, как они взаимодействуют с другими приложениями и с данными на среднем уровне целостности. Конкретные задачи или приложения, требующие прав администратора, выполняются на высоком уровне целостности. Системные службы выполняются на уровне целостности системы, так как существуют ограничения на их способность взаимодействовать с рабочим столом по умолчанию и часто работают с мощными привилегиями системы. Несколько приложений, предназначенных для работы с минимальными правами, например защищенный режим интернет-Обозреватель, могут работать с низким уровнем целостности.

Определенные права администратора Windows можно назначить маркеру доступа только с высоким уровнем целостности. Если уровень целостности маркера доступа меньше высокого, то определенные права администратора не допускаются и удаляются из маркера доступа. Административные привилегии, связанные с высоким уровнем целостности:

  • SE_CREATE_TOKEN_PRIVILEGE
  • SE_TCB_PRIVILEGE
  • SE_TAKE_OWNERSHIP_PRIVILEGE
  • SE_BACKUP_PRIVILEGE
  • SE_RESTORE_PRIVILEGE
  • SE_DEBUG_PRIVILEGE
  • SE_IMPERSONATE_PRIVILEGE
  • SE_RELABEL_PRIVILEGE
  • SE_LOAD_DRIVER_PRIVILEGE

Приложения могут назначать дубликату маркера доступа низкий уровень целостности при создании дочернего процесса. Windows может запускать процесс приложения с низким уровнем целостности, если исполняемый файл образа программы имеет низкую обязательную метку. Эти функции описаны далее в этой статье.

Как получить уровень целостности для маркера доступа

Уровень целостности сохраняется в маркере доступа с помощью поля TOKEN_GROUPS. Структура TOKEN_GROUPS представляет собой список идентификаторов безопасности и атрибутов, определяющих членство в группах для этой учетной записи пользователя. Уровень целостности маркера доступа также определяется в списке групп с помощью атрибута SID. Структура SID_AND_ATTRIBUTES содержит идентификатор безопасности уровня целостности, а уровень целостности определяется с помощью атрибутов SE_GROUP_INTEGRITY и SE_GROUP_INTEGRITY_ENABLED.

Уровень целостности маркера доступа можно получить из маркера доступа с помощью API GetTokenInformation. GetTokenInformation имеет параметр, указывающий, какой класс сведений маркера доступа требуется извлечь. Параметр TOKEN_INFORMATION_CLASS имеет определенное значение для уровня целостности TokenIntegrityLevel. Возвращаемая структура данных является TOKEN_MANDATORY_LABEL типом.

Определение уровня целостности процесса

  1. Откройте дескриптор маркера доступа процесса.

  2. Получение уровня целостности маркера доступа.

  3. Сравните идентификатор безопасности уровня целостности с идентификаторами, определяемыми системой.

Пример кода для получения уровня целостности маркера доступа приведен в приложении D.

Просмотр уровня целостности для маркера доступа

Уровень целостности в маркере доступа безопасности процесса можно просмотреть с помощью средств, которые предоставляют сведения о безопасности процесса, например Обозреватель процесса из SysInternals.com. На следующих изображениях показан экран из процесса Обозреватель со столбцом Уровень целостности, добавленным в представление (справа).

Рис. 1. Уровень целостности в Обозреватель процесса

Если мы рассмотрим свойства безопасности конкретного процесса, например explorer.exe, Обозреватель процесса отображает уровень целостности в списке групп, определенных в маркере доступа безопасности процесса. На следующем рисунке показан уровень обязательной метки/средний обязательный уровень, назначенный маркеру доступа для процесса, explorer.exe.

Рис. 2Explorer.exe как процесс среднего уровня целостности

Как задать уровень целостности для маркера доступа

Приложениям обычно не требуется изменять значение уровня целостности процесса. Приложениям обычно не требуется вносить изменения в значения маркера доступа безопасности. Однако в некоторых случаях службы, поддерживающие локальные клиенты на разных уровнях целостности, могут выполнять задачи на более низком уровне целостности. Олицетворение — это один из способов запуска потока службы на более низком уровне целостности. Когда поток службы олицетворяет локальный клиент, поток олицетворения имеет контекст безопасности клиента, который включает уровень целостности клиента, если клиент работает на том же локальном компьютере.

Еще один способ выполнения приложения, например создание набора файлов и разделов реестра, на более низком уровне целостности заключается в том, чтобы задать TokenIntegrityLevel для текущего маркера доступа потока. Новый уровень целостности не может быть выше уровня целостности в основном маркере доступа процесса.

Установка значения уровня целостности маркера доступа в потоке

  1. Вызовите OpenThreadToken , чтобы получить дескриптор маркера доступа.

  2. Вызовите GetTokenInformation со значением параметра TOKEN_INFORMATION_CLASSTokenIntegrityLevel , чтобы сохранить текущий уровень целостности потока.

  3. Вызовите SetTokenInformation со значением параметра TOKEN_INFORMATION_CLASSTokenIntegrityLevel.

Так как в адресном пространстве процесса между потоками с разными уровнями целостности нет границы безопасности, разработчики приложений должны учитывать потенциальные риски безопасности, связанные с выполнением кода в потоке с более низкой целостностью в процессе с более высоким уровнем целостности. Большинству приложений может быть проще создать отдельный процесс, выполняющийся на более низком уровне целостности, чтобы выполнять задачи с более низкой целостностью.

Пример установки TokenIntegrityLevel и создания процесса на более низком уровне целостности приведен в разделе Установка уровня целостности для маркера доступа.

Обязательный элемент управления доступом метки

Механизм целостности Windows определяет новый тип ACE— системную обязательную метку ACE. ACE обязательной метки используется для представления обязательной метки объекта в дескрипторе безопасности объекта. Обязательная метка содержит уровень целостности и связанную политику целостности. Обязательный элемент управления доступом метки используется только в системном ACL или SACL дескриптора безопасности. SACL — это отдельное поле в дескрипторе безопасности от дискреционного ACL (DACL).

Рис. 3. Поля дескриптора безопасности

Дискреционный список управления доступом содержит разрешения на доступ пользователей и групп к объекту. Любой пользователь или группа может вносить изменения в daCL с WRITE_DAC разрешениями на доступ к объектам. Списки ACL на усмотрение могут обновляться чаще и разными пользователями. Одной из целей проектирования механизма целостности является то, что система безопасности должна поддерживать метку с объектом после применения обязательной метки к объекту. Применение соответствующей обязательной метки в дескрипторе безопасности объекта практически не влияет на приложения, предназначенные для управления списками управления доступом, осуществляется путем помещения обязательной метки в системный список управления доступом, где она в основном находится под контролем системы безопасности. Обязательная метка логически отделена от записей аудита системы в SACL. Нет обязательного порядка, чтобы обязательная метка предшествовала записям аудита системы в SACL или следова за ней.

Обязательная метка ACE похожа на ACE с разрешенным доступом, так как содержит заголовок ACE, маску доступа и идентификатор безопасности. Часть идентификатора безопасности обязательной метки ACE содержит идентификатор безопасности уровня целостности. В таблице 8 показаны поля в заголовке ACE.

Поля таблицы 8, содержащиеся в заголовке ACE

Поле заголовка ACE Значение

AceType

SYSTEM_MANDATORY_LABEL_ACE_TYPE

AceFlags

Флаги элемента управления, определяющие наследование обязательного типа ACE метки

Acesize

Размер обязательной метки ACE

Обязательный элемент управления доступом метки содержит поле Mask . Маска используется для определения обязательных политик, определяющих ограничения на разрешения доступа, применяемые к процессам (или субъектам) с более низким уровнем целостности. Примером политики, широко используемой в Windows Vista, является политика NO_WRITE_UP. Флаг политики NO_WRITE_UP в обязательной маске ACE метки означает, что субъекты с более низким уровнем целостности (в маркере доступа), чем ИД безопасности уровня целостности в обязательной метке объекта, ограничены от получения универсального доступа на запись к объекту.

Существует только одна действительная обязательная метка для объекта. Если дескриптор безопасности получает несколько обязательных меток в SACL, первая обязательная метка ACE в SACL является действующей меткой для объекта.

Дополнительные сведения об обязательной метки ACE см. в разделе Ресурсы механизма целостности Windows.

Чтение обязательной метки ACE

Windows Vista использует функцию безопасности GetSecurityInfo для считывания обязательных сведений метки из объекта. GetSecurityInfo получает сведения о владельце, группе, DACL или SACL из объекта. Параметр SECURITY_INFORMATION GetSecurityInfo определяет, какая часть дескриптора безопасности возвращается. Windows Vista определяет новое значение сведений о безопасности LABEL_SECURITY_INFORMATION, которое используется для возврата обязательной метки ACE из saCL. Если вызов GetSecurityInfo указывает SACL_SECURITY_INFORMATION, возвращаются только ACE аудита системы в списке SACL, а не обязательные метки ACE.

Разрешение на доступ, необходимое для чтения обязательной метки ACE для объекта, является READ_CONTROL стандартного права доступа. Как правило, для получения или задания сведений в SACL требуется право доступа ACCESS_SYSTEM_SECURITY. ACCESS_SYSTEM_SECURITY предоставляется, только если в маркере доступа включена привилегия SE_SECURITY_NAME. Для чтения обязательной метки из SACL не требуются права SE_SECURITY_NAME или права доступа ACCESS_SYSTEM_SECURITY.

Установка обязательной метки ACE

Windows Vista использует функцию безопасности SetSecurityInfo, чтобы изменить обязательные сведения о метки для объекта. Обязательная метка объекта устанавливается подсистемой безопасности при создании объекта. Параметр SECURITY_INFORMATION SetSecurityInfo должен включать LABEL_SECURITY_INFORMATION, чтобы изменить обязательную метку в дескрипторове безопасности.

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

Разрешения, необходимые для изменения обязательной метки ACE в SACL дескриптора безопасности, WRITE_OWNER. Запись обязательной метки в SACL не требует прав SE_SECURITY_NAME или права доступа ACCESS_SYSTEM_SECURITY. Для уровня целостности в обязательной метке можно задать значение, меньшее или равное уровню целостности субъекта.

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

Изменение прав на метку

Механизм целостности Windows определяет новые права безопасности Windows, SE_RELABEL_NAME. Если этот параметр включен в маркере доступа безопасности, привилегия безопасности для повторной маркировки позволяет субъекту задать для обязательной метки объекта более высокий уровень целостности, чем уровень целостности в маркере доступа субъекта. Политика безопасности по умолчанию для Windows Vista не назначает эти привилегии ни одному пользователю или группе. Привилегия предназначена для сценариев, в которых процесс администратора, выполняющийся на высоком уровне целостности, должен изменить или назначить обязательную метку для объектов на уровне целостности системы. В Windows Vista нет задач, которые требуют или используют права повторной маркировки.

Как Windows назначает обязательную метку объектам

Windows назначает обязательную метку защищаемому объекту при создании дескриптора безопасности объекта. Уровень целостности нового объекта назначается одним из трех способов:

  • Подсистема безопасности назначает объекту обязательную метку при создании дескриптора безопасности для объекта .
  • Процесс создания задает явную обязательную метку в качестве атрибутов безопасности при создании объекта с помощью функции, например CreateFile.
  • Родительский контейнер определяет наследуемую обязательную метку ACE, которая применяется к дочерним объектам, созданным в контейнере.

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

Обязательные метки можно применять ко всем защищаемым объектам, имеющим управление доступом на основе дескриптора безопасности. Существует множество типов защищаемых объектов, включая объекты процессов и потоков, именованные объекты и постоянные объекты, такие как файлы или разделы реестра. Windows Vista не назначает явные обязательные метки всем типам объектов при создании объектов. Ниже перечислены типы объектов, которым подсистема безопасности назначает обязательные метки при создании объекта:

  • Процесс
  • Thread
  • Маркер доступа
  • Задание

Все остальные типы объектов имеют неявную метку по умолчанию или наследуемую обязательную метку. Помните, что во время инициализации маркера доступа назначается уровень целостности маркеру доступа безопасности, созданному во время интерактивного входа. Первый процесс, запускаемый от имени входа пользователя, — это userinit.exe, который запускает процесс оболочки, explorer.exe. Userinit.exe запускается системной службой (Winlogon), которая использует вызов CreateProcessAsUser и передает маркер доступа для пользователя интерактивного входа.

CreateProcessAsUser, помимо прочего, создает объект процесса и начальный поток. При создании объекта процесса дескриптору безопасности для этого процесса назначается уровень целостности из маркера доступа, назначенного в качестве основного маркера доступа к новому процессу. Когда userinit.exe вызывает CreateProcess для запуска оболочки, инициализируется объект процесса для explorer.exe. Объект процесса включает дескриптор безопасности и основной маркер доступа. Для обязательной метки процесса explorer.exe устанавливается уровень целостности процесса создания, userinit.exe, который является средним. Основной маркер доступа для explorer.exe наследуется от родительского процесса создания, userinit.exe и имеет средний уровень целостности. Когда процесс explorer.exe создает новый поток, объекту потока присваивается дескриптор безопасности, а подсистема безопасности назначает объекту потока уровень целостности на основе уровня целостности процесса создания. Объектам потоков в процессе explorer.exe назначается уровень целостности среды, который является уровнем целостности основного маркера доступа процесса создания.

Примечание

Объект маркера доступа — это защищаемый объект с собственным дескриптором безопасности. Дескриптор безопасности маркера используется для определения разрешенного доступа во время выполнения функций OpenProcessToken или OpenThreadToken. Объект маркера доступа имеет обязательную метку в дескрипторе безопасности объекта маркера доступа. Маркер доступа также содержит идентификатор безопасности уровня целостности в списке групп маркеров доступа, который представляет уровень целостности субъекта.

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

Уровень целостности по умолчанию

Не всем типам объектов назначается обязательная метка ACE в дескрипторе безопасности. Если в дескрипторе безопасности присутствует обязательная метка ACE, это называется явной обязательной меткой. Если ACE не содержит обязательных меток, подсистема безопасности использует неявную метку по умолчанию для этого объекта во время проверка обязательной политики. Обязательная метка по умолчанию назначает средний уровень целостности для всех защищаемых объектов. Если обязательная метка не определена в дескрипторе безопасности, то неявная обязательная метка по умолчанию применяется ко всем типам объектов.

Средний уровень целостности объектов по умолчанию в сочетании с обязательной политикой NO_WRITE_UP по умолчанию ограничивает доступ к изменению всех объектов процессами с уровнем целостности субъекта ниже среднего. Обязательные метки и политика по умолчанию не позволяют ненадежным процессам при низкой целостности изменять любые пользовательские или системные файлы или разделы реестра в системе, которые в противном случае могут разрешить дискреционный доступ на запись в DACL.

Объекты файловой системы NTFS и разделы реестра не помечаются автоматически при их создании. Эти объекты не имеют обязательных меток после обновления с предыдущей версии Windows до Windows Vista. Файлы в файловых системах, отличных от NTFS (CDFS или FAT32), не имеющие дескрипторов безопасности, не являются защищаемыми объектами и не имеют уровня целостности. Каждый дескриптор безопасности должен иметь неявную обязательную метку.

Процессы с уровнем целостности субъекта со средним уровнем целостности или выше создают файлы и разделы реестра без явной метки. Как следствие, объекты файловой системы и реестра, созданные процессом высокого уровня целостности системы или системы, имеют неявную метку среды. Приложения, использующие обязательные метки, могут определять явные метки при создании объектов. Однако Windows Vista не назначает метки выше среднего уровня целостности файловой системе или реестру по умолчанию. Это не означает, что эти объекты обязательно открыты для изменения процессами с более низкой целостностью. Наследуемый (или по умолчанию) дискреционный список управления доступом к файловой системе или объектам реестра, созданным процессом высокого или системного уровня, предоставляет доступ на запись только членам группы "Администраторы" или локальным системным учетным записям или учетным записям служб.

Ряд ограничений проектирования требует использования неявной обязательной метки medium по умолчанию вместо назначения явной обязательной метки на основе уровня целостности субъекта для большинства типов объектов. Конкретный пример основан на возможности включения или отключения контроля учетных записей с помощью локальной политики безопасности. Если контроль учетных записей отключен, у пользователя, являющегося членом локальной группы администраторов, все процессы выполняются с полным маркером доступа привилегий на высоком уровне целостности. Если все объекты имеют явные метки на уровне целостности субъекта, то всем файлам, таким как документы и электронные таблицы, создаваемые пользователем, будет присвоен высокий уровень целостности. Высокая метка может показаться уместной, даже если унаследованные разрешения DACL для профиля пользователя обеспечивают достаточный контроль доступа для доступа пользователей. Однако если контроль учетных записей включен локальным компьютером или групповая политика, большинству процессов, выполняемых одним и тем же пользователем, назначается отфильтрованный маркер доступа безопасности на среднем уровне целостности. После включения контроля учетных записей пользователь не сможет открывать файлы, созданные при отключении контроля учетных записей. Приложение со средним уровнем целостности, которое пытается открыть документы пользователя с высокой степенью целостности, получит ошибку Отказано в доступе.

Если процесс выполняется с уровнем целостности субъекта, меньшим, чем уровень целостности по умолчанию среднего уровня, этот процесс будет иметь ограниченные разрешения на доступ ко всем объектам с неявным средним уровнем целостности. Процессы с низким уровнем целостности не смогут изменять объекты с явным или неявным уровнем целостности среднего или выше, независимо от прав доступа, предоставленных в DACL субъекту безопасности. Таким образом, все объекты, созданные процессом с уровнем целостности субъекта, меньшим, чем уровень по умолчанию (средний), явно помечены подсистемой безопасности. Ограничения доступа к процессам с низкой целостностью возможны в Windows Vista, так как все приложения обычно выполняются на среднем уровне целостности, а проблемы с совместимостью приложений минимальны. Приложения, которые работают правильно при низкой целостности, обычно требуют конкретных изменений в структуре для правильной работы с ограниченным доступом. Изменения в структуре рассматриваются в разделе Ниже, посвященном проектированию приложений для запуска на низком уровне целостности.

Присвоение меток объектам, созданным низкой темой

Приложения можно запускать с помощью функции CreateProcessAsUser на низком уровне целостности. Низкий процесс инициализируется CreateProcessAsUser со следующими сведениями об уровне целостности:

  • Новый объект процесса создается с дескриптором безопасности, содержащим обязательную метку с низкой целостностью.
  • Для этого процесса создается новый объект потока с дескриптором безопасности, содержащим обязательную метку с низкой целостностью.
  • Новому процессу назначается основной маркер доступа. Объект маркера доступа имеет дескриптор безопасности с обязательной меткой на низком уровне, а маркер доступа содержит TokenIntegrityLevel с низким идентификатором безопасности целостности, который представляет уровень целостности субъекта.

Предположим, что выполняется процесс с низкой целостностью и требуется создать поток. Чтобы создать поток, он должен открыть собственный объект процесса для доступа на запись, чтобы создать новый объект потока. Если обязательная метка в объекте процесса была средней, низкий субъект не смог бы открыть процесс и не смог бы создать новый поток. Так как объект процесса также помечен с низкой целостностью, низкому субъекту разрешено открыть процесс для доступа на запись и создать новый объект потока. В примере показано, почему важно, чтобы обязательные метки для объекта процесса, объектов потоков и маркера доступа безопасности были согласованы на одном уровне целостности.

Примечание

Это относится ко всем уровням целостности, а не только к низкому уровню.

Предположим, что низкий процесс создает временный файл. Приложение вызывает CreateFile, чтобы создать новый файл, записать данные и закрыть файл. Позже низкому процессу потребуется повторно открыть тот же файл для добавления данных. Если временный файл имеет неявную обязательную метку по умолчанию на среднем уровне целостности, низкий процесс не сможет повторно открыть созданный ранее файл для изменения доступа. Та же проблема может возникнуть для любого защищаемого объекта, создаваемого субъектом с уровнем целостности ниже уровня среды по умолчанию. Поэтому всем защищаемым объектам, созданным субъектом с уровнем целостности ниже уровня по умолчанию, автоматически назначается явная обязательная метка. Иными словами, все объекты ядра, разделы реестра и объекты файловой системы явным образом помечаются на низком уровне при низком уровне целостности субъекта.

Создание объекта с определенной обязательной меткой

Большинству приложений Windows не требуется учитывать целостность. Подсистема безопасности автоматически создает объекты и присваивает им обязательную метку. Так как большинство приложений выполняются на среднем уровне целостности, а уровень целостности объектов по умолчанию — средний, политика целостности не изменяет разрешенный контроль доступа для большинства приложений. Однако некоторые приложения, например службы, предназначены для поддержки клиентских приложений на разных уровнях целостности. Служба может работать на более высоком уровне целостности, чем у клиента, и может потребоваться пометить новые объекты, созданные от имени клиента, явным образом на более низком уровне целостности. Уровень целостности объекта может быть задан процессом создания. Ограничение заключается в том, что уровень целостности нового объекта должен быть меньше или равен уровню целостности процесса создания.

Создание объекта с определенной обязательной меткой

  1. Создайте дескриптор безопасности SDDL, который определяет метку с низким уровнем обязательности, например:
    #define LOW_INTEGRITY_SDDL_SACL_W L"S:(ML;;NW;;;LW)"
  2. Преобразуйте строку SDDL в дескриптор безопасности с помощью ConvertStringSecurityDescriptorToSecurityDescriptor.
  3. Назначьте дескриптор безопасности с низкой обязательной меткой структуре атрибутов безопасности.
  4. Передайте параметр атрибутов безопасности в вызов , чтобы создать объект, например CreateFile.

Обязательное наследование меток

Windows Vista не помечает файлы и каталоги в файловой системе NTFS явным образом. Как упоминалось ранее, подсистема безопасности использует неявную обязательную метку с уровнем среды по умолчанию для объектов, у которых нет обязательной метки в дескрипторе безопасности.

Приложения могут работать на низком уровне целостности. Защищенный режим интернет-Обозреватель является примером приложения Windows Vista, которое предназначено для запуска при низкой целостности. Приложениям с низкой целостностью могут потребоваться папки в файловой системе, где они могут записывать временные файлы или данные приложения. В случае защищенного режима интернет-Обозреватель используется папка Временный интернет-файл в профиле пользователя. Как низкое приложение может записывать данные в папку файловой системы? Папке должна быть назначена явная обязательная метка, которая разрешает доступ на запись из процесса с низкой целостностью.

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

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

Обязательная структура данных типа ACE метки содержит заголовок ACE с полем AceFlags. Поле AceFlags используется для определения флагов наследования для типа ACE, которые совпадают с флагами наследования для других типов ACE, таких как тип ACE с разрешенным доступом, который используется для дискреционного доступа. Обязательные ACE меток можно определить как наследуемые для наследуемого контейнера (CI) и (или) наследования объектов (OI). Обязательные ACE меток не могут быть inherit_only (IO). Если контейнеру назначена обязательная наследуемая метка ACE, то обязательная метка применяется к самому контейнеру и к дочерним объектам, к которым применяется наследование.

Примером наследуемой обязательной метки является низкая обязательная метка в одной из папок, созданных в каждом профиле пользователя: %USERPROFILE%\AppData\LocalLow. При инициализации профиля этой папке назначается низкая обязательная метка, которая предназначена для записи по умолчанию приложениями с низким уровнем целостности. На следующем рисунке показана наследуемая обязательная метка в папке AppData\LocalLow, отображаемой с помощью команды Icacls. Дополнительные сведения о том, как Icacls поддерживает обязательные метки, см. в приложении B. Уровни целостности файлов и Icacls.

Флаги наследования в обязательной метке указывают, что ACE является (OI) и (CI) ACE с обязательной политикой NO_WRITE_UP (NW). Все вложенные папки, созданные в папке AppData\LocalLow, наследуют наследуемую метку.

Рис. 4. Наследуемая низкая обязательная метка

При создании нового файла или вложенной папки из среднего процесса новый объект наследует низкую обязательную метку. В следующем примере командная строка выполняется в процессе со средним уровнем целостности. Файл, newfile.txt, и новая папка Temp создаются в папке LocalLow, и оба объекта наследуют низкую обязательную метку от родительского контейнера. Icacls указывает, что обязательная метка наследуется с обозначением (I).

Рис. 5. Наследование обязательной метки дочернего объекта

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

Наследование и явные метки

Объекты, созданные в контейнере с наследуемой обязательной меткой, наследуют обязательную метку от контейнера. Однако процесс, создающий новый объект, например файл, может предоставить явную обязательную метку в параметре атрибутов безопасности для функции create, например CreateFile.

Если процесс создания предоставляет явную метку в качестве параметра функции создания объекта, новому объекту назначается явная обязательная метка, предоставляемая вызывающим объектом, и он не наследуется от родительского контейнера. Уровень целостности явной обязательной метки может быть не выше, чем у процесса субъекта, создающего объект. Уровень целостности в явной обязательной метке, предоставляемой субъектом, может быть выше уровня целостности в наследуемой обязательной метке родительского контейнера.

Ограничение только наследования

Только наследовать (io) — это флаг в записи управления доступом, который указывает, что ACE не управляет доступом к объекту, к которому он присоединен. ACE, доступные только для наследования, обычно назначаются объектам-контейнерам. ACE, доступный только для наследования, не действует в самом контейнере; вместо этого он применяется к дочерним объектам контейнера. Существует ограничение для субъектов с уровнем целостности ниже, чем по умолчанию для установки меток INHERIT_ONLY для новых объектов. Если явная метка, переданная для нового объекта контейнера, является меткой INHERIT_ONLY с уровнем меньше, чем значение по умолчанию, метка считается недопустимой и игнорируется. Причина этого ограничения заключается в том, что низкий субъект создает контейнер и пытается установить метку INHERIT_ONLY в контейнере на низком уровне. Если метка INHERIT_ONLY была принята, эффективным уровнем целостности контейнера будет неявный уровень по умолчанию средний.

Кроме того, субъекты не могут определить метку INHERIT_ONLY с уровнем целостности выше, чем уровень целостности субъекта. Например, средний субъект не может определить метку INHERIT_ONLY с высоким уровнем целостности.

Наследование защищенных списков saCL и меток

SDDL поддерживает определение защищенного saCL, который может включать явную обязательную метку. Защищенный saCL задает флаг SE_SACL_PROTECTED в поле SECURITY_DESCRIPTOR_CONTROL дескриптора безопасности. Логическое разделение LABEL_SECURITY_INFORMATION и SACL_SECURITY_INFORMATION в отношении прав доступа не является полным в отношении поведения защищенного saCL. Обязательные метки хранятся в SACL. Защищенный saCL подразумевает, что обязательная метка также защищена.

Если флаг SE_SACL_PROTECTED установлен в SECURITY_DESCRIPTOR_CONTROL, то обязательная метка также защищена.

  • Если в защищенном списке SACL отсутствует обязательная метка ACE, наследуемая обязательная метка ACE из контейнера не применяется (новый объект имеет неявную обязательную метку по умолчанию).
  • Если в защищенном saCL есть обязательная метка ACE, изменения наследуемой метки ACE в контейнере не влияют на этот объект.

Дополнительные сведения о SDDL см. в приложении A. SDDL для обязательных меток или ресурсах механизма целостности Windows.

Как проверки доступа работают с обязательной политикой

Функция AccessCheck принудительно применяет обязательную политику. AccessCheck сравнивает указанный дескриптор безопасности с указанным маркером доступа и указывает в параметре AccessStatus , предоставлен или запрещен доступ. Функция AccessCheck сначала сравнивает уровень целостности в ClientToken с обязательной меткой в SACL pSecurityDescriptor , чтобы определить, какие права доступа недоступны на основе обязательной политики. После того как обязательная политика проверка, AccessCheck сравнивает требуемый доступ с правами доступа, предоставленными в DACL.

Обязательная политика по умолчанию не позволяет процессам с более низкой целостностью получать общий доступ на запись к объектам с более высоким уровнем целостности. Например, по умолчанию процессу с низким уровнем целостности запрещается общий доступ на запись к объекту с более высоким уровнем целостности. Если pSecurityDescriptor не содержит обязательного ACE, предполагается неявный обязательный ACE, который назначает объекту средний уровень целостности. Параметр GenericMapping определяет, какие права доступа связаны с универсальным доступом на запись. Если параметр GenericMapping равен нулю, то проверка целостности не предоставляет никаких конкретных прав доступа к ClientToken с низкой целостностью. После того как проверка целостности определит универсальные права доступа, доступные вызывающему объекту на основе обязательной политики, dascriptor дескриптора безопасности сравнивается с ClientToken, чтобы определить остальные предоставленные права доступа.

Изоляция привилегий пользовательского интерфейса (UIPI) и целостность

Изоляция привилегий пользовательского интерфейса (UIPI) реализует ограничения в подсистеме Windows, которая запрещает приложениям с более низкими привилегиями отправлять сообщения окна или устанавливать перехватчики в процессах с более высоким уровнем привилегий. Приложениям с более высокими привилегиями разрешено отправлять сообщения окна в процессы с более низким уровнем привилегий. Ограничения реализуются в функциях SendMessage и связанных с ними оконных сообщений. Не все сообщения окна, отправляемые из процесса с более низким уровнем привилегий в процесс с более высоким уровнем привилегий, блокируются. Как правило, сообщения типа "чтение", например WM_GETTEXT, можно отправлять из окна с более низкими привилегиями в окно с более высоким уровнем привилегий. Однако сообщения типа записи, такие как WM_SETTEXT, блокируются.

Уровень привилегий пользовательского интерфейса находится на уровне процесса и применяется ко всем окнам, созданным процессом. Подсистема USER инициализируется, когда процесс выполняет первый вызов интерфейса графического устройства Windows (GDI). Во время инициализации процесса подсистема USER вызывает подсистему безопасности, чтобы определить уровень целостности, назначенный в основном маркере доступа безопасности процесса. После того как подсистема USER устанавливает уровень привилегий пользовательского интерфейса во время инициализации процесса, он не изменяется. Установка для параметра TokenIntegrityLevel для потока более низкого значения не влияет на уровень привилегий пользовательского интерфейса процесса или любых окон, открытых этим процессом или потоком.

UIPI не влияет на работу и не изменяет поведение обмена сообщениями между приложениями с одинаковым уровнем привилегий (или целостности). UIPI запрещает процессам с более низкими привилегиями доступ к процессам с более высоким уровнем привилегий, блокируя следующее поведение. Процесс с более низким уровнем привилегий не может:

  • Выполните проверку дескриптора окна для процесса, выполняющегося с более высокими правами.
  • Используйте SendMessage или PostMessage для окон приложений, работающих с более высокими правами. Эти API возвращают успешное выполнение, но автоматически отбрасыв сообщение окна.
  • Используйте перехватчики потоков для присоединения к процессу, выполняемого с более высокими правами.
  • Используйте перехватчики журналов для отслеживания процесса, выполняемого с более высокими правами.
  • Выполните внедрение библиотеки динамической компоновки (DLL) в процесс, выполняющийся с более высокими правами.

Если uiPI включен, следующие общие ресурсы USER по-прежнему совместно используются между процессами с разными уровнями привилегий.

  • Окно рабочего стола, которое фактически владеет поверхностью экрана
  • Общая память для кучи рабочего стола, доступная только для чтения
  • Глобальная таблица atom
  • Буфер обмена

Рисование на экране — это еще одно действие, которое не блокируется UIPI. Модель интерфейса пользователя и графического устройства (GDI) не позволяет управлять поверхностями рисования. Таким образом, приложение, работающее с меньшим количеством прав, может закрасить поверхность окна приложения для приложения, работающего с более высокими правами.

UIAccess для приложений автоматизации пользовательского интерфейса

Автоматизация пользовательского интерфейса Майкрософт — это модель Windows Vista для поддержки требований к специальным возможностям с улучшениями по сравнению с более ранней моделью, известной как Microsoft Active Accessibility (MSAA). Приложения, предназначенные для поддержки специальных возможностей пользователя, управляют поведением других приложений Windows от имени пользователя. Если все приложения (клиент и сервер автоматизации) выполняются от имени обычного пользователя, то есть на среднем уровне целостности, ограничения UIPI не влияют на модель автоматизации пользовательского интерфейса.

Однако в некоторых случаях пользователь с правами администратора запускает приложение с повышенными привилегиями на основе UAC в режиме утверждения Администратор. Программа автоматизации пользовательского интерфейса не сможет управлять графическим интерфейсом приложений с повышенными привилегиями на рабочем столе без возможности обойти ограничения, которые реализует UIPI. Возможность обойти ограничения UIPI для SendMessage на разных уровнях привилегий доступна для программ автоматизации пользовательского интерфейса с помощью специального атрибута безопасности в манифесте приложения программы, известного как UIAccess.

Ниже приведен пример записи манифеста приложения для программы UIAccess.

<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> 
  <security> 
    <requestedPrivileges> 
    <requestedExecutionLevel 
      level="asInvoker" 
      UIAccess="true" /> 
    </requestedPrivileges> 
  </security> 
</trustInfo>

Указывая UIAccess="true" в атрибуте requestedPrivileges, приложение устанавливает требование обходить ограничения UIPI для отправки сообщений окна между уровнями привилегий. Windows Vista реализует следующие проверки политики перед запуском приложения с правами UIAccess.

  • Приложение должно иметь цифровую подпись, которую можно проверить с помощью цифрового сертификата, который связан с доверенным корнем в хранилище сертификатов доверенных корневых центров сертификации локального компьютера.
  • Приложение должно быть установлено в каталоге приложений локальной папки, который может записываться только администраторам, например в каталог Program Files. Для приложений на основе модели автоматизации пользовательского интерфейса разрешены следующие каталоги:
    • %ProgramFiles% и его подкаталоги;
    • %WinDir% и его подкаталоги, кроме нескольких подкаталогов, которые исключены по причине возможности записи в них обычными пользователями.

Исключенные подкаталоги %WinDir% включают:

  • \Отладки
  • \PCHealth
  • \Регистрации
  • \System32\ccm
  • \System32\com
  • \System32\FxsTmp
  • \System32\Spool
  • \System32\Tasks

Windows Vista предоставляет параметр безопасности для политики локального компьютера и для групповая политика, чтобы настроить требование запуска программ UIAccess из безопасных расположений. Этот параметр определяется в разделе Параметры безопасности в разделе Локальные политики для локальных политик безопасности. Ниже приведена политика безопасности.

Контроль учетных записей пользователей: повышать права для UIAccess-приложений только при установке в безопасных местах

Эта настройка включена по умолчанию. Однако администратор может отключить его, если существуют ситуации, когда приложения UIAccess (специальные технологии), которые необходимо запускать из папок, не защищены доступом только администратора на запись.

Если приложение автоматизации пользовательского интерфейса, запрашивающее UIAccess, соответствует требованиям параметров UIAccess, Windows Vista запускает приложение с возможностью обойти большинство ограничений UIPI. Если приложение автоматизации пользовательского интерфейса не соответствует ограничениям безопасности, оно будет запущено без прав UIAccess и может взаимодействовать только с приложениями с тем же или более низким уровнем привилегий.

Процесс, запущенный с правами UIAccess:

  • Имеет возможность задать окно переднего плана.
  • Может управлять любым окном приложения с помощью функции SendInput.
  • Имеет входные данные чтения для всех уровней целостности с использованием низкоуровневых перехватчиков, необработанных входных данных, GetKeyState, GetAsyncKeyState и GetKeyboardInput.
  • Может задавать обработчики журнала.
  • Использует AttachThreadInput для подключения потока к очереди входных данных с более высоким уровнем целостности

Приложениям, которые запускаются с правами UIAccess для обычного пользователя, в маркере доступа назначается немного более высокое значение уровня целостности. Уровень целостности маркера доступа для приложения UIAccess для обычного пользователя — это значение среднего уровня целостности, а также увеличение 0x10. Более высокий уровень целостности для приложений UIAccess не позволяет другим процессам на том же рабочем столе на среднем уровне целостности открывать объект процесса UIAccess.