[内网渗透]Kerberos 认证

[内网渗透]Kerberos 认证,第1张

[内网渗透]Kerberos 认证 Kerberos 认证 简介

Kerberos诞生与上个世纪九十年代,被广泛用于各大 *** 作系统和Hadoop生态系统中。

kerberos的作用

kertberos提供了一种单点登录(SSO)的方法,在内网里有很多服务器,提供一个第三方可信的认证服务器,供其他服务器使用,这样任何客户端就只需要一个密码就能登录每个服务器。

Kerberos的角色(简化)

认证服务器(AS),客户端(Client),普通服务器(Server),客户端和服务器在AS的帮助下完成相互认证,在Kerberos系统里,客户端和服务器都有一个唯一的名字,Principal,客户端和服务器都有自己的密码,且密码只有自己和AS知道

流程

Client_principal、Server_principal 代表客户端和要访问的服务器的名字

Tc,s 表示AS发给客户端c的票据,该票据包含有用于和服务器s通信认证的相关信息

Ts,c 表示AS发给服务端s的票据,该票据包含有用于和服务器c通信认证的相关信息

{Kc,s;server_principal,…}Kc 表示票据的内容,Kc是客户端的密码,表示该票据由客户端的密码加密

(1)由Client向认证服务器发送 客户端的名字和想要访问的服务端的名字。

(2)认证服务器返回由客户端密钥加密的客户端-服务端票据,返回由服务端密钥加密的服务端-客户端票据。

(3)客户端使用自己的密钥解密Tc,s 可以得到server key(由as返回给客户端的),再通过sessionkey生成认证因素Authentication,包含时间戳(用于验证是否五分钟内完成认证,防止重放);sessionkey;c_checksum(用于验证认证是否被窃取)并包括之前由AS返回的Ts,c 都发送给Server。

(4)当server检查认证无误,server会告诉客户端认证完成的时间的一个时间戳。

但是这样每次访问服务器都需要做一个验证

于是就引入一个新的概念 TGT 是票据的票据,生成TGT的服务器是TGS,获得TGT之后,访问相同的服务就不需要再验证了。

Kerberos产生的漏洞

1.AS-req:当域内某个用户访问域内某个服务时,于是输入用户名和密码,本机的kerberos服务会向KDC的AS认证服务发送一个AS-REQ认证请求,该请求包中包含:请求的用户名、客户端主机名、加密类型和Authenticator(用户NTLM hash 加密的时间戳)以及一些其他信息。

HASH传递(PTH)

在这个阶段,是用用户密码Hash加密的Authenticator,所以也就造成看hash传递

域内用户枚举

As-Req 的cname值,当用户不存在时,返回包提升错误,所以造成了该攻击方式

密码喷洒

当用户名存在,密码正确或者错误的时候,返回包也不一样,可以进行用户名密码爆破。

2.As-Rep

当KDC接受请求,通过AD活动目录查询该用户的密码Hash,使用该密码对请求包的Authenticator进行解密,如果解密成功,则证明请求着的密码正确,而且需要时间戳范围在五分钟内,且不是重放,于是预认证成功。KAS成功认证对方的身份之后。发送响应包给客户端。响应包中主要包括:**krbtgt用户的NTLMHash加密后的TGT(Ticket这部分)和用户NTLM哈希加密的Login Session key(最外层enc-part这部分)**以及一些其他信息。Login session Key的作用是用于确保客户端和KDC下阶段之间通信安全。最后TGT、加密的Login Session Key、时间戳和PAC等信息都会给客户端。PAC包含用户的SID,用户所在的组等一些信息。

黄金票据(用于维权)

我们如果拥有krbtgt的hash就可以自己制作一个TGT了,这就是黄金票据

要伪造的域用户 域名 域的SID值 krbtgt账号的哈希值或者AES-256值

3.TGS-Req

客户端获得了TGT和Login Session Key。然后用自己的密码NTLM hash解密Login Session Key得到原始的Login Session Key。然后会在本地缓存此TGT和原始的Login Session Key。如果现在要访问某个服务,就可以使用TGT来购买相对应的入场券ST(setvice Ticket)ST是通过KDC的另外一个服务出售的(TGS)。在这个阶段,微软引入了两个扩展自协议S4u2self和S4u2Proxy(当委派的时候才用得到)

4.TGS-Rep

TGS接到请求后,首先会检查自身是否存在客户端所请求的服务,如果服务存在,则通过krbtgt用户的NTLM Hash 解密TGT并得到Login session Key,然后通过Login session key来解密Authenticator,如果成功解密,则验证了对方的身份,同时还会验证时间戳是否在范围内。并且还会检查TGT时间戳是否过期,且原始地址是否和TGT中保存的地址相同。在完成上述的检测后,如果通过,则完成了TGS对客户端的认证,会生成一个用Login session key加密后的用于确保客户端服务器之间通讯安全的service session key。并且会为该客户端生成ST服务票据。

白银票据

伪造ST。如果开启了kdc验证就没有用了

Kerberosast攻击:利用了TGS-rep阶段使用对方NTLM hash 返回的加密数据,通过碰撞加密数据来破解

总结

简单来说就是:客户端告诉as 自己的名字和tgs的名字以及使用自己秘钥加密的认证要素

解密成功as给了客户端两个对应的门票 一个是TGT一个是自己的门票Loginsessionkey

客户端解密自己的门票,并生成认证要素,将认证要素和tgs的票给tgs

tgs使用自己的秘钥解开自己的票,得到sessionkey 解开认证要素,成功则给ST

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5686301.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存