如何通过 Kerberos进行横向移动
2020-04-01 10:56:40 Author: xz.aliyun.com(查看原文) 阅读量:421 收藏

0x01 前言

Kerberos 已经存在很长时间了,它一直是 Windows Active Directory 默认的身份验证协议。

攻击者滥用 Kerberos 协议已有一段时间,但这并不能说明 Kerberos 是不安全的。看看它的设计方式:

在我们深入探讨攻击者如何滥用 Kerberos 协议之前。首先让我们了解 Kerberos 是什么及其工作原理有一个基本的了解。

首先,Kerberos 已经存在很长时间了,它一直是 Windows Active Directory 默认的身份认证协议,由 MIT 于1980年开发。该协议的宗旨是确保对客户端的安全身份验证,因此它可以向服务器证明其身份(反之亦然),而无需通过不安全的网络链接发送未加密的认证信息。但是它并不验证客户端用户可以访问哪些资源或服务,换句话说,Kerberos 提供有关每个用户特权的信息,但是确定每个用户是否有权访问其资源是每个服务的责任。

Kerberos 被广泛应用的原因之一是因为它包含单点登陆(SSO)功能。Kerberos 使用 “票据” 保留身份验证,因此在用户进行一次身份验证之后,他们不需要再次输入凭证即可访问网络上的资源(SQL 数据库或文件共享)。

所有 Kerberos 票据都存储在 LSASS 进程内存中。

0x01 Windows 域中的 Kerberos

当用户每次想要进行身份验证时,需要向客户端计算机提供一个凭证,以证明用户的身份。可以通过输入密码或其他身份验证方法(如智能卡)来完成。

用户提供凭证后,计算机上的 Kerberos 客户端会将其文本转换为加密密钥,并通过“单向”哈希函数传递。用户的加密密钥派生自用户登陆密码哈希,该密码主要被称为用户的 NT(LM) 哈希。有时也会称为用户的主密钥。

注意:用户登陆密码哈希不仅是 NT(LM) 哈希,而且还包括 AES128 和 AES256 密钥。在此示例中,我们主要使用 NT(LM) 哈希作为主要示例,因此它是最著名的一个。

单向哈希是一种将消息或文本转换为随机值的算法。“单向”意味着很难将哈希转换回原始的纯文本格式。

这是一个示例,当我们将明文转换为 NT(LM) 哈希时:

但是,NT(LM) 哈希仍然有可能被通过暴力破解获得明文。

用户登录后,其凭证已转换为加密密钥,并通过单向哈希函数传递。它将使用加密密钥来加密当前时间戳,并将其作为身份验证服务请求发送到密钥分发中心(KDC)。

然后,KDC 将通过解密用户的 NT(LM) 哈希来验证用户的凭据,并验证它是否也可以验证时间戳。时间戳证明了该消息是刚生成的。

KDC 现在将执行身份验证服务回复,这意味着它将创建登陆会话密钥和 TGT。登陆会话密钥的副本与 TGT一起附加,并且 TGT使用 KDC的主密钥加密,该主密钥是从其 NT(LM) 哈希派生而来的。

Krbtgt 是安全主体,它充当 Active Directory 中的密钥分发中心(KDC)的服务账号。

因此,我们知道登陆会话密钥的副本已附加到 TGT,但还需要制作另一个副本,即复制登陆会话密钥本身,并使用用户的 NT(LM) 哈希对其进行加密。

这意味着 KDC将向用户发送带有加密登陆会话密钥的 TGT,如我们在此处看到的。这是来自用户 Carol 的TGT的示例。它已使用充当 KDC 的 Krbtgt 安全主题进行了加密,并且会话密钥已附加到 TGT。用户的NT(LM) 哈希用于解密从 KDC 接收的会话密钥。

会话密钥即形成加密密钥,又形成解密密钥,该密钥是随机生成的,以确保用户和计算机之间的通信是安全的。

