在 Windows 操作系统中,访问令牌(Access Token) 是安全体系的核心组成部分。它本质上是一个数据结构,由系统在用户登录或进程创建时生成,用于定义进程或线程的安全上下文,包括用户身份、所属组、权限、完整性级别等信息。令牌决定了进程“能看到什么”和“能去哪里”,直接影响访问控制、权限检查和网络资源利用。
Windows 的令牌体系非常复杂且精细,尤其在渗透测试、红队作战和安全防御中,理解令牌的各种分类和特性至关重要。令牌不仅仅是一个简单的凭证,它承载了多维度属性,从登录方式到冒充能力,再到主次关系和受限状态,都会深刻影响实际操作的效果。下面我们从多个维度全面剖析 Windows 访问令牌的分类与实战意义。
1. 按登录性质分类(Logon Types)
登录类型(Logon Type)是令牌生成时最直接的属性之一,直接决定了令牌的来源和使用场景。你经常在工具如 runasCs、LogonSessions、Process Explorer 或 Mimikatz 的 sekurlsa::logonpasswords 输出中看到这些数字编号。Windows 定义了十多种登录类型,但最核心且最常遇到的有以下几种:
| 登录类型编号 | 英文名称 | 中文描述 | 典型产生方式 | 特点与限制 | 实战意义(渗透/红队视角) |
|---|---|---|---|---|---|
| 2 | Interactive | 交互式登录 | 本地键盘/鼠标登录、RDP 远程桌面登录 | 最强权限。拥有完整的交互式会话,支持本地和网络资源访问,双跳(double-hop)有效。 | 通常对应高权限用户(如域管理员)的 RDP 会话,偷取此类 Token 可直接横向移动。 |
| 3 | Network | 网络登录 | SMB 文件共享、WMI、psexec 无交互执行 | 最受限。无凭据缓存,无法进行双跳(即无法从当前机器再跳到第三台机器)。 | 最常见于网络横向移动,但受“双跳限制”困扰,常需结合其他方式突破。 |
| 4 | Batch | 批处理登录 | 计划任务(Scheduled Tasks) | 用于后台自动运行的任务,无交互界面。 | 攻击者常利用计划任务注入高权限命令,Token 继承任务运行用户。 |
| 5 | Service | 服务登录 | Windows 服务启动 | 运行在 Session 0,通常以 SYSTEM、LocalService 或 NetworkService 身份。 | SYSTEM 权限的服务 Token 是提权终极目标(如通过服务权限弱配置窃取)。 |
| 9 | NewCredentials | 新凭据登录 | runas /netonly、映射网络驱动器时指定新凭据 | 本地使用当前用户上下文,网络访问使用新提供的凭据。 | 渗透神器。经典绕过双跳限制方式:本地用低权限,网络用高权限凭据。 |
其中 双跳问题(Double-Hop Problem) 是最经典的限制:当使用 Network Token(类型 3)访问远程资源时,Windows 默认不会将凭据“转发”到第三台机器(Kerberos 不允许无条件委托,NTLM 更无此能力)。这导致你在拿到一台机器的 shell 后,无法直接用当前 Token 再访问域内其他服务器的文件共享或 WMI。
解决方案包括:
- 使用 类型 9(NewCredentials) 的 runas /netonly;
- 启用 CredSSP(不安全,已被弃用);
- 配置 unconstrained delegation 或 constrained delegation with protocol transition;
- 使用工具如
runasCs显式创建带缓存凭据的 Token。
2. 按持有权限分类(Impersonation Levels)
冒充级别(Impersonation Level)是令牌(尤其是模拟令牌)最重要的属性之一,它决定了服务器(或攻击者进程)能以多大程度“冒充”客户端身份。Windows 定义了四个级别,从弱到强:
- SecurityAnonymous(匿名):服务器几乎得不到任何客户端信息,无法识别身份,更无法冒充。极少使用,仅限于某些 IPC 场景。
- SecurityIdentification(识别):服务器可以获取客户端的 SID 和身份信息,用于 ACL 检查,但不能使用该身份去访问资源或执行操作。相当于“只读身份”。
- SecurityImpersonation(冒充):最常用级别。服务器可以在本地模拟客户端身份执行操作,但不能将此冒充传递到远程机器。这是大多数服务(如 IIS、SMB)默认使用的级别。
- SecurityDelegation(委托):最强大也最危险的级别。服务器不仅能在本地冒充,还可以将客户端身份委托到其他服务器(即支持双跳或多跳)。这需要 Kerberos 环境下的 unconstrained delegation 或 resource-based constrained delegation 配置。
在实战中:
- 绝大多数网络登录(类型 3)产生的 Token 都是 Impersonation 级别,无法委托。
- Interactive 登录(类型 2)通常产生 Delegation 能力(如果账户未被标记为“敏感且不可委托”)。
- 渗透测试中,寻找 Delegation Token 是横向移动的关键:一旦拿到域管 Delegation Token,即可伪装成域管访问任意域内资源。
3. 按主次关系分类(Primary vs. Impersonation Token)
这是内核层面的根本区别,也是工具如 Meterpreter 的 incognito 模块、Mimikatz 的 token::elevate 或 runasCs steal_token 操作的核心对象。
-
Primary Token(主令牌)
每个进程有且仅有一个主令牌。它定义了整个进程的安全上下文。新进程创建时通常继承父进程的主令牌(CreateProcess 时可指定其他 Token)。
主令牌是“永久身份证”,影响进程所有线程的默认行为。 -
Impersonation Token(模拟令牌)
线程级别的临时令牌。允许同一进程内的不同线程以不同用户身份运行。
典型场景:服务端接收客户端请求后,在新线程中冒充客户端身份访问资源(如 IIS 冒充用户访问数据库)。
大多数窃取 Token 操作(如从 explorer.exe 或 lsass.exe 复制)得到的都是 Impersonation Token。直接用它启动新进程会失败,必须先通过DuplicateTokenEx+CreateProcessAsUser将其转换为 Primary Token。
实战关联:
runasCs steal_token或 Cobalt Strike 的steal_token本质上是:从目标进程(如高权限 explorer.exe)Duplicate 一个 Impersonation Token → 调整为 Primary Token → 用它 CreateProcess 启动 cmd.exe 或其他 payload。- 许多提权和横向工具(如 Potato 系列、PrintSpoofer)都依赖 SeImpersonatePrivilege 或 SeAssignPrimaryTokenPrivilege 来完成这种转换。
4. 特殊分类:Restricted Token(受限令牌)与 UAC 机制
受限令牌(Restricted Token) 是 Windows 通过移除敏感 SID、权限或添加限制来降低令牌能力的一种机制。最经典的应用就是 UAC(User Account Control)。
当 UAC 开启且用户属于 Administrators 组时,登录时系统会创建两个令牌:
- Filtered Token(过滤令牌 / 受限令牌):移除了 Administrators 组(或设为 Deny-Only)、去掉了高危特权(如 SeDebugPrivilege、SeTakeOwnershipPrivilege 等),完整性级别为 Medium。默认桌面进程(如 explorer.exe)和普通程序都使用这个 Token。
- Full Token(完整令牌 / 提升令牌):保留所有管理员组成员和特权,完整性级别为 High。只有在“以管理员身份运行”并通过 UAC 提示确认后,才会使用这个 Token 启动进程。
这导致一个常见现象:即使你是管理员,whoami /groups 显示有 Administrators 组,但 whoami /priv 却缺少 SeDebugPrivilege 等——因为你在用 Filtered Token。
令牌提升(Token Elevation):
- 通过右键“以管理员身份运行”或 manifest 中 requireAdministrator,系统会切换到 Full Token。
- 某些程序(如任务管理器、regedit)会自动提升(auto-elevation),无需提示。
- 在渗透中,绕过 UAC 或直接窃取已提升进程的 Full Token 是常见提权路径。
Windows 10/11 后,UAC 机制进一步强化(如对某些模拟令牌的限制),但核心逻辑不变。
总结与实战启示
Windows 访问令牌体系通过多维度设计实现了精细的安全控制:
- Logon Type 决定来源与网络能力;
- Impersonation Level 决定冒充深度;
- Primary/Impersonation 区分进程与线程作用域;
- Restricted Token + UAC 实现最小权限原则。
在红队视角,Token 窃取与操纵是提权、横向、持久化的核心技术链条:
- 先通过钓鱼/RDP/漏洞获得初始 foothold;
- 枚举登录会话(LogonSessions / sekurlsa),寻找高价值 Token(Interactive + Delegation + Full);
- 使用 SeDebugPrivilege / SeImpersonatePrivilege 等特权窃取并转换 Token;
- 结合 runasCs、Incognito、Mimikatz 等工具实现提权或横向。
理解这些分类,不仅能帮助我们更好地绕过限制,也能从防御角度设计更有效的监控规则(如监控 Logon Type 9、Delegation Token 创建、异常 Token 复制等)。
Windows 令牌体系是动态、上下文相关的安全机制。实战中没有万能的 Token,只有合适的 Token。掌握其本质,才能在攻防对抗中占据主动。
原文 https://blog.csdn.net/2301_79518550/article/details/145667275