Kerberos 攻击
Kerberos 认证基础
在希腊神话中,Kerberos 是守护地狱大门的一只三头神犬,而在内网渗透中,Kerberos 认证协议是基于票据的一种认证方式,由美国麻省理工学院发明,简单理解可以分为三部分:用户(Client)、服务器(Server)、和 KDC(Key Distribution Center,密钥分发中心)。 KDC 包含 AS(Authentication Server,认证服务器)和 TGS(Ticket Granting Server,票据授权服务器)。
Kerberos 基础认证流程
Kerberos 基础认证过程如下图所示。
解释如下:
AS_REQ。Client 向 AS 发起 AS_REQ,请求内容为通过 Client 的哈希加密的时间戳、ClientID 等内容。
AS_REP。AS 使用 Client 密码哈希值进行解密,如果解密正确,就返回用 krbtgt 的 NTLM-hash 加密的 TGT(Ticket Granting Ticket,票据授权凭证)票据。TGT 包含 PAC(PrivilegeAttribute Certificate,特权属证书),PAC 包含 Client 的相关权限信息,如 SID 及所在的组。简单理解,PAC 就是用于验证用户权限,只有 KDC 能制作和查看 PAC。
TGS_REQ。Client 凭借 TGT 向 TGS 发起针对需要访问服务的 TGS_REQ 请求。
TGS_REP。TGS 使用 krbtgt 的 NTLM-hash 对 TGT 进行解密,如果结果正确,就返回用服务 NTLM-hash 加密的 TGS 票据(简称ST),并带上 PAC。注意,在 Kerberos 认证过程中,不论用户有没有访问服务的权限,只要 TGT 正确,就会返回 ST。
AP_REQ。Client 利用 ST 去请求服务。
AP_REP。服务使用自己的 NTLM-hash 解密 ST。如果解密正确,就会将其中的 PAC 给 KDC 解密,KDC 由此判断 Client 是否有访问服务的权限。当然,如果没有设置 PAC,就不会去 KDC 求证,这也是后文中白银票据成功的原因。
下面以 “上班报道过程” 为例进行介绍。
- 过程1
小王(Client)到达公司门口后,在访客系统上输入自己真实姓名和邮件提供的访客密码。中控下的访客系统(AS)接受后,根据自己本地保存的小王用户密码进行解密,发现确实是小王,然后以中控(KDC)的特殊密码(krbtgt 的 NTLM-hash),将小王的一些信息和相关权限加密后,打印访客证(TGT)并交给小王。
- 过程2
进入公司后,中控下的前台中心(TGS)扫描访客证后,小王填入目的地 HR 办公室(Service),然后前台中心用中控的特殊密码进行解密。解密成功后,用 HR 办公室的门禁密码加密并打印最终二维码(ST),交给小王。
- 过程3
小王到达 HR 办公室,门禁系统扫描最终二维码。解密正确后,询问中控小王是否是报道的员工,确认后,门禁开门。小王报道成功。可以注意到,其实这些过程存在着诸多漏洞,如:中控的特殊密码被得到,那么是不是就可以伪造任意的访客证,如果 HR 办公室可以任何人进(没设置 PAC),如果得知其门禁密码,是不是就可以直接进入了。
Kerberos 攻击分类
Kerberos 攻击其实可以归结为两个字:票据,即常说的票据传递攻击(Pass TheTicket, PTT)。从前面的 6 步请求方式来看,Kerberos 攻击分类如下图所示。