点击蓝字 关注我们
(本文由小貂快跑代发,原作者为“Ting”)
Kerberos的来历
第一步:客户端向DC的AS请求
为什么需要用自己的hash加密时间戳?
因为如果不用客户端的hash进行加密,那么攻击者可以伪造任意客户端的身份进行Kerberos认证,但是加上客户端hash进行加密,DC再进行解密,这使得攻击者的攻击加大难度,只有获取了用户的hash才能伪造客户端的身份。另外DC是域控,肯定是有客户端的hash的。
时间戳的作用是什么?
是为了一定程度上防止攻击者进行重放攻击。请求接收方会对这个时间戳做一个验证,在请求发送到请求接收的一定时间内,假设为5分钟,在这5分钟内接收方收到了请求,那么就相信其为安全的请求,反之如果超过了5分钟则怀疑受到了重放攻击。
第二步:DC的AS响应客户端请求
什么是TGT?
是Kerberos认证中的一种加密票据,是由Kerberos认证服务器(AS)生成并加密的,该TGT包含了用户的身份信息、有效期限、密钥(login session key)和其他相关信息,不过这些信息是使用的krbtgt的hash进行加密的,不在是用户的hash了。
什么是krbtgt?
krbtgt是Kerberos中的一个特殊账户,用于存储和管理Ticket Granting Ticket(TGT)。在Kerberos认证系统中,krbtgt账户是一个系统级别的账户,用于生成TGT和使用自己的hash(krbtgt hash)加密TGT,并提供给用户进行身份验证和获取服务票据。那么如果攻击者获取到了这个hash(krbtgt hash),那么就可以任意的伪造TGT了,也就是黄金票据,拥有了黄金票据就可以跳过AS验证了。
为什么TGT要用krbtgt的hash加密?
因为在攻击者未获取krbtgt的hash时,使用krbtgt的哈希加密可以防止TGT在传输过程中被篡改或伪造。如果使用明文,还可能被中间人窃取数据包,获取一些敏感信息。
第三步:客户端向DC的TGS请求
为什么客户端收到TGT之后还要发送回去?
客户端发送TGT是发送给TGS的,在AS发送给客户端TGT之后,客户端需要将其发给TGS之后,TGS才会给客户端授予服务票据。
为什么客户端收到TGT之后要存储起来?
因为TGT是具有时效性的,不是永久的,也不是一次性的。只要在TGT过期之前,可以直接请求TGS申请服务票据,而不用在每次访问服务的时候都向AS请求TGT,减少了与AS的通信,提高了系统的性能和效率。
第四步:DC的TGS响应客户端请求
为何service session key用login session key加密
因为是service session key是要发给客户端的,客户端拥有login session key,可以解密后获取到service session key,也保证了service session key的安全性。
为什么要生成一个service session key?
这个是为了用于接下来的客户端与服务端的安全通信,作用类似于login session key。
为什么要用服务端的hash加密service session key?
因为为了保证service session key不被窃取不可明文传输且后期客户端和服务端要使用service session key进行安全通信,而服务端没有login session key,DC就使用服务端的hash进行加密,同时还可以防止非目标服务器窃取这个service session key,因为只有知道服务端的hash才能获取service session key,进一步保证了service session key的安全。如果攻击者窃取了服务端的hash那么就可以任意伪造ST也就是白银票据了,就可以不经过KDC了。
第五步:客户端向服务端请求
第六步:服务端向DC的KDC的请求
什么是PAC?
PAC是一个包含了客户端属性信息的数据结构,它包括了客户端的授权信息、组成员资格和其他相关属性。服务端在收到客户端的票据后,会从票据中提取出PAC,并将其发送给KDC进行验证。
验证过程是什么?
1.服务端从客户端的票据中提取出PAC。
2.服务端将PAC发送给KDC,请求对客户端的属性信息进行验证。
3.KDC收到PAC后,会验证其中的属性信息是否与KDC中存储的客户端属性信息一致。
4.如果属性信息一致,KDC将返回一个验证成功的响应给服务端。
5.服务端根据KDC的响应,判断客户端的属性信息是否有效,并根据需要进行授权或其他操作。
第七步:DC的KDC响应服务端
第八步:服务端响应客户端
为什么要使用service session key去加密该票据信息?
因为之前KDS已经给客户端发送过了service session key,而service session key就是用来二者安全通信的,故客户端可以使用service session key去解密获取到票据信息。service session key加密同时也保障了票据信息不被窃取和修改伪造。
综上所述,Kerberos认证流程就是服务器、客户端、KDC相互交流,传递票据,最终获取到信任的一个流程。讲完Kerberos认证的整个流程之后,我们可以发现攻击者可以在不同的步骤根据不同的情况去伪造票据,然后进一步的攻击利用甚至获得域控权限,除此之外还有中间人攻击、服务器欺骗、服务器拒绝等等。不同的步骤会衍生出不同的攻击手法,也需要师傅们针对性地深入学习。这着实是个有趣的认证流程!
// 作者:Ting
一名大学本科在校生,参加多次演练、众测项目,一次地级市演练红队第三,i春秋特聘作家。喜欢挖洞、渗透。目前在研究代码审计和免杀,梦想做一名资深红队~
原文始发于微信公众号(赛博游民营):一文了解Kerberos认证与黄金、白银票据
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论