Windows认证机制之Kerberos协议

Windows认证机制

首先,我们简短介绍下Windows的认证机制。主要有以下三种,

  • 本地认证

  • 网络认证

  • 域内认证 如图所示:

Kerberos协议

Kerberos 是一种由 MIT(麻省理工大学)提出的一种网络身份验证协议。它旨在通过使用密钥加密技术为客户端/服务器应用程序提供强身份验证。

  • 基于票据的认证服务

  • 基于对称加密算法的加密体系

  • 用于分布式用户身份认证

参与方

  • 客户端

  • KDC(密钥分发中心)

  • 服务端

三段交互认证

  • 认证服务KAS

  • 票据授予服务TGS

  • 获取服务票据ST

KRBTGT账户: KDC的服务账户,KDC中一般用KRBTGT账户的NTLM Hash加密会话密钥

长期密钥Long-term key: 一般是用户的登录密码

会话密钥Session key: 用于某次会话的密钥,属于短期密钥,一次会话结束后作废

票据许可票据TGT:KDC-AS颁发的该客户端身份许可的票据

服务票据ST:KDC-TGS颁发的给该客户端的具体到某一服务的票据

认证服务KAS

  • KRB_AS_REQ(请求)

Client->AS:Client 先向 KDC 的 AS 发送 Authenticator1(内容为Client hash加密的时间戳)。 Kerberos认证抓包分析如下(数据包字段详解请见www.cnblogs.com/Yang34/p/14…

  • KRB_AS_REP(应答)

AS-> Client:AS根据用户名在AD中寻找是否在白名单中,然后根据用户名提取到对应的NTLM Hash,然后会生成一个随机数session key,然后返回给Client由Client的ntlm hash加密的session key-as作为AS数据,再返回TGT(使用KDC中krbtgt的NTLM Hash加密session key和客户端的信息,客户端的信息里面包含了时间戳等信息)。抓包分析如下:

  • AS验证的简述 在 KDC(AD) 中存储了域中所有用户的密码 HASH,当 AS 接收到 Client 的请求之后会根据 KDC 中存储的密码来解密,解密成功并且验证信息。 验证成功后返回给 Client两个东西,一个是由 Client 密码 HASH 加密的 session key-as 和 TGT(由 KRBTGT HASH 加密的 session key 和 TimeStamp 等信息)。

票据授予服务TGS

  • KRB_TGS_REQ(请求)

Client 接收到了加密后的session key-as 和 TGT 之后,先用自身密码 HASH解密得到session key ,TGT 是由 KDC 中KRBTGT的HASH加密,所以Client 无法解密。这时 Client 再用session key加密的TimeStamp,然后再和TGT 一起发送给 KDC 中的 TGS(TicketGranting Server)票据授权服务器换取能够访问 Server 的票据。抓包分析如下:

  • KRB_TGS_REP(应答)

TGS 收到 Client 发送过来的 TGT 和 Session key 加密的 TimeStamp 之后,首先会检查自身是否存在 Client 所请求的服务。如果服务存在,则用 KRBTGT的HASH解密 TGT。抓包分析如下:

  • TGS验证的简述 一般情况下 TGS 会检查 TGT 中的时间戳查看 TGT 是否过期,且原始地址是否和 TGT 中保存的地址相同。 验证成功之后将返回Client两个东西,一个是用 session key 加密的 session key-tgs,然后另一个是 Client要访问的Server的密码 HASH 加密的 session key-tgs(前面和session key加密生成的)生成就是ST(TGS)

获取服务票据ST

  • KRB_AP_REQ(请求)

Client -> Server 发送 Authenticator3(session key-tgs 加密 TimeStamp) 和票据 ST(Server 密码 HASH 加密 session key-tgs),Client 收到 session key 加密生成的 session key-tgs 和 Server 密码 HASH 加密 session key-tgs生成的TGS 之后,用 session key 解密得到 session key-tgs,然后把 sessionkey-tgs 加密的 TimeStamp 和 ST(也就是TGS)一起发送给 Server。抓包分析如下:

  • KRB_AP_REP(应答)

Server-> Client server 通过自己的密码解密 ST,得到 sessionkey-tgs, 再用 sessionkey-tgs 解密 Authenticator3 得到 TimeStamp,验证正确返回验证成功。抓包分析如下:

  • 获取ST简述 最后一次验证,server向client再发一次消息是为了完成双向的身份验证。

Kerberos 认证的优点

  • 验证性能较好

  • 双向认证

  • 支持委派

以上内容参考过以下文章,仅用作个人知识梳理。后面的内容应该会讲到Windows认证机制的另外两种,包含ntlm-hash/net ntlm-hash的验证和Kerberos认证机制的一些利用方法等。打码中。。。

参考文章

tools.ietf.org/html/rfc412…

www.freebuf.com/articles/sy…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力的Kiko君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值