攻击者如何通过 Kerberos 横向移动
2020-04-12 10:20:00 Author: www.4hou.com(查看原文) 阅读量:291 收藏

引言

Kerberos 已经存在很长时间了,它一直是 Windows、 活动目录的默认身份验证协议。

攻击者滥用 Kerberos 协议已经有一段时间了,但这并不意味着 Kerberos 安全就不安全。这就是它的设计方式。 

image.png

在我们深入研究攻击者如何利用 Kerberos 的功能之前。 首先让我们对 Kerberos 是什么以及它是如何工作这两方面能有一个基本的了解。

Kerberos 是麻省理工学院于1980年开发的网络身份验证协议。 该协议的加密技术的目的是确保对客户端进行安全的身份验证,这样它就可以向服务器证明自己的身份(反之亦然) ,而无需通过不安全的网络连接发送未加密的秘密。

Kerberos 被广泛部署的原因之一是,它包含单点登录(Single-Sign-On,SSO)特性。 Kerberos 使用“票证”来保留身份验证,因此在用户进行了一次身份验证之后。 他们不需要再次输入凭证来访问网络上的资源,比如 SQL 数据库或文件共享。

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

Windows 域中的 Kerberos

每当用户希望进行身份验证时。 需要向客户端提供秘密以证明用户的身份。 这可以通过输入密码或其他身份验证方法来实现,如智能卡、 Windows Hello 等。

在用户提供了它的秘密之后。 计算机上的 Kerberos 客户端将文本转换为加密密钥,并通过单向散列函数将其传递。 用户的加密密钥是从用户的登录密码散列衍生而来的,该散列主要称为用户的 NT (LM)散列。 有时也称为用户的主密钥。 

image.png

单向散列是一种将消息或文本转换为随机值的算法。 “单向”意味着很难将散列转换回原来的纯文本。

下面是一个示例,当我们将纯文本转换为 NT (LM)散列时。 请记住,仍然可以通过暴力破解 NT (LM)散列来获得纯文本密码。 

image.png

在用户登录并将其秘密转换为加密密钥并通过单向散列函数传递之后。 它将使用加密密钥对当前时间戳进行加密,并将其作为身份验证服务器请求发送到密钥分发中心(KDC)。

KDC 然后将通过解密用户的 NT (LM)散列来验证用户的凭证,并验证它是否也可以验证时间戳。 时间戳证明消息不是重放生成的,而是最近生成的。

KDC 现在将执行身份验证服务器应答,这意味着它将创建一个登录会话密钥和一个票证授予票证 (TGT)。 登录会话密钥的副本附加一个 TGT,TGT 使用 KDC 的主密钥加密,主密钥是从它的 NT (LM)散列派生出来的。

Krbtgt 是安全主体,充当活动目录中密钥分发中心(KDC)的服务帐户。 

image.png

因此,我们知道登录会话密钥的一个副本附加到一个 TGT 上,但是还需要做另一个副本,即制作登录会话密钥本身的副本,并使用用户的 NT (LM)散列对其进行加密。

这意味着 KDC 将向用户发送一个带有加密登录会话密钥的 TGT,正如我们在这里看到的。

下面是用户 Carol 提供的 TGT 示例。 它使用作为 KDC 的 Krbtgt 安全主体进行了加密,并向 TGT 附加了一个会话密钥。 用户的 NT (LM)散列用于解密从 KDC 接收到的会话密钥。

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

image.png

我们现在已经获得了一张“票证授予票证”(TGT)。 TGT 是一个小型加密文件,其中包含 KDC 颁发的用户身份验证令牌。 这个 TGT 相当于用户的凭证。 TGT 允许客户端代表用户执行操作,在本例中是 Carol。 TGT 存储在本地客户端上,以避免用户需要一直提供秘密。 

image.png

使用 TGT,用户可以请求服务票证来访问网络上的特定资源。 用户需要首先向 KDC 提供一个 TGT,以获得它想要访问的资源的服务票证(ST)。

服务票证使用相关服务帐户的 NT (LM)哈希进行加密。 域控制器和服务都知道 NT (LM)散列,因此服务可以解密服务票证,验证  PAC,并确定应该授予服务的访问权限。 这既可以是配置为服务帐户的用户帐户,也可以是普通计算机帐户本身。

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

image.png

服务主体名称

服务主体名称(SPN)是 Kerberos 中的一个概念。 它是活动目录中特定主机提供的特定服务的标识符。

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

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

如果用户希望在 EXCHANGE002服务器上使用此 RDP 服务。 它首先需要向 KDC 提供 TGT,以获得 TERMSRV 服务的服务票证。 然后使用计算机帐户 NT (LM)哈希对此服务票证进行加密,如果它能够验证 PAC,则将对服务票证进行解密。 

image.png

让我们假设我们确实有访问权限,并且我们可以 RDP 到 EXCHANGE002服务器。 

image.png

现在查看 EXCHANGE002服务器的内存。 我们可以看到为 TERMSRV 服务提供的用户 Carol 的服务票证。 

image.png

MSSQLSvc

MSSQLSvc 是一个面向微软 SQL Server 的服务。它位于 AADConnect 服务器。 如你所见,它有一个与之关联的 SPN,即MSSQLSvc/AADConnect.IDENTITY.local。 

