对Kerberos的一个小结

kerberos概述

Kerberos(/ˈkərbərəs/)是一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证。这个词又指麻省理工学院为这个协议开发的一套计算机软件。软件设计上采用客户端/服务器结构,并且能够进行相互认证,即客户端和服务器端均可对对方进行身份认证。

在kerberos协议中有三个角色:

  1. Client(访问服务)
  2. Server(提供服务)
  3. KDC(Key Distribution Cente)密钥分发中心

image

其中:
KDC(Key Distribution Center)= 密钥分发中心
AS(Authentication Server)= 认证服务器
TGT(Ticket Granting Ticket)= TGT服务票据,由AS在AS-REP发放
TGS(Ticket Granting Server)= 票据授权服务器
ST(Server Ticket)=ST服务票据,由TGS在TGS-REP发放


kerberos协议分析

实验环境

域名:HIRO
域控:WIN-KONG 域管:hiro\administrator
主机:DESKTOP-P34E60A 域用户:hiro\win10

win10用户执行:
net use \WIN-KONG\C$ password /u:hiro\administrator

AS-REQ:

主要内容:

  1. 请求的用户端信息
  2. 加密类型
  3. Authenticator(用户Hash加密时间戳

image

AS-REP:

主要内容:

  1. 通过活动目录查询用户得到用户的Hash,用Hash解密Authenticator,如果解密成功并且时间戳在规定时间内(一般为五分钟),则预认证成功。
  2. 生成由krbtgt用户Hash加密的TGT认购权证,用于确保客户端和DC进行安全通信的用户Hash加密后的Login Session Key(作为下一阶段的认证秘钥)。
  3. 返回TGT,Login Session Key,时间戳和PAC。(PAC包含用户SID,所在组等信息)

PS:krbtgt在域生成的时候这个用户会被自动创建,是秘钥发行中心服务账户,不能直接登录。

image

TGS-REQ:

主要内容:

  1. 客户端信息
  2. Authenticator(Login Session Key加密时间戳)
  3. TGT认购权限
  4. 访问的服务名

image
padata:

image

req-body:

image

TGS-REP:

主要内容:

  1. 检查自身是否存在服务,如果存在,通过krbtgt解密TGT并且得到Login Session Key,通过Login Session Key解密Authenticator(Login Session Key加密时间戳),就验证了对方身份。然后验证时间戳是否在范围内,并且验证TGT中的时间戳是否过期,原始地址是否和TGT保存的地址相同等。
  2. 生成用AS-REP得到的Login Session Key加密后的用于确保安全传输的Server Session Key
  3. 完成认证后,TGS生成ST票据,其中包括:客户端信息和原始的Server Session Key,整个ST票据由该服务的NTLM Hash加密。
  4. ST和Server Session Key发送给客户端

image

AP-REQ:

  1. 客户端收到TGS服务后,通过自己缓存的Login Session Key解密得到原始的Server Session Key,
  2. 将ST和Authenticator(Server Session Key加密时间戳)发送给服务端。

AP-REP:

  1. 通过服务的NTLM Hash解密ST,从中提取Server Session Key
  2. 通过提取出来的Server Session Key解密Authenticator,从而验证客户端身份。
  3. 将Server Session Key加密时间戳为Authenticator发送给客户端,客户端用缓存的Server Session Key进行解密,如果解密成功则说明两方有相同的Server Session Key。

有些服务并没有验证PAC,这就是白银票据能成功的原因。如果验证了PAC的话,就算攻击者拥有服务Hash,制作了ST票据,也不能制作PAC(PAC由两个数字签名构成,而这两个数字签名分别由服务器NTLM Hash和KDC NTLM Hash加密),并且只有KDC才能制作和查看PAC。(同样防止了MS14-068攻击)


Keberos攻击

AS-REQ:

1.Hash传递

Authenticator是由用户密码Hash加密的,如果得到了用户密码哈希就算解不出来也可以尝试hash传递攻击。
(工作组中只能以sid为500的用户[administrator],域环境中只能用域管Hash)

2.域用户枚举,密码喷洒

当cname值中的用户不存在时返回包提示错误,当用户名存在时,密码正确或者错误返回包结果也不一样,所以可以尝试域用户枚举和密码喷洒攻击。
(可以在域外使用,但是能ping通域控)

AS-REP:

1.黄金票据

TGT由krbtgt用户Hash加密,如果拥有krbtgt用户Hash就可以制作TGT。

2.AS-REP Roasting攻击

enc-part是由用户密码Hash加密的,如果域用户设置了Do not require Kerberos preauthentication,就可以尝试爆破然后用hashcat破解获得用户密码。
(当关闭了预身份认证后,攻击者可以使用指定用户去请求票据,此时域控不会做任何验证就将TGT票据和该用户Hash加密的Login Session Key返回。所以只要对Login Session Key离线解密,就可以得到指定用户的明文密码。)

TGS-REP:

1.kerberoast攻击

enc-part由服务密码Hash加密,可以爆破获得服务Hash,不管用户对服务又没有访问权限,只要TGT正确就一定会返回TGS。

2.白银票据

ticket中的enc-part是由服务Hash加密的,如果有了服务Hash,就可以签发任意用户的ST票据,不需要跟域控打交道,但是只能访问特定服务(伪造的白银票据没有带有效KDC签名的PAC,如果目标验证了KDC的PAC签名,那么白银票据就不起作用了)。

版权声明:本文为car7n原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/car7n/p/14789310.html