【问题标题】:Is passing a windows security token between processes permitted在允许的进程之间传递 Windows 安全令牌
【发布时间】:2011-01-20 20:12:39
【问题描述】:

想象一下,我有一个作为特定用户在 Windows 下运行的现有进程。是否允许该进程获取其当前令牌(使用 OpenThreadToken 和 DuplicateTokenEx 之类的东西),将其传递给同一台机器上的另一个进程(可能通过网络套接字或其他 IPC),然后期望该进程能够用它来调用 CreateProcessAsUser?

从我阅读的文档 (http://msdn.microsoft.com/en-us/library/ms682429%28VS.85%29.aspx) 来看,我没有看到任何禁止这样做的内容,但也许令牌只能由创建它的线程或进程使用。

(你为什么?我想让一个 Web 请求来到 IIS,进行身份验证,让 IIS 安排远程用户的模拟,然后将模拟令牌传递给另一个服务器进程(在同一台机器上),以便服务器进程可以在远程用户的上下文中执行一些安全检查)

【问题讨论】:

    标签: windows security impersonation


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我没有尝试过,但似乎这是同一个问题asked here。描述似乎有道理。通过您选择的任何机制(例如 IPC)传递进程 ID,然后调用 OpenProcessOpenProcessToken,最后调用 ImpersonateLoggedOnUser。生成的句柄可以传递给 CreateProcessAsUser。嗯......我知道它可以传递给那个函数,但我不知道它是否会产生预期的结果。不过,这个问题很有趣。

      【讨论】:

      • 感谢您的链接 - 非常有帮助
      • 传递进程ID实际上是一个安全问题。有了这个,一个用户可以启动另一个用户(甚至系统)行为的进程。
      【解决方案3】:

      为什么不只使用命名管道,然后调用 ImpersonateNamedPipeUser() - 它安全可靠且简单!请注意,进行模拟的进程必须具有模拟权限。

      【讨论】:

      • oops- 使 ImpersonateNamedPipeClient() :)
      • 有趣的想法,但我不确定如何在我的情况下安排它(服务器是 Java,我计划在分叉子进程时通过 JNI 调用 CreateProcessAsUser需要执行一些安全检查)。不过,我会再调查一下,谢谢。
      猜你喜欢
      • 2016-08-19
      • 1970-01-01
      • 1970-01-01
      • 2015-02-20
      • 2021-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-26
      相关资源
      最近更新 更多