为何模拟身份线程调用CreateProcess创建的子进程运行在系统会话
原因解答
你关于CreateProcess()令牌选择逻辑的猜测是完全正确的,默认参数调用CreateProcess()时,系统确实会取用父进程的主令牌,而非调用线程的模拟令牌,这就是子进程始终运行在系统会话的核心原因。
具体逻辑如下:
- Windows中进程和线程的安全上下文相互独立:每个进程有唯一的全局主令牌,记录进程的身份、权限、所属会话ID等核心属性,你的常驻系统进程主令牌默认关联系统会话(会话0)、SYSTEM身份,该属性不会因为个别线程做了身份模拟而变更。
- 线程身份模拟只会给指定线程附加独立的模拟令牌,仅作用于该线程本身的资源访问操作,既不会修改所属进程的主令牌,也不会影响
CreateProcess()的默认令牌选择逻辑。 - 标准
CreateProcess()的默认设计逻辑就是继承父进程的所有核心属性,没有显式指定额外令牌参数时,子进程的安全上下文、会话归属等配置全部从父进程读取,和调用线程的当前模拟状态无关。
内容的提问来源于stack exchange,提问作者Easwar Aiyer
相关产品推荐
相关产品推荐

