На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

Impersonation



Impersonation is the ability of a thread to execute in a security context different from the that of the process that owns the thread. Typically, a thread in a server application impersonates a client. This allows the server thread to act on behalf of that client to access objects or validate access to its own objects. For example, when a client in a DDE conversation requests information from a DDE server, the server can impersonate the client so the system can verify that the client is allowed access to the information.

The Win32 API provides several ways for a thread to begin an impersonation:

· A DDE server application can call the DdeImpersonateClient function to impersonate a client.
· A named-pipe server can call the ImpersonateNamedPipeClient function.
· You can call the ImpersonateLoggedOnUser function to impersonate the security context of a specifed user.
· The ImpersonateSelf function enables a thread to generate a copy of its own access token. This is useful when an application needs to change the security context of a single thread. For example, sometimes only one thread of a process requires a special privilege.

· You can call the SetThreadToken function to cause the target thread to run in the security context of a specified impersonation token.



In all these cases, the impersonating thread can revert to its own security context by calling the RevertToSelf function.
An RPC server can call the RpcImpersonateClient function to impersonate a client. The RPC server calls RpcRevertToSelf or RpcRevertToSelfEx to restore the security context defined for the server thread.
When a thread is impersonating a user, most actions by the thread are done in the security context of the thread's impersonation token rather than the primary token of the process that owns the thread. For example, an individual thread of a server process can impersonate a client to verify that the client is allowed to access a securable object. However, some actions are always done using the security context of the process. For example, if an impersonating thread calls the CreateProcess function, the new process inherits the primary token of the process rather than the impersonation token of the calling thread. Similarly, the system always uses the primary token of the process to validate actions requiring the SE_TCB_NAME privilege.

To create a new process that runs in the security context of an impersonated user, you can use the DuplicateTokenEx and CreateProcessAsUser functions. In a typical scenario, a server thread impersonates a client by calling one of the impersonation functions, such as the ImpersonateNamedPipeClient function. The impersonating thread then calls the OpenThreadToken function to get its own token, which is an impersonation token that has the security context of the client. The thread then calls DuplicateTokenEx to convert its impersonation token into a primary token. You can then pass this primary token in a call to CreateProcessAsUser. Note that a process created by this method may not have access to the network. This is because Windows NT authentication does not send a password from the client to the server, so the new process does not have the credentials to make a network connection to a third machine.

The LogonUser function provides another method for impersonating a user. If your process has the SE_TCB_NAME privilege, it can specify the authentication credentials of a user in a call to LogonUser. If the logon operation is successful, the function returns a primary access token that represents the specified user. You can use this primary token in a call to CreateProcessAsUser to create a process that runs in the security context of the user. Note that in this case, the new process would have access to the network because you supplied the password in the LogonUser call.

The SECURITY_IMPERSONATION_LEVEL enumeration defines four impersonation levels.

Impersonation Level Meaning
SecurityAnonymous Indicates the client does not want the server to obtain identification information about the client.
SecurityIdentification Allows the server to obtain information about the client, such as security identifiers and privileges, without being able to impersonate the client. This is useful for servers that export their own objects, such as a database product that exports tables and views. Using the retrieved client security information, the server is able to make access-validation decisions for itself even though it is unable to use other services as the client.
SecurityImpersonation Allows the server to impersonate the client's security context on its local system. The server cannot impersonate the client on remote systems.
SecurityDelegation Windows NT security does not support this impersonation level.



Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

Маскировка



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

Win32 API Обеспечивает несколько путей для резьбы, чтобы начинать маскировку:

Приложение сервера DDE может назвать функцию DdeImpersonateClient, чтобы подражать клиенту.
Поименованная труба сервера может назвать функцию ImpersonateNamedPipeClient.
Вы можете назвать функцию ImpersonateLoggedOnUser, чтобы подражать контексту безопасности specifed пользователя.
Функция ImpersonateSelf допустимые резьба, чтобы генерировать копию своего собственного признака доступа. Это полезное когда приложению нужно изменять контекст безопасности единственной резьбы. Например, иногда только один резьба процесса требует специальную привилегию.

Вы можете назвать функцию SetThreadToken, чтобы вызывать целевую резьбу, чтобы работать в контексте безопасности определенного признака маскировки.



Во всех этих случаях, подражающая резьба может возвращаться в свой собственный контекст безопасности вызывая функцию RevertToSelf.
Сервер RPC может назвать функцию RpcImpersonateClient, чтобы подражать клиенту. Сервер RPC называет RpcRevertToSelf или RpcRevertToSelfEx, чтобы восстанавливать контекст безопасности определенный для резьбы сервера.
Когда резьба подражает пользователю, большинство действий резьбой сделаны в контексте безопасности признака маскировки резьбы а не первичный признак процесса, которые обладают резьбой. Например, индивидуальная резьба процесса сервера может подражать клиенту, чтобы проверять, что клиент позволен иметь доступ к securable объекту. Тем не менее, некоторые действия всегда сделаны используя контекст безопасности процесса. Например, если подражающая резьба называет функцию CreateProcess, новый процесс наследует первичный признак процесса а не признак маскировки вызова резьбы. Аналогично, система всегда использует первичный признак процесса, чтобы подтверждать действия, требующие привилегию SE_TCB_NAME.

Чтобы создавать новый процесс, который работает в контексте безопасности подражающего пользователя, Вы можете использовать DuplicateTokenEx и функции CreateProcessAsUser. В типичном сценарии, резьба сервера подражает клиенту вызывая одну из функций маскировки, как например, функция ImpersonateNamedPipeClient. Подражающая резьба затем называет функцию OpenThreadToken, чтобы получать свой собственный признак, который - признак маскировки, который имеет контекст безопасности клиента. Резьба затем называет DuplicateTokenEx, чтобы преобразовывать свой признак маскировки в первичный признак. Вы можете затем передавать этот первичный признак на вызов на CreateProcessAsUser. Отметьте, что процесс созданный этим методом не может иметь доступ к сети. Дело в том, что аутентификация Windows NT не посылает пароль от клиента до сервера, так что новый процесс нет имеет верительные грамоты, чтобы делать сетевой связью в третью машину.

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

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

Значение Уровня Маскировки
SecurityAnonymous УКАЗЫВАЕТ, что клиент не хочется, что сервер получает информацию идентификации о клиенте.
SecurityIdentification ПОЗВОЛЯЕТ сервер, чтобы получать информацию о клиенте, как например, идентификаторы безопасности и привилегий, без способного подражать клиенту. Это полезное для серверов, которые экспортируют свои собственные объекты, как например, база данных продукта, которая экспортирует таблицы и виды. Используя информацию безопасности извлеченного клиента, сервер способный сделать доступом-подтверждением решений для себя даже если он - не в состоянии использовать другие услуги как клиента.
SecurityImpersonation ПОЗВОЛЯЕТ сервер, чтобы подражать контексту безопасности клиента в своей локальной системе. Сервер не может подражать клиенту в дистанционных системах.
БЕЗОПАСНОСТЬ SecurityDelegation Windows NT не поддерживает этот уровень маскировки.



Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz