kerberos
kerberos概述
Kerberos(/ˈkərbərəs/)是一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证。这个词又指麻省理工学院为这个协议开发的一套计算机软件。软件设计上采用客户端/服务器结构,并且能够进行相互认证,即客户端和服务器端均可对对方进行身份认证。
在kerberos协议中有三个角色:
- Client(访问服务)
- Server(提供服务)
- KDC(Key Distribution Cente)密钥分发中心
其中:
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:
主要内容:
- 请求的用户端信息
- 加密类型
- Authenticator(用户Hash加密时间戳)
AS-REP:
主要内容:
- 通过活动目录查询用户得到用户的Hash,用Hash解密Authenticator,如果解密成功并且时间戳在规定时间内(一般为五分钟),则预认证成功。
- 生成由krbtgt用户Hash加密的TGT认购权证,用于确保客户端和DC进行安全通信的用户Hash加密后的Login Session Key(作为下一阶段的认证秘钥)。
- 返回TGT,Login Session Key,时间戳和PAC。(PAC包含用户SID,所在组等信息)
PS:krbtgt在域生成的时候这个用户会被自动创建,是秘钥发行中心服务账户,不能直接登录。
TGS-REQ:
主要内容:
- 客户端信息
- Authenticator(Login Session Key加密时间戳)
- TGT认购权限
- 访问的服务名
padata:
req-body:
TGS-REP:
主要内容:
- 检查自身是否存在服务,如果存在,通过krbtgt解密TGT并且得到Login Session Key,通过Login Session Key解密Authenticator(Login Session Key加密时间戳),就验证了对方身份。然后验证时间戳是否在范围内,并且验证TGT中的时间戳是否过期,原始地址是否和TGT保存的地址相同等。
- 生成用AS-REP得到的Login Session Key加密后的用于确保安全传输的Server Session Key。
- 完成认证后,TGS生成ST票据,其中包括:客户端信息和原始的Server Session Key,整个ST票据由该服务的NTLM Hash加密。
- 将ST和Server Session Key发送给客户端
AP-REQ:
- 客户端收到TGS服务后,通过自己缓存的Login Session Key解密得到原始的Server Session Key,
- 将ST和Authenticator(Server Session Key加密时间戳)发送给服务端。
AP-REP:
- 通过服务的NTLM Hash解密ST,从中提取Server Session Key
- 通过提取出来的Server Session Key解密Authenticator,从而验证客户端身份。
- 将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签名,那么白银票据就不起作用了)。