现在,我们已经或得了 TGT。它是一个小型加密文件,其中包含 KDC 办法的用户身份验证令牌。此 TGT等效于用户的凭证。TGT允许客户端计算机代表用户(此示例中的 Carol)执行操作。TGT本地存储在客户端计算机上,以避免用户多次输入凭证。

使用 TGT,用户可以请求访问网络上的特定资源。这需要用户向 KDC 提交 TGT,以获得其要访问的资源的服务票据(ST)。然后使用相关服务账号的 NT(LM) 哈希对服务票据进行加密。NT(LM) 哈希对于域控制器和服务都是已知的,因此该服务能够解密服务票据,验证 PAC 并确定应授予该服务身份访问权限。这可以说配置为服务账号的用户账号,也可以只是常规计算机账户本身。

每个服务票据都有一个扩展名,称为 PAC。特权属性证书(PAC)是包含用户授权数据的一条数据。你可以考虑已分配的组成员身份和用户权限。

1.1、服务主体名称(SPN)

服务主体名称(SPN)是 Kerberos 的概念。它是Active Directory 中特定主机提供的特定服务的标识符。

对于大多数管理员来说,这是非常令人困惑的事情,但是让我们深入研究几个示例,可以更好的理解。

让我们从 TERMSRV/EXCHANGE002.IDENTITY.local 开始-这是与 EXCHANGE002 服务器关联的 SPN。TERMSRV 是用于远程桌面服务的服务。

如果用户要在 EXCHANGE002 服务器上使用此 RDP 服务。首先需要向 KDC 提供 TGT,以获取 TERMSRV 服务的服务票据。然后,使用相关的计算机账号 NT(LM) 哈希对该服务票据进行加密,如果可以验证 PAC,它将解密该服务票据。

假设我们确实具有访问权限,并且可以将 RDP 放入 EXCHANGE002 服务器。

现在来看一下 EXCHANGE002 服务器的内存。我们可以看到为 TEEMSRV 服务提供的 Carol 用户的附图票据。

1.2、MSSQLSvc

MSSQLSvc 是位于 AADCconnect 服务器上的 Microsoft SQL Server 中的服务。如你所见,它具有一个与其关联的 SPN,即 MSSQLSvc/AADConnect.IDENTITY.local

如果你是 DBA 用户权限或曾经是DBA 用户权限,你可能熟悉 SQL Server Management Studio(SSMS)GUI,该 GUI 提供了所有 SQL 数据库的界面。

此 GUI 可以安装在本地操作机上,以便直接连接到 SQL 数据库,而无需在服务器本身(在我们的示例中为 ADDConnect 服务器)上具有本地管理员访问权限。

数据相关信息后,点击 Connect ,完成连接。

如图所示,在后台,我们知识请求了 ADDConnect 的 MSSQLSvc 服务的服务票据。它存储在本地计算机上。我们做的和上一示例完全一样。我们将 TGT交给了 KDC,以获取 MSSQLSvc 的服务票据。我们将其呈现给 ADDConnect 服务器,使用相关联的计算机账号 NT(LM) 哈希对服务票据进行解密,并且验证 PAC。如果可以确定我们具有访问权限,则授予访问权限。

1.3、CIFS

Common Internet File System (CIFS) 是一种网络文件系统协议,用于在网络上的计算机之间提供对文件和打印机的共享访问。

这就是当我们访问远程服务器上的文件共享时的样子。我们可能会输入 \\FILESERVER\Fileshare 之类的 UNC 路径。

与上述两个示例相同。我们将 TGT 提交给 KDC,以获取 FILESERVER 上 CIFS 服务的 ST,我们将其提供给 FILESERVER,并且关联的计算机账号可以验证 PAC 时将解密服务票据。

0x02 攻击时间表

2.1、Credential Dumping – T1003

每次用户登陆到计算机时,Kerberos TGT 本地存储在计算机上,以为用户提供单点登陆(SSO)。

