内网渗透学习--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(第一阶段)

  1. AS_REQ:客户端向KDC的AS服务发送认证请求

    • 包含用用户NTLM Hash加密的时间戳
    • 包含客户端和服务端信息
    • 启用PAC(Privilege Attribute Certificate)
  2. 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(第二阶段)

  1. TGS_REQ:客户端向TGS发送请求

    • 包含第一阶段获得的TGT
    • 包含用Session Key加密的Authenticator(客户端信息、时间戳)
  2. 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(第三阶段)

  1. AP_REQ:客户端向服务端发起请求

    • 包含Ticket
    • 包含用Server Session Key加密的客户端信息和时间戳
    • 可设置双向认证标志位
  2. 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的工作流程

  1. 第一阶段:KDC在TGT中嵌入PAC
  2. 第三阶段:服务端解密Ticket后,将PAC发送给DC验证用户权限
  3. 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 攻击路径

  1. 获取普通域用户凭证
  2. 尝试获取krbtgt或服务账户Hash
  3. 根据获取的Hash类型实施黄金票据或白银票据攻击
  4. 最终目标:控制域控制器

6.3 防御建议

  • 定期更换krbtgt账户密码(建议每40天)
  • 监控异常Kerberos请求
  • 启用PAC验证所有服务
  • 限制域管理员权限
  • 实施网络分段,保护域控制器

7. 总结

Kerberos协议作为Windows域环境的核心认证机制,其安全性直接关系到整个域的安全。理解Kerberos的详细工作流程和安全机制,对于内网渗透测试和防御都至关重要。攻击者常通过获取关键账户的Hash来伪造票据,而防御方则需要保护这些关键账户并确保所有安全机制(如PAC验证)都正确实施。

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验证)都正确实施。