为何RPCSS进程拥有归属SYSTEM的Token类型句柄?兼询进程与句柄关联
进程与句柄的关联关系
- 进程是操作系统中运行的程序实例,拥有独立的地址空间和专属资源集合,是系统分配资源的基本单位。
- 句柄是操作系统返回给进程的抽象引用标识符,作用是让进程安全地间接访问内核对象(比如Token、文件、线程、其他进程等)——内核对象由系统内核统一管理,进程无法直接访问内核内存,必须通过句柄发起操作请求。
- 每个进程都维护自己的句柄表,表中存储着该进程持有的所有句柄与对应内核对象的映射关系。只有持有句柄的进程,在具备对应权限的前提下,才能对目标内核对象执行操作(比如复制Token、读写文件)。
- 句柄支持跨进程复制(通过
DuplicateHandle()API实现),但要求调用者能同时打开源进程和目标进程,且拥有足够权限完成复制操作。
为什么rpcss进程会持有SYSTEM权限的Token句柄
rpcss(Remote Procedure Call Service)是Windows系统的核心服务,负责管理进程间、跨机器的RPC通信,绝大多数系统组件和服务都依赖它完成交互。它持有SYSTEM Token句柄的原因主要有以下几点:
- 服务自身的启动身份:rpcss默认以SYSTEM账户启动,其主进程的Token本身就是SYSTEM权限。除此之外,它还会因业务需求持有额外的SYSTEM Token句柄。
- 处理SYSTEM级RPC请求:当其他SYSTEM权限的进程或服务通过RPC与rpcss交互时,rpcss可能会获取到对方的Token句柄,用于身份验证、权限检查或模拟对方身份执行操作。
- 系统级操作的需求:rpcss需要执行一些受保护的系统操作(比如创建系统级内核对象、访问敏感系统资源),这时它会创建或复制SYSTEM Token来满足权限要求。
- 内核对象的共享与继承:作为核心系统服务,rpcss会与其他系统组件协同工作,部分SYSTEM级内核对象的句柄可能会被继承或共享给它,以支持跨组件的功能调用。
而Token劫持技术盯上rpcss的核心原因是:它是运行在SYSTEM上下文的高权限进程,同时低权限进程往往有机会打开它的进程句柄并复制其持有的SYSTEM Token——拿到这些Token后,就能通过CreateProcessAsUser()或CreateProcessWithToken() API启动拥有SYSTEM权限的新进程。
内容的提问来源于stack exchange,提问作者ilich262
相关产品推荐
相关产品推荐

