原文链接:https://sensepost.com/blog/2020/attacking-smart-cards-in-active-directory/
介绍
最近,我遇到了一个完全没有密码的环境。该公司的每个员工都有自己的智能卡,可用于登录计算机,电子邮件,内部应用程序等。公司的所有员工都根本没有密码-这听起来真的很酷。
在本文中,我将详细介绍一种通过在仅使用智能卡的Active Directory域上修改用户主体名称(UPN)来模拟其他用户的技术。
我想专注于智能卡方面,因此在上下文中,我们假设拥有一些既不能中继也无法破解的NetNTLMv2哈希值,来开始这篇文章。
智能卡和活动目录
在滥用任何技术之前,了解基础知识很重要,因此让我们看一下Active Directory如何处理智能卡。
如果您对Windows内部有一定的了解,您可能知道NTLM / NetNTLM哈希对于Windows计算机之间的相互通信很重要,并且这些哈希是由秘密(通常是用户的密码)生成的。那么,如果用户根本没有任何密码,Active Directory将如何处理智能卡?
当您在Active Directory中设置用户帐户以使用智能卡时,帐户密码将自动更改为随机的120个字符串。因此,使用当前硬件破解这些漏洞的机会几乎为零。
为了使此问题更具挑战性,Windows Server 2016可以选择在每次交互式登录后重新生成这些随机密码,如果您的林位于服务器2016级别,则可使先前的NTLM哈希无效。或者,您可以将此密码设置为每天一次过期。如果您想了解有关此设置的更多信息,建议您查看此博客文章。
但是,这实际上如何工作?智能卡包含哪些内容,更重要的是,智能卡和Active Directory用户如何关联?
它实际上如何运作?
我要向您展示的设置可能会有一些小的变化,但这是我遇到的最常见的实现。
所有智能卡均包含具有多个值的证书,其中之一是主题备用名称(SAN)。该字段包含拥有卡的用户的电子邮件,例如“ hector.cuesta@contoso.local”。要访问智能卡上的证书,用户需要输入针对智能卡上存储的PIN码进行验证的PIN码。每次用户想要登录自己的计算机时,都需要先引入智能卡,然后输入密码。

智能卡证书的SAN属性
输入密码后,智能卡将证书提供给计算机,并将此信息转发到域控制器以进行进一步的验证/身份验证。域控制器收到证书后,将验证签名权限,如果该权限受信任,将继续进行身份验证。
此时,域控制器知道可以验证证书中包含的信息,但是此证书与活动目录用户如何关联?为此,域控制器从证书“ hector.cuesta@contoso.local”中提取SAN,然后针对Active Directory用户的所有用户主体名称(UPN)搜索该值。为简化起见,当存在匹配项时,用户的NTLM哈希和其他一些信息将发送回启动身份验证过程的计算机,并且登录过程可以完成。

智能卡登录过程。
在这一点上,我们有两种选择来滥用这项技术。
首先,尝试通过伪造具有任意SAN的证书来直接攻击智能卡。除非您有办法破解RSA,否则您将无法做到这一点。
第二; 通过修改受害用户到SAN中值的UPN攻击Active Directory环境您的合法智能卡(即切换UPN受害人为你)。当发生UPN <-> SAN相关时,域控制器将发回受害用户而不是您的受害用户的详细信息。
谁可以修改用户的UPN?
想到的第一批人是域管理员,您可能会想:“如果您已经是域管理员,那么冒充他人是什么意思呢?” 但是,正如我稍后将说明的那样,即使您具有域管理员权限,这仍然很有趣。无论如何,更改UPN值不仅限于域管理员。
Active Directory环境中的权限委派很常见,包括委派更改用户UPN的权限。可以在下面的Microsoft准则中看到这一点,该准则甚至具有用于进行此更改的模板。

在Active Directory中委派UPN更改的模板
但是,为什么有人要委托此更改呢?想象一个拥有数千名员工的大公司。更新用户资料,例如;更改地址/电话号码,纠正错误或修改用户名和姓氏是常见的任务。例如,想像一下人们结婚时改姓的国家。通常,像域管理员这样的高级IT管理员不会执行这些增量更改,而是通常由帮助台用户执行这种低级管理。就像您稍后将看到的那样,有权更改用户的UPN值的用户可以在使用智能卡时模拟Active Directory中的任何其他用户。
如前所述,即使您已经具有域管理员权限,这也很有趣。假设您设法破坏域管理员的NTLM哈希。您将无法破解它,但是您可以通过哈希。您有两个主要问题,第一个问题是域管理员使用其智能卡执行交互式登录后,NTLM哈希将立即失效;第二个问题是-将帐户配置为使用智能卡时,您将无法使用传递哈希值来执行交互式登录-因此,请不要理会RDP。或者,假设您要登录计算机以获取一些文件,但是此计算机已正确隔离并且未启用任何远程管理界面,唯一的方法是物理登录到计算机,而使用NTLM是不可能的哈希。然而,
进行攻击
既然您已经了解了攻击的概念部分,就可以深入了解如何执行攻击。您将需要一个能够执行UPN更改的有效用户,一个有效的智能卡,一个目标帐户和dsmodWindows实用程序。
首先,您将需要更改与智能卡关联的用户的UPN,因为活动目录不允许存在重复的UPN。

将您的用户的UPN更改为随机的UPN。
接下来,您将需要修改目标用户的UPN ,修改他们的UPN以匹配您的智能卡的SAN属性。

更改受害者的UPN以匹配您的智能卡中的SAN(在这种情况下,您的UPN)。
之后,您只需使用智能卡登录计算机,然后Windows就会自动将您作为受害者用户登录。
最后,在目标用户上还原UPN,否则他们将无法再使用其智能卡登录。

恢复受害者的UPN。
如何检测/修复
在这一点上,你可能想知道如何可以解决或检测这一点,我伤心地告诉你,没有这个没有修好,因为它是预期的行为,以及如何在当前集成的智能卡和Active Directory的作品。
但是,可以做一些事情。首先,监视指示UPN发生更改的Windows事件(例如事件ID'4738'),并在执行更改后立即主动验证这些更改的合法性。另一个重要的操作是查看谁可以在您的组织中执行UPN更改以及原因。我认为安全性是减少攻击面的一场战斗,因此允许执行此更改的用户越少越好。
通常,应该通过监视更改并控制谁可以修改智能卡和Active Directory(在这种情况下为SPN和UPN)之间的相关性,将这些值视为敏感值,就像密码一样。
从更具攻击性的角度进行检测,并使用dsacls之类的Windows实用程序进行检测。可以对BloodHound之类的工具进行查询,以获得具有更改UPN权限的用户列表。
本文迁移自知识星球“火线Zone”