在允许的进程之间传递Windows安全令牌

Mat*_*ard 10 windows security impersonation

想象一下,我有一个在Windows下作为特定用户运行的现有进程.难道是允许该过程中采取其当前令牌(喜欢的东西OpenThreadToken和DuplicateTokenEx),它传递给另一个进程在同一台机器上(可能通过网络接口或其他一些IPC),然后希望这一进程能够用它来调用CreateProcessAsUser?

从我已阅读(文档http://msdn.microsoft.com/en-us/library/ms682429%28VS.85%29.aspx),我什么也没看见,禁止这个,但也许只能用令牌由创建它的线程或进程.

(为什么你会吗?我想有一个web请求来IIS,进行身份验证,已IIS安排远程用户的模拟,然后通过模拟令牌到另一台服务器的过程(在同一台机器上),使服务器进程可以在远程用户的上下文中执行一些安全检查)

Chr*_*mer 8

是的,这是可能的.您可以使用DuplicateHandle获取对目标进程有效的句柄(将新句柄值发送到目标进程,因此它知道它.).但是,目标进程仍必须具有相应使用令牌的权限.例如,SE_IMPERSONATE用于模拟用户,而SE_ASSIGN_PRIMARY用于CPAU.当然,您可以在MSDN中读取ImpersonateLoggedOnUser和CPAU的一些例外情况.


Mar*_*ins 5

我还没有尝试过,但似乎这是同样的问题在这里问.描述似乎有意义.通过您选择的任何机制(例如,IPC)传递进程ID,然后调用OpenProcess,OpenProcessToken,最后调用ImpersonateLoggedOnUser.生成的句柄可以传递给CreateProcessAsUser.嗯...我知道它可以传递给那个函数但是它是否会有我想知道的结果.但有趣的问题.


Mic*_*SFT 5

为什么不只使用命名管道,然后调用ImpersonateNamedPipeUser()-它既安全又容易实现!请注意,进行模拟的过程必须具有“模拟”特权。