内网渗透学习--Kerberos认证
字数 2576 2025-08-12 11:34:07
Kerberos认证协议详解与内网渗透分析
1. Kerberos协议概述
Kerberos是一种计算机网络认证协议,允许实体在非安全网络环境下安全地证明自己的身份。其主要特点包括:
- 针对客户-服务器模型设计
- 提供双向交互认证(客户端和服务端互相验证)
- 保护网络实体免受窃听和重复攻击
- 不依赖于主机操作系统的认证
- 无需基于主机地址的信任
- 假设网络数据包可能被任意读取、修改和插入
Kerberos作为可信任的第三方认证服务,通过传统密码技术(共享密钥)执行认证服务,有效防止中间人攻击。
2. Kerberos核心术语
2.1 域控制器(DC, Domain Controller)
- 域中拥有最高管理权限的计算机
- 一个域可有多台域控制器,地位平等,数据库同步
- 管理域内所有主机的通信审核
- 通常与DNS服务器部署在同一台主机
2.2 活动目录(AD, Active Directory)
- Windows Server的目录服务
- 存储网络对象信息:用户、用户组、计算机、域、组织单位等
- 主要功能:
- 服务器及客户端计算机管理
- 用户服务管理
- 资源管理(打印机、文件共享等)
- 桌面配置管理
- 应用系统支撑
2.3 密钥分发中心(KDC, Key Distribution Center)
- 运行在物理安全服务器上的服务
- 负责颁发Kerberos凭证
- 默认安装在域控制器中
- 包含两个核心组件:
- AS(Authentication Service):身份验证服务
- TGS(Ticket Granting Service):票据授予服务
2.4 票据相关术语
- Ticket(票据):网络对象互相访问的凭证
- TGT(Ticket Granting Ticket):票据授权票据,用于获取服务票据的临时凭证
3. Kerberos认证流程
Kerberos认证分为三个阶段,共6个步骤:
3.1 AS_REQ & AS_REP(第一阶段)
-
AS_REQ:客户端向KDC的AS服务发送认证请求
- 包含用用户NTLM Hash加密的时间戳
- 包含客户端和服务端信息
- 启用PAC(Privilege Attribute Certificate)
-
AS_REP:AS服务响应
- 验证用户合法性(通过AD查询)
- 解密时间戳(5分钟内有效)
- 生成Session Key并用用户NTLM Hash加密
- 使用krbtgt账户的NTLM Hash加密生成TGT(包含Session Key、时间戳、客户端信息)
- 返回加密的Session Key和TGT
- TGT有效期8小时
3.2 TGS_REQ & TGS_REP(第二阶段)
-
TGS_REQ:客户端向TGS发送请求
- 包含第一阶段获得的TGT
- 包含用Session Key加密的Authenticator(客户端信息、时间戳)
-
TGS_REP:TGS服务响应
- 解密TGT获得Session Key
- 用Session Key解密Authenticator并验证
- 生成Server Session Key
- 使用服务NTLM Hash加密生成Ticket(包含Server Session Key、客户端信息、时间戳)
- 返回用Session Key加密的Server Session Key和Ticket
3.3 AP_REQ & AP_REP(第三阶段)
-
AP_REQ:客户端向服务端发起请求
- 包含Ticket
- 包含用Server Session Key加密的客户端信息和时间戳
- 可设置双向认证标志位
-
AP_REP:服务端响应(双向认证时)
- 服务端验证客户端:
- 用服务NTLM Hash解密Ticket获得Server Session Key
- 用Server Session Key解密其他数据并验证
- 检查PAC中的用户权限(通过DC验证)
- 检查ACL限制
- 客户端验证服务端(双向认证时):
- 服务端返回用Server Session Key加密的时间戳
- 客户端验证时间戳一致性
- 服务端验证客户端:
4. PAC(特权属性证书)机制
4.1 PAC的作用
- 包含用户的SID和所属组信息
- 增强Kerberos安全性,防止仅凭Ticket就能访问服务
- 由KDC在第一阶段的TGT中嵌入
- 只有KDC可以制作和查看PAC
4.2 PAC的工作流程
- 第一阶段:KDC在TGT中嵌入PAC
- 第三阶段:服务端解密Ticket后,将PAC发送给DC验证用户权限
- DC解密PAC,通过SID判断用户信息和权限
4.3 安全影响
- 若服务不验证PAC,仅凭Ticket即可访问服务(白银票据攻击前提)
- 正常流程必须验证PAC,确保用户有访问权限
5. Kerberos安全分析
5.1 黄金票据(Golden Ticket)
- 攻击前提:获取krbtgt账户的NTLM Hash
- 攻击方式:伪造TGT(因为TGT使用krbtgt的Hash加密)
- 防御:保护krbtgt账户密码,定期更换
5.2 白银票据(Silver Ticket)
- 攻击前提:获取服务账户的NTLM Hash
- 攻击方式:伪造特定服务的Ticket
- 生效条件:服务不验证PAC
- 防御:确保所有服务验证PAC,保护服务账户密码
5.3 其他安全考虑
- 时间戳机制防止重放攻击(5分钟有效期)
- Session Key使用对称加密,确保通信安全
- 双向认证防止中间人攻击
6. 实际渗透测试应用
6.1 域控定位
- 通过DNS服务器定位(通常与域控同主机)
- 查询域内SRV记录
6.2 攻击路径
- 获取普通域用户凭证
- 尝试获取krbtgt或服务账户Hash
- 根据获取的Hash类型实施黄金票据或白银票据攻击
- 最终目标:控制域控制器
6.3 防御建议
- 定期更换krbtgt账户密码(建议每40天)
- 监控异常Kerberos请求
- 启用PAC验证所有服务
- 限制域管理员权限
- 实施网络分段,保护域控制器
7. 总结
Kerberos协议作为Windows域环境的核心认证机制,其安全性直接关系到整个域的安全。理解Kerberos的详细工作流程和安全机制,对于内网渗透测试和防御都至关重要。攻击者常通过获取关键账户的Hash来伪造票据,而防御方则需要保护这些关键账户并确保所有安全机制(如PAC验证)都正确实施。