内网渗透之kerberos协议分析
字数 2376 2025-08-20 18:17:47
Kerberos协议内网渗透分析教学文档
1. Kerberos协议概述
Kerberos是一种网络认证协议,设计目标是通过密钥系统为客户/服务器应用程序提供强大的认证服务。该协议要解决的核心问题是身份认证问题:当客户机访问服务器上的服务时,服务器如何验证客户机的访问权限,同时保证通讯安全性。
2. 核心概念
2.1 主要组件
- Client:访问服务的客户机
- Server:提供服务的服务器
- KDC(Key Distribution Center):密钥分发中心,包含两个子服务:
- AS(Authentication Service):身份验证服务
- TGS(Ticket Granting Service):票据授予服务
- AD(Active Directory):活动目录
- DC(Domain Controller):域控制器
2.2 关键票据
- TGT(Ticket-granting ticket):票据授予票据,由AS发放
- TGC(Ticket-granting cookie):存放用户身份认证凭证的cookie
- ST(Server Ticket):服务票据,由TGS发放
3. Kerberos认证流程详解
3.1 整体流程
- Client向KDC的AS请求TGT票据(AS_REQ)
- AS验证通过后发放TGT票据(AS_REP)
- Client带上TGT票据向TGS请求ST服务票据(TGS_REQ)
- TGS验证通过后发放ST服务票据(TGS_REP)
- Client使用ST服务票据向服务端请求服务(AP_REQ)
- Server验证PAC(可选步骤)
- KDC返回Client权限信息(可选步骤)
- Server返回访问结果(AP_REP)
3.2 AS_REQ & AS_REP阶段
AS_REQ请求包内容:
- Pvno:kerberos协议版本号(05 Hex)
- MSG-TYPE:AS_REQ对应0a(Hex)
- PA-DATA:预认证信息数据
- ENC_TIMESTAMP:用户hash加密的时间戳
- PA_PAC_REQUEST:启用PAC支持的扩展
- REQ_BODY:
- cname:请求的用户名
- sname:krbtgt
- realm:域名
- from/till:发送/到期时间
- nonce:随机数
- etype:加密类型
AS_REP响应包内容:
- TGT票据:由krbtgt的NTLM hash加密生成
- Login Session Key:用户NTLM Hash加密,用于下一阶段通信安全
关键点:
- AS验证Client身份的方式:使用用户hash解密时间戳
- TGT票据可用于黄金票据攻击(伪造票据)
- 用户名存在与否会影响返回包,可用于枚举域内用户名
3.3 TGS_REQ & TGS_REP阶段
TGS_REQ请求包内容:
- AP-REQ:携带AS_REP获取的TGT票据
- Authenticator:Login Session key加密的时间戳
- REQ_BODY:
- padding
- kdc-options
- realm
- sname:请求的服务名
- till
- nonce
- etype
TGS_REP响应包内容:
- ST票据:包含客户端信息和原始Server Session key
- Server Session Key:由Login-Session-Key加密
关键点:
- 只要TGT解密无误,无论用户是否有权限都将返回ST票据
- 微软扩展S4U2SELF和S4U2PROXY在此阶段使用
- 攻击者可利用此特性获取任意服务的ST票据
3.4 ST票据使用阶段
- 需要双向验证:
- 服务端验证客户端:防止非法用户
- 客户端验证服务端:防止恶意服务
- PAC验证:
- 不是所有服务都开启PAC验证
- 未验证PAC可能导致白银票据攻击
4. Kerberos协议攻击面
4.1 黄金票据攻击(Golden Ticket)
- 原理:获取krbtgt的hash后伪造TGT票据
- 条件:需要域控krbtgt账户的NTLM hash
- 影响:可伪造任意用户访问任意服务
4.2 白银票据攻击(Silver Ticket)
- 原理:伪造特定服务的ST票据
- 条件:需要服务账户的NTLM hash
- 限制:仅能访问特定服务
4.3 票据传递攻击(Pass-the-Ticket)
- 原理:重用合法票据进行认证
- 实现:通过内存提取或伪造票据
4.4 AS-REP Roasting
- 原理:针对禁用预认证的账户
- 方法:获取AS-REP响应进行离线破解
5. 防御措施
- 保护krbtgt账户密码,定期更换(建议每6个月)
- 启用PAC验证
- 限制域管理员账户使用
- 监控异常Kerberos活动:
- 异常的TGT请求频率
- 异常的票据使用模式
- 实施LSA保护防止内存票据提取
- 启用Kerberos审计日志
6. 检测工具与技术
- Mimikatz:提取票据和hash
- Rubeus:Kerberos攻击框架
- Kekeo:Kerberos利用工具
- Wireshark:分析Kerberos流量
- 检测特征:
- 异常的nonce值(如12381973或1818848256)
- 异常的till时间(如20370913024805Z)
7. 实验环境搭建建议
- 域控:Windows Server 2008 R2(10.10.10.10)
- 域成员:Windows 7(10.10.10.80)
- 测试账户:hunter1/1qaz@WSX
- 工具准备:Wireshark、Mimikatz
8. 参考资源
- Kerberos协议RFC文档
- Microsoft Kerberos技术文档
- Mimikatz使用指南
- Active Directory安全最佳实践