SeamlessPass,该工具利用 Microsoft 的无缝 SSO 功能,通过利用本地 Active Directory Kerberos 票证来获取 Microsoft 365 服务的访问令牌。SeamlessPass 在明文密码不可用但有其他形式的凭据(如 NTLM 哈希或 TGT)的红队场景中特别有用。这些访问令牌可以进一步与 ROADTools 等工具一起使用,并用于枚举或攻击性利用。 https://github.com/Malcrove/SeamlessPassAADInternals
背景
在 Malcrove 最近进行的红队参与中,该团队设法实现了核心目标,并在本地 Active Directory 环境中获得了域管理权限。但是,客户希望探索是否可以将此攻击升级到云并获取全局管理员权限。
此时,由于提取的“KRBTGT”哈希和植入的可错误配置的证书模板,该团队能够以任何用户的身份向本地 AD 进行身份验证,但云访问呢?该团队没有明文密码,由于潜在的服务中断和保持隐身的需要,重置它们是不可能的。但是明文密码是唯一的身份验证方法吗?
什么是无缝 SSO?
幸运的是,Microsoft 支持其他身份验证方法,包括为我们的客户启用的无缝 SSO(桌面 SSO)。简而言之,此功能允许用户在连接到本地 AD 环境时登录到云。启用该功能后,将创建具有特定 SPN 的计算机帐户 (AZUREADSSOACC),并与 Microsoft 共享其凭据。当用户尝试登录时,浏览器会请求使用 AZUREADSSOACC 的密钥加密的服务票证,并将其与 Entra ID 服务器共享,然后 Entra ID 服务器对其进行解密以识别用户,并在不请求密码的情况下登录。更多信息可在此微软官方文档找到 (https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso-how-it-works)
目前现有方案:通过浏览器实现无缝 SSO
无缝 SSO 在红队运营中的使用并不是最近才出现的新闻,它在过去已被记录和滥用。但是,提供的大多数角度都假定您已经拥有 AZUREADSSOACC 密钥,但如果您不拥有 AZUREADSSOACC 密钥怎么办?概念几乎相同,但当涉及到实际的步骤和工具时,它就变得模糊不清了。
尽管该团队拥有进行 DC 同步攻击并获取 AZUREADSSOACC 密钥的特权,但还是做出了不这样做的战略决策。在红队参与中进行的每一步都要权衡风险与回报原则。由于理论上没有阻止使用无缝 SSO 的技术限制,并且执行 DC Sync 攻击存在潜在的操作安全风险,因此决定避免它。
所以计划很简单,对吧?
1.为目标用户获取有效的 TGT(如果您入侵了用户并且没有任何凭据,您可以使用在 Kekeo 和 Rubeus 等许多工具中实现的虚假 TGT 委派技巧来获取 TGT)
2.将工单植入登录会话(可能需要 NewCredentials登录类型→ Rubeus createnetonly 才能重新安全)
3.配置浏览器以支持无缝 SSO
4.祈求它能起作用
(图 2 – 使用 Rubeus 将被盗的 Ticket-Granting-Ticket (TGT) 注入内存)
前两部分很简单,为无缝 SSO 配置浏览器需要我们一些时间进行故障排除,因为大多数文档都缺少一些关键信息。
要在 Firefox 上配置无缝 SSO,您需要进行以下几项配置:
1.将某些 URL 添加到信任区域:
o在导航栏中,键入 about:config
o搜索 network.negotiate-auth.trusted-uris 首选项
o添加以下 URL https://autologon.microsoftazuread-sso.com(多个 URL 之间用逗号分隔)
2.在设置中启用 Windows SSO:
o前往 设置
o启用“允许 Microsoft、工作和学校帐户的 Windows 单点登录”
(图 3 – 在 Mozilla Firefox 中启用单点登录功能)
.
几乎所有关于无缝 SSO 配置的文档都遗漏了最后一步,但可以在 FireFox 文档中单独找到。
完成此操作后,其余操作就很简单了,转到 login.microsoftonline.com,输入用户的电子邮件,浏览器将与 KDC 通信以获取有效的服务票证,并将其出示给云服务器,然后云服务器应允许用户进入。
值得注意的是,无缝 SSO 不会绕过现有的多因素身份验证或条件访问策略。 但是,该团队设法解决了这个问题,方法是将服务账户作为初始账户泄露的目标,这些账户通常被设计排除在 MFA 之外。检索到访问权限后,将枚举完整的条件访问策略以供进一步利用,并精心设计其他绕过。
最终,该团队设法获得了对 Global Admin 帐户的访问权限,同时绕过了现有的条件访问策略,从而授予团队对客户云环境的完全控制权。
(图 4 – 利用无缝 SSO 使用全局管理员帐户对目标租户进行身份验证)
局限性
虽然以前的技术运行良好,使我们能够访问用户帐户,但它并非没有挑战。该过程涉及多个步骤,需要一些故障排除,并且在可扩展性和自动化方面存在潜在限制。我们意识到,需要一个更精简、更强大的解决方案,特别是对于未来类似的项目。
SeamlessPass 简介
这一认识导致了 SeamlessPass 的开发,该工具旨在自动化我们最初手动执行的过程。SeamlessPass 允许用户利用各种形式的凭据(例如 TGT、NTLM HASH、AES 密钥或伪造的服务票证)来高效获取 Microsoft 365 访问令牌,而无需执行我们遇到的繁琐手动步骤。
使用案例场景
SeamlessPass 可用于为启用了无缝 SSO 功能的租户获取 Microsoft 365 服务的访问令牌。然后可以将访问令牌馈送到其他工具,例如 awesome 以及进一步的枚举或冒犯功能。该工具在用户明文密码不可用但可以获得其他形式的访问的各种情况下非常方便,例如:ROADToolsAADInternals
1.使用被盗用用户的 Ticket-Granting-Ticket (TGT) 或伪造的 Golden Ticket:
如果用户被盗用并且没有可用的凭证,仍然可以使用在 Kekeo 和 Rubeus 等许多工具中实现的虚假 TGT 委托技巧来获取 TGT。此外,在“KRBTGT”密钥可用的情况下,可以伪造有效的 TGT,就像 Golden、Diamond 和 Saphire Tickers 等已知攻击一样。
在这种情况下,该工具将与域控制器交互以获取有效的服务票证 (TGS),然后可以将其交换为访问令牌。
2.使用泄露用户的 NTLM 哈希或 AES 密钥:
我们一直希望将哈希传递到云端。现在有了无缝 SSO,这有点可能。当 SeamlessPass 收到密码、哈希或密钥形式的登录凭据时,它会与域控制器通信以获取 TGT 和 TGS,然后与云通信以将其交换为访问令牌。
3.使用 AZUREADSSOACC$ 帐户 NTLM 哈希或 AES 密钥:
如果已拥有计算机帐户的哈希或密钥,以及用户的安全标识符 (SID)。SeamlessPass 可以创建服务票证并向云进行身份验证,而无需“与域控制器交互”。您可以通过多种方式获取 SID,例如 powersploit 的 ConvertTo-SID 或 rpcclient 的AZUREADSSOACClookupnames
该工具还可以通过操纵用户代理和源 IP 来绕过弱条件访问策略。
例子
我们之前的攻击场景可以通过运行一步完成。
seamlesspass -tenant corp.com -domain corp.local -dc dc.corp.local -tgt
SeamlessPass 还将为您提供一个即用型命令,将获取的令牌提供给 ROADTools 或 AADInternals,以便进一步枚举或利用。
原文始发于微信公众号(合规渗透):[红队技巧] SeamlessPass:利用 Kerberos 票证访问Azure云
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论