image.png

如果你是 DBA 或者曾经是。 你可能熟悉 SQL Server Management Studio (SSMS) GUI,该 GUI 为你提供到所有 SQL 数据库的接口。

这个 GUI 可以在本地安装在工作站上,直接连接到 SQL 数据库,而不需要对服务器本身进行本地管理访问,这在我们的示例中是 AADConnect 服务器。

 在这种情况下,我们已经有访问权限,所以我们只需要按下连接按钮就可以访问我们的 SQL 数据库。

image.png

在我们按下连接按钮之后,我们就进入了我们的 SQL 数据库。 

image.png

在引擎盖下,我们刚刚为 AADConnect 的 MSSQLSvc 服务请求了一张服务票证,如你所见。 它就存储在我们的机器上。 我们做了和上一步一模一样的事情。 我们将我们的 TGT 给 KDC 以获得 MSSQLSvc 的 ST。 我们将其提交给 AADConnect 服务器,计算机帐户 NT (LM)散列解密服务票证并验证 PAC。 如果它可以确定我们确实有访问权限,则授予访问权限。 

image.png

CIFS

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

这是我们访问远程服务器上的文件共享时的样子。 我们可能会在 \\FILESERVER\Fileshare 中输入一些东西,然后dang~一下,我们就了有访问权限。 

image.png

和上面两个例子一样。 我们将我们的 TGT 提供给 KDC,以获得 FILESERVER 上 CIFS 服务的 ST。 我们将其提交给 FILESERVER,计算机帐户将解密服务票证并验证 PAC。 

image.png

· 攻击者时间线

凭证导出 -T1003

每当用户登录到工作站时。 Kerberos 票证授予票证 (TGT)存储在计算机上的本地,以便为用户提供单点登录(SSO)体验。

在计算机上具有管理权限的攻击者可以提取所有 Kerberos TGT,并使用它在网络中的不同计算机之间横向移动。

在下面的示例中,攻击者破坏了 Carol 的工作站,并决定转储所有 Kerberos TGT 的。

在导出所有 Kerberos TGT 之后,看起来 Alice 最近登录了 Carol 的工作站。 

image.png

提取了Alice 的 TGT 后, 攻击者可以使用此 TGT 代表用户 Alice 并以 Alice 的身份访问资源。

票证传递 – T1097

票证传递(Pass the ticket,PtT)是一种使用 Kerberos 票证对系统进行身份验证的方法,无需访问帐户的密码。 Kerberos 身份验证可用作横向移动到远程系统的第一步。

我们现在要执行一个票证传递攻击来访问 Alice 的帐户,这样我们能够以她的身份访问资源。 

image.png

似乎 Alice 可以访问文件服务器(FILESERVER),这可能是我们感兴趣的目标。 

image.png

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

image.png

我们现在已经在文件服务器上建立了立足点。

凭证导出 – T1003 

因为我们现在在文件服务器上有了一个立足点。 我们还可以将所有 Kerberos TGT 转储到这个服务器上。

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

image.png

票证传递 – T1097

在获得了 Bob 的 TGT 之后。 我们现在可以做同样的事情,就像以前一样。执行一个票证传递来访问 Bob 的帐户。

image.png

看起来 Bob 是一个域管理员或者是一个具有同等权限的人,因为他可以访问域控制器。

image.png

这意味着我们现在可以以用户 Bob  的身份横向移动到域控制器,这意味着我们已经破坏了整个网络。 

image.png

检测

对于大多数 EDR 或 SIEM 解决方案来说,检测票证传递是一个相当大的挑战,但如果你有微软 Defender ATP 或计划购买这个产品那就没有多大的问题。 MDAPT 会捕捉到这个警报! 

image.png

缓解

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

我建议你查看我之前的博客文章,了解如何在你的网络中实现这种安全架构。

image.png

误解

哈希传递(PtH)和 票证传递(PtT)都是被大多数人误解的技术。 首先,PtH & PtT 不是“Mimikatz”里的东西。 还有其他工具也可以执行这种攻击。 一个很好的例子就是 Windows 凭证编辑器,它在过去被广泛使用。

第二件事是凭证卫士(Credential Guard)无法阻止这种攻击。 当然,但请记住一点,凭证卫士将使攻击者更难成功。 具有管理权限的确定用户可以绕过凭证卫士。

最后,但并非最不重要的是, PtH 和 PtT 都是无法通过推出安全补丁修复的技术。 你仍然可以使用这些技术,尽管事实上你有一个完整的补丁环境。

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

我还想提到的是,人们经常忘记活动目录中的单点登录(SSO)特性。 凭证需要缓存在内存中,以便为用户提供 SSO 体验。 一旦用户通过身份验证。 它可以使用一组凭证访问网络上的资源,而无需再次输入密码。 终端用户喜欢这个,你可能也喜欢。

参考资料

· 微软管理层模型

· Microsoft Defender 高级威胁保护

· 票证授予票证

· 票证授予服务中心

本文翻译自:https://windowssecurity.ca/2020/03/15/how-attackers-are-moving-laterally-via-kerberos/如若转载,请注明原文地址:


文章来源: https://www.4hou.com/posts/J7OP
如有侵权请联系:admin#unsafe.sh