简介
Kerberos协议属于一种计算机网络认证协议,用来验证用户身份,在Windows中,很多攻击都是基于Kerberos协议。
我们在网上看到的Kerberos协议的那个怪兽图,有三个头颅,代表的就是认证过程中涉及的3方:Client、Server、KDC(第三方,密钥分发中心)。而Kerberos在认证过程中,最重要的也就是域控中的KDC。
Kerberos协议通信端口为88.
一些名词概念
Kerberos协议在认证过程中,主要涉及了3个角色,即:
1,Client:客户端。
2,Server:服务端。
3,KDC(Key Distribution Center):密钥分发中心。
而KDC中包含了两个服务,AS和TGS:
4,AS(Authentication Server):身份认证服务,接收客户端的身份验证请求。
5,TGT(Ticket Granting Ticket):由AS身份认证服务授予的票据,用于身份认证,存储在内存,默认有效期为10小时。
6,TGS(Ticket Granting Server):有了TGT票据后,就可以去请求TGS服务,即票据授予服务,认证成功后,向客户端发送相应服务票据,也叫ST。
图解析
图如下:
Kerberos
大致可分为6步,解释如下:
1,客户端要请求一个服务,首先它要先访问域控上的KDC,告诉KDC,我要访问XX机器上的XX服务,并把自己密码的HSAH加密时间戳作为凭证给到KDC。
2,KDC收到凭证后进行验证,用该用户的HASH进行解密,成功后返回一个TGT票据。这个TGT实际上是用krbtgt hash(krbtgt是用来分发密钥的账户)加密一些信息得到的,其中TGT就包含了PAC,PAC包含了客户端的SID及所在的组,主要为了以后判断是否有相关服务的访问权。
3,客户端拿到TGT票据后,就可以去请求TGS服务了。
4,TGS收到请求后,使用krbtgt hash进行解密,成功后会返回客户端想要访问的那个服务的票据TGS,这个TGS票据由对应服务的hash进行加密。
5,客户端拿到TGS票据后,愉快的去XX服务端上请求XX服务。
6,XX服务端收到请求,用自己的hash进行解密,解密后会有一个PAC,服务端会拿这个PAC去KDC那边问,这个客户端有没有访问权限,域控解密PAC,获取客户端的SID和所在组,再根据该服务的ACL判断是否有访问权。
这里再贴一张网络图,也很清晰明了,供参考:
Wireshark分析
这里用wireshark简单看下Kerberos协议的过程,加深印象,我们可以使用net use建立IPC链接来看,需要注意的是,建立时需要使用目标的fqdn,不能使用IP,使用IP的话则用的是NTLM认证。
PS:fqdn是fully qualified domain name,译为全限定域名,比如主机名叫dc-afa,域叫afa.com,那么fqdn就是dc-afa.afa.com。
这里我们用IP来建立IPC链接,可以发现使用的是SMB协议:
使用fqdn连接:
下面根据wireshark来详细看下其过程,首先是第一条:AS-REQ请求,去请求TGT票据,这个请求不带任何凭证信息,只告诉KDC用户名,详情如下图。
但紧跟着第二条记录返回了个错误,如果报错KRB5KDC_ERR_PREAUTH_REQUIRED,那就说明需要客户端给出凭据,这时Kerberos5之后引入的,默认需要带凭证。
于是我们看第三条记录,又重新发起了个AS-REQ请求,该请求和第一条的AS-REQ对比,其带上了凭证,如下图:
第四条记录AS-REP,KDC进行了响应,如果凭据通过会返回TGT票据
来到第5条记录TGS-REQ,客户端拿到TGT票据后,去请求KDC上的TGS服务,以此来获取ST票据。凭证是TGT、用户会话密钥、加密的用户名、时间戳以及要访问的服务信息。
之后是第6条记录,TGS服务收到后进行相关验证,通过后,会返回访问相关服务的ST票据。
客户端有了ST票据后,就可以去访问相关的服务了,这里就变成SMB请求了,如下图,请求时需带上ST票据:
服务端会解密ST,提取session-key、用户名、时间戳等,然后再用session-key解开用户凭据,得到用户名和时间戳,两个对比检查TGS是否在生存周期,正常就给客户端访问。
完
原文始发于微信公众号(aFa攻防实验室):Kerberos协议
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论