Защита процесса и права доступа


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

Когда пользователь открывает сессию, операционная система Microsoft® Windows® собирает набор данных, который уникально идентифицирует пользователя в течение опознавательного процесса, и сохраняет это в признаке доступа. Этот признак доступа описывает контекст системы безопасности всех процессов, связанных с пользователем. Контекст защиты (системы безопасности) процесса - это набор полномочий, данных процессу или учетной записи пользователя, которая создавала процесс.

Вы можете задавать дескриптор безопасности для процесса, когда вызываете функцию CreateProcess, CreateProcessAsUser или CreateProcessWithLogonW. Если Вы устанавливаете значение ПУСТО (NULL), процесс получает заданный по умолчанию дескриптор безопасности. Списки контроля доступа (ACL) в заданном по умолчанию дескрипторе безопасности для процесса поступают от первичного маркера или маркера заимствования прав создателя.

Чтобы извлечь данные о дескрипторе безопасности процесса, вызовите функцию GetSecurityInfo. Чтобы изменить дескриптор безопасности процесса, вызовите функцию SetSecurityInfo.

Правильные права доступа для объектов процесса включают в себя стандартные права доступа DELETE, READ_CONTROL, SYNCHRONIZE, WRITE_DAC и WRITE_OWNER , в дополнение к нижеследующим конкретным для процесса правам доступа.

 

Значение

Предназначение

PROCESS_ALL_ACCESS

Все возможные права доступа для объекта процесса. 

PROCESS_CREATE_PROCESS

Необходимо для создания процесса. 

PROCESS_CREATE_THREAD

Необходимо для создания потока. 

PROCESS_DUP_HANDLE

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

PROCESS_QUERY_INFORMATION

Необходимо, чтобы извлечь некоторую информацию о процессе, такую как его код выхода и класс приоритета (см. GetExitCodeProcess и GetPriorityClass). 

PROCESS_SET_QUOTA

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

PROCESS_SET_INFORMATION

Необходимо, чтобы установить некоторую информацию о процессе, такую как его класс приоритета (см. SetPriorityClass). 

PROCESS_TERMINATE

Необходимо для завершения работы процесса с использованием функции TerminateProcess. 

PROCESS_VM_OPERATION

Необходимо, чтобы выполнять операцию в адресном пространстве процесса (см. VirtualProtectEx и WriteProcessMemory). 

PROCESS_VM_READ

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

PROCESS_VM_WRITE

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

SYNCHRONIZE

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

 

Дескриптор, возвращенный функцией CreateProcess, имеет доступ PROCESS_ALL_ACCESS к объекту процесса. Когда Вы вызываете функцию OpenProcess, система проверяет требуемые права доступа по списку разграничительного контроля доступа (DACL) в дескрипторе безопасности процесса. Когда Вы вызываете функцию GetCurrentProcess, система возвращает псевдодескриптор с максимальным доступом, который позволяет список разграничительного контроля доступа (DACL) вызывающей программе.

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

Внимание! процесс, который имеет некоторые из прав доступа, отмеченные здесь может использовать их, чтобы получить другие права доступа. Например, если процесс А имеет дескриптор процесса B с доступом PROCESS_DUP_HANDLE, он может продублировать псевдодескриптор для процесса B. Это создает дескриптор, который имеет максимум прав доступа к процессу B. Для получения дополнительной информации о псевдодескрипторах, см. GetCurrentProcess.

 

Назад в оглавление темы
На главную страницу темы

Hosted by uCoz