9


5

許可されたプロセス間でWindowsセキュリティトークンを渡している

特定のユーザーとして、Windowsで実行中の既存のプロセスがあるとします。 そのプロセスが現在のトークン(OpenThreadTokenやDuplicateTokenExなど)を取得し、同じマシン上の別のプロセスに(おそらくネットワークソケットまたは他のIPCを介して)渡してから、そのプロセスができることを期待できますか? CreateProcessAsUserを呼び出すためにそれを使用するには?

私が読んだドキュメント(http://msdn.microsoft.com/en-us/library/ms682429%28VS.85%29.aspx)から、これを禁止するものは何も見ていませんが、おそらくトークンのみが使用できますそれを作成したスレッドまたはプロセスによって。

(どうしてですか? WebプロセスをIISに送り、認証し、IISにリモートユーザーの偽装を手配させ、偽装トークンを(同じマシン上の)別のサーバープロセスに渡して、サーバープロセスがセキュリティチェックを実行できるようにしたいリモートユーザーのコンテキスト)

3 Answer


8


はい、それは可能です。 DuplicateHandleを使用して、ターゲットプロセスに有効なハンドルを取得できます(新しいハンドル値をターゲットプロセスに送信して、それを認識します)。 ただし、ターゲットプロセスには、トークンを適宜使用する特権が必要です。 E.g. SE_IMPERSONATEはユーザーになりすまし、SE_ASSIGN_PRIMARYはCPAUによって使用されます。 もちろん、ImpersonateLoggedOnUserおよびCPAUについては、MSDNで読むことができるいくつかの例外があります。


5


私は試していませんが、これは同じ質問のようですhttp://social.msdn.microsoft.com/Forums/en-NZ/windowssecurity/thread/9bd4bce0-033a-431b-abb8-2c10438e6283 [ここに尋ねた]。 説明は理にかなっているようです。 選択したメカニズム(IPCなど)を介してプロセスIDを渡し、http://msdn.microsoft.com/en-us/library/ms684320.aspx [OpenProcess]、http://msdn.microsoft.com/を呼び出します。 en-us / library / aa379295.aspx [OpenProcessToken]、最後にhttp://msdn.microsoft.com/en-us/library/aa378612.aspx[ImpersonateLoggedOnUser]。 結果のハンドルはCreateProcessAsUserに渡すことができます。 まあ… 私はそれがその関数に渡される可能性があることを知っていますが、それが望ましい結果をもたらすかどうかは知りません。 興味深い質問ですね。


4


名前付きパイプを使用して、ImpersonateNamedPipeUser()を呼び出すだけではどうでしょうか。安全で安全で簡単です。 偽装_MUST_を実行するプロセスには、偽装特権があります。