Windows 的凭证(Credentials)和令牌(Tokens)是其安全子系统的核心组件,负责管理用户身份验证和授权。理解它们对于系统管理、安全分析和故障排查至关重要。
一、Windows 凭证
凭证是用于证明用户身份的秘密信息。Windows 主要管理和使用以下几种凭证:
密码 (Password):
用户最熟悉的凭证形式。
在登录时输入,用于验证用户身份。
Windows 本身不存储用户密码的明文。它存储的是密码的哈希值。
密码哈希 (Password Hash):
本地身份验证: 用户登录本地计算机时,系统计算输入密码的哈希,并与 SAM 中存储的哈希比较。
网络身份验证: 用于 NTLM 和 Kerberos 协议(作为生成更复杂凭证的基础)。
本地用户: 存储在本地计算机的 SAM 数据库中。
域用户: 存储在 Active Directory 域控制器(DC)的 NTDS.dit 数据库中。
密码通过单向加密算法(如 NT Hash / NTLM Hash, LM Hash - 已废弃)生成的固定长度的字符串。
存储位置:
用途:
安全风险: 攻击者获取密码哈希后,可以进行哈希传递攻击,无需破解明文密码即可模拟用户身份访问网络资源。
Kerberos 票据:
票证授予票证: 用户首次登录或刷新 TGT 时获得。它证明了用户已通过身份验证,允许用户在整个 TGT 有效期内(通常 10 小时)申请访问特定服务的票据,而无需重新输入密码。
服务票证: 当用户需要访问特定服务(如文件共享、SQL Server、Web 应用)时,使用 TGT 向 KDC 申请。ST 包含用户的身份信息和服务会话密钥,并经过服务密钥加密。
在基于 Kerberos 协议(Windows 域环境的主要认证协议)的身份验证过程中使用的凭证。
类型:
存储位置: 用户登录后,TGT 和获取到的 ST 通常缓存在用户登录会话的内存中。
安全风险: 攻击者可以窃取缓存的 TGT 或 ST 进行票据传递攻击,冒充用户访问域内资源。
NTLM 挑战/响应:
在 NTLM 身份验证过程中生成。
当客户端请求访问服务器资源时,服务器发送一个随机挑战。客户端使用用户密码的哈希加密这个挑战,生成响应并发送回服务器。服务器或 DC 验证响应是否正确。
存储: 响应本身不是长期存储的凭证,而是在认证过程中动态生成的。
安全风险: 容易受到中继攻击。
凭据管理器存储的凭据:
Windows 凭据: 主要用于访问本地或域内资源(如共享路径、网站)。
基于证书的凭据: 使用数字证书。
普通凭据: 用于网站或应用程序(用户名/密码)。
Windows 提供了一个内置的“凭据管理器”,允许用户存储:
存储位置: 以加密形式存储在用户配置文件目录下(
%USERPROFILE%AppDataLocalMicrosoftCredentials
和%USERPROFILE%AppDataRoamingMicrosoftCredentials
)或注册表中。用途: 方便用户自动登录到网络资源或应用程序,无需反复输入密码。
安全风险: 如果攻击者获取了用户的登录会话或系统权限,可能导出并解密这些存储的凭据。
SSPI / AP 包:
安全支持提供程序接口/身份验证包。Windows 使用不同的 SSP/AP 来实现不同的认证协议(如 Kerberos、NTLM、Negotiate、CredSSP)。
在身份验证过程中,这些包负责处理特定协议所需的凭证交换和生成。
CredSSP 凭据:
CredSSP 协议用于实现远程桌面连接的“受限管理模式”和 PowerShell Remoting 的“CredSSP”身份验证。
它将用户的明文凭据委托给远程服务器。这使得远程服务器可以代表用户访问第二跳资源(如连接到另一个服务器上的共享)。
安全风险:非常高。因为它传输明文密码(或可逆加密的等效物),如果远程服务器被攻陷,攻击者可以直接获取用户的明文密码。仅在受控、高度信任的环境中使用。
二、Windows 令牌
令牌是身份验证成功后创建的对象,代表一个安全上下文。它包含了关于用户及其所属组的身份信息,以及该用户在系统上的权限。进程和线程运行在某个令牌的安全上下文中。
访问令牌
用户 SID: 用户的唯一安全标识符。
组 SIDs: 用户所属的所有组(包括域组)的 SID 列表。
权限: 用户或用户组被明确授予的系统级权限列表(例如
SeBackupPrivilege
,SeDebugPrivilege
)。所有者 SID: 通常默认为用户 SID。
主组 SID: 主要用于 POSIX 兼容性。
默认 DACL: 当此令牌创建的进程在没有指定安全描述符的情况下创建新对象时使用的默认访问控制列表。
源: 创建该令牌的进程。
类型: 主令牌 (Primary) 或模拟令牌 (Impersonation)。
模拟级别: 对于模拟令牌,表示模拟的程度。
会话 ID: 登录会话的 ID。
完整性级别 (IL): 强制完整性控制的级别(如低、中、高、系统)。
其他限制性信息: 如受限 SID、AppContainer SID 等。
定义: 当用户登录时,系统会为该用户创建一个主访问令牌(Primary Token)。这个令牌附加到用户启动的初始进程(通常是
explorer.exe
)。内容:
关键作用: 当进程或线程尝试访问安全对象(文件、注册表键、进程、线程、命名管道等)或执行需要特权的系统操作时,系统会检查与该进程/线程关联的访问令牌,将其中的 SID 和权限与目标对象的安全描述符(包含 DACL)进行比较,以决定是否允许访问。
模拟令牌 (Impersonation Token):
SecurityAnonymous
- 无法获取客户端身份信息。SecurityIdentification
- 可以获取客户端身份(SID),但不能模拟。SecurityImpersonation
- 可以在本地系统上模拟客户端访问本地资源。SecurityDelegation
- 可以在本地系统上模拟客户端访问本地和远程资源(需要 Kerberos 约束委派或基于资源的约束委派)。
定义: 服务器进程(如服务或处理客户端请求的应用程序)可以临时“扮演”客户端身份时使用的令牌。
来源: 当客户端通过网络(如命名管道、RPC)连接到服务器并进行身份验证后,服务器可以获取一个代表客户端身份的模拟令牌。
级别: 模拟有不同的级别,决定了服务器在扮演客户端时能做多少事情:
作用: 允许服务在客户端的安全上下文中执行操作,确保访问检查基于客户端的权限进行,而不是基于服务帐户(通常权限很高)的权限。提高了安全性。
3. 令牌的关键概念
最小权限原则: 进程应运行在所需的最小权限集下。管理员应避免日常使用管理员帐户运行程序。UAC 通过为管理员登录创建过滤令牌(去除管理员权限)来实现这一点。
权限提升: 进程可以通过请求提升(UAC 弹窗)或利用漏洞,尝试获取包含更多权限的令牌。
令牌窃取: 攻击者在获取系统高权限后(如 SYSTEM),可以窃取其他登录用户(尤其是管理员)的令牌,并利用这些令牌在该用户的安全上下文中执行操作,实现横向移动和权限维持。这是现代攻击中非常关键的技术。
受限令牌: 可以创建删除了某些 SID 或特权的主令牌或模拟令牌,以进一步限制进程的访问能力。
三、总结与安全实践
凭证是秘密: 密码、哈希、票据、存储的凭据都是攻击者梦寐以求的目标。
令牌是权限: 一旦用户通过凭证完成身份验证,令牌就决定了他们在系统上能做什么。
关键攻击面:
凭证窃取: 抓取内存中的哈希(Mimikatz)、提取 Kerberos 票据(Rubeus)、导出存储的凭据、中间人攻击获取 NTLM 响应。
凭证滥用: 哈希传递、票据传递。
令牌滥用: 令牌窃取、模拟、利用特权提升漏洞。
防御最佳实践:
强密码策略: 增加哈希破解难度。
启用 Credential Guard: 利用基于虚拟化的安全性保护域凭据的哈希和 Kerberos TGT。
启用 LSA Protection: 防止非特权进程读取 LSASS 内存。
限制特权帐户: 避免日常使用高权限帐户;使用最低权限原则运行服务。
禁用过时协议: 如 LM 哈希生成、NTLMv1(尽可能使用 Kerberos)。
谨慎使用 CredSSP: 了解其风险,只在必要且受控环境中启用。
监控异常登录和令牌使用: 使用 SIEM/SOC 监控日志。
定期更新和打补丁: 修复可能允许凭证/令牌窃取或滥用的漏洞。
限制委派: 严格管理 Kerberos 约束委派和基于资源的约束委派。
使用本地管理员密码解决方案: 如 Microsoft LAPS,确保本地管理员密码唯一且定期更改。
理解 Windows 凭证和令牌的运作机制是深入掌握 Windows 安全、进行有效安全防护和事件响应的基础。攻击者不断针对这些机制开发新技术,防御者也需持续跟进防护策略。
完整文件已上传至星球。
近七天上传文件列表
扫码加入知识星球:网络安全攻防(HVV)
下载本篇和全套资料
HVV(红队蓝队资料、威胁情报、技战法)、渗透测试、漏洞、代码审计、APT、DDOS、勒索病毒、CTF、逆向
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...