在计算机上具有管理员权限的攻击者能够提取所有的 Kerberos TGT,并使用它在网络中不同的计算机之间横向移动。在下面的示例中,攻击者获取了 Carol 的计算机权限,并存储所有的 Kerberos TGT。

导出所有 Kerberos TGT 之后,可以看到 Alice 最近登陆到了 Carol 的计算机中。

随着提取了 Alice 的 TGT。攻击者可以使用此 TGT 代表 Alice 用户进行操作并代表她访问资源。

2.2、Pass-the-Ticket – T1097

票据传递(PtT) 是一种使用 Kerberos 票据对系统进行身份验证的方法,而不需访问账号密码。Kerberos 身份认证可以用作横向移动到远程计算机的第一部。现在,我们将执行 "Pass-the-Ticket" 攻击来访问 Alice 的账号,这使我们能够代表她访问资源。

看来 Alice 可以访问 FILESERVER 了。对于我们来说,这可能是一个相对有兴趣的目标。

现在我们需要横向移动到 FILESERVER

现在,我们已经在 FILESERVER上建立了立足点。

2.3、Credential Dumping – T1003

由于我们现在已经获得了 FILESERVER 的权限。我们也可以将该服务器上的所有 Kerberos TGT都转储。

看来我们的 Bob 用户最近已登录此服务器,这意味着我们现在可以访问 Bob的帐户。

2.4、Pass-the-Ticket – T1097

在获取 Bob 的TGT 之后。现在,我们就可以做像之前一样的操作。

Bob 似乎是 Domain Admin 或同等权限的账户,因为它可以访问Domain Controller。

这意味着我们现在可以以Bob 用户的身份横向移动至域控制器,也代表这我们可以横向整个域网络。

0x03 Detection

大对数的 EDR 或 SIEM 解决方案对于 Pass-the-Ticket 攻击的检测都是一项大课题,但是如果你拥有 Microsoft Defender ATP ,MDATP 会收到警报。

0x04 缓解措施

在我以前的文章中,“哈希传递”仍然是一种威胁。我已经在博客中介绍了如何使用 Microsoft管理层模型减轻这种攻击。哈希传递和票证都是相似的技术,经常被用于攻击公司网络。

我建议你查阅我以前的博客文章,该文章有关如何在网络中实现此安全体系结构。

误区解释

1、哈希传递和票据传递大多数人都有误解的技术。首先,Mimikatz 并不是 PtH 和 PtT 唯一的工具,其他工具也可以。一个典型的例子就是 Windows Credential Editor。

2、Credential Guard 无法阻止此攻击。当然,Credential Guard 可以增加攻击成本。但要注意的是,具有管理员权限的用户可以绕过 Credential Guard。

3、PtH和 PtT都是无法通过推出安全补丁来解决的技术。

哈希传递和票据传递被称为操作漏洞。这意味着,这取决于管理员如何设置环境。域管理员在哪里登录?它应该仅是域控制器,也可能是其他第0层资产。但在大多数情况下,DA 从工作站到服务器无处不在,他们的凭据分布在整个网络中,这也解释了为什么攻击者很容易获得Domain Admin凭据。

我还想提一点,人们经常忘记 Active Directory中的单点登录(SSO)功能。凭据需要缓存在内存中,以便为用户提供 SSO体验。用户通过身份验证后。它可以使用一组凭据来访问网络上的资源,而无需再次提示输入密码。最终用户喜欢这个,您也可能喜欢。

0x05 Reference

Microsoft Administrative Tier Model
Microsoft Defender Advanced Threat Protection
Ticket-Granting-Tickets
Ticket-Granting Service Exchange

原文:https://windowssecurity.ca/2020/03/15/how-attackers-are-moving-laterally-via-kerberos/


文章来源: http://xz.aliyun.com/t/7474
如有侵权请联系:admin#unsafe.sh