Передает маркер безопасности Windows между разрешенными процессами

Предположите, что у меня есть существующий процесс, работающий под окнами как конкретный пользователь. Это было бы разрешено, чтобы тот процесс взял свой текущий маркер (с чем-то как OpenThreadToken и DuplicateTokenEx), передайте его другому процессу на той же машине (возможно, через сетевой сокет или некоторый другой IPC), и затем ожидайте что процесс быть в состоянии использовать его для вызова CreateProcessAsUser?

Из документации я читал (http://msdn.microsoft.com/en-us/library/ms682429%28VS.85%29.aspx), я не видел ничего, что запрещает это, но возможно маркер может только использоваться потоком или процессом, который создал его.

(Почему был бы Вы? Я хочу, имеет веб-запрос, прибывают в IIS, аутентифицируются, имеют IIS, располагают олицетворение удаленного пользователя и затем передают маркер заимствования прав другому серверному процессу (на той же машине) так, чтобы серверный процесс мог выполнить некоторые проверки безопасности в контексте удаленного пользователя),

10
задан Matt Sheppard 25 February 2010 в 03:47
поделиться

3 ответа

Да, это возможно. Вы можете использовать DuplicateHandle, чтобы получить дескриптор, действительный для целевого процесса (отправить новое значение дескриптора целевому процессу, чтобы он его знал). Однако у целевого процесса все еще должны быть права на использование токен соответственно. Например. SE_IMPERSONATE для олицетворения пользователя и SE_ASSIGN_PRIMARY для использования CPAU. Конечно, есть некоторые исключения, которые вы можете прочитать в MSDN для ImpersonateLoggedOnUser и CPAU.

8
ответ дан 3 December 2019 в 20:41
поделиться

Я не пробовал, но кажется, что это тот же вопрос, заданный здесь. Описание, кажется, имеет смысл. Передайте ID процесса через любой механизм, который вы выберете (например, IPC), затем вызовите OpenProcess, OpenProcessToken и, наконец, ImpersonateLoggedOnUser. Полученный хэндл можно передать в CreateProcessAsUser. Ну... Я знаю, что его можно передать в эту функцию, но будет ли это иметь желаемый результат, я не знаю. Интересный вопрос, однако.

5
ответ дан 3 December 2019 в 20:41
поделиться

Почему бы просто не использовать именованные каналы, а затем вызвать ImpersonateNamedPipeUser () - это безопасно, надежно и просто! Обратите внимание, что процесс, выполняющий олицетворение , ДОЛЖЕН иметь привилегию олицетворения.

5
ответ дан 3 December 2019 в 20:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: