Site Unseen: 枚举和攻击Active Directory站点
Active Directory站点是一项用于优化AD内部环境中网络性能和带宽使用量的功能,通常由跨多个国家或地区的大型组织实施。
相较于其他基于ACL的攻击向量,Active Directory站点在攻击研究社区中未受到足够关注。本文旨在证明针对Active Directory站点的攻击向量不仅存在,而且可能导致严重的权限提升场景和域环境沦陷。
我们将描述提交给BloodHound项目的拉取请求,用于枚举站点ACL攻击路径,并展示如何利用近期发布的GPO攻击工具高效利用这些路径。这些攻击场景可能允许攻击者提升权限并在Active Directory林内横向移动。
目录
- 引言
-
- Active Directory站点基础
-
- 为何关注站点安全?
-
- 站点枚举:将Active Directory站点集成到BloodHound
-
- 利用站点实现"GPO风格"的权限提升和域沦陷
-
- 滥用Active Directory站点进行林内横向移动
- 结论
引言
站点与Active Directory环境的物理表示相关联,而非身份层面。因此,研究社区可能认为从安全角度来看它们不太有趣,并将其视为情境性、生产相关/功能性特征,不提供真正的攻击机会。
虽然并非所有组织都依赖Active Directory站点进行网络分发,但本文旨在证明,当站点存在时,基于站点的ACL攻击向量可能相当强大,并导致一个或多个域沦陷。因此,站点应被视为关键基础设施组件,值得包含在流行的攻击路径可视化工具(如BloodHound)中。
本文还将描述一种依赖站点的有文档记录但较少为人知的利用技术。这种向量的利用可能允许攻击者在林内横向移动,而不受任何SID过滤配置的阻碍。我们将展示如何具体利用它,利用几个月前发布的GPO攻击工具。
1. Active Directory站点基础
本节将阐明Active Directory站点的具体定义及其在Active Directory中的实际实现方式。
如上文简要提及,Active Directory站点主要关注网络效率和带宽使用优化。站点是与高度连接子网关联的对象——这些子网中的所有对象(计算机以及连接到这些计算机的用户)都是站点的一部分。站点将分组子网中的资源关联起来,主要有两个目的:
复制:在Active Directory中,当对特定域控制器应用更改时,其他域控制器(同一域的域数据,以及跨林的架构和配置分区)需要复制它。Active Directory复制有两种类型:站点内复制和站点间复制。由于单个站点内的资源可以快速通信,站点内复制默认定期执行(每5分钟)。由于站点间复制在网络方面要求更高,带宽被压缩,Active Directory允许管理员通过站点链接定义复制设置(默认180分钟)。
身份验证:站点应分配一个或多个服务器,这些服务器不过是负责该站点的域控制器。属于站点的对象将优先选择配置为站点服务器的域控制器。
默认情况下,林中只存在一个站点(名为Default-First-Site-Name)。在创建另一个站点之前,所有对象都自动分配到此站点,所有复制都在站点内执行。如果管理员希望添加另一个站点,必须配置它并分配站点链接。站点链接允许在两个站点之间进行复制,并定义复制设置(例如复制计划)。默认情况下,站点链接是可传递的,这意味着如果站点A链接到站点B,站点A链接到站点C,则站点B通过传递性链接到站点C。这是通过站点桥自动完成的,如果管理员未显式禁用站点链接的传递属性。
完全可能由于配置错误而存在孤立站点,彼此未链接。这显然可能导致环境中的严重问题,因为复制过程不会发生,导致域控制器数据之间的差异。
最后,重要的是要提到Active Directory站点与域分区没有任何关联。一个站点可能包含来自林中各种不同域的客户端和域控制器。这就是为什么Active Directory域处理内部网络资源的逻辑分段,而站点构成环境的物理、地理表示。
更具体地说,站点、子网和站点链接都是位于配置命名上下文中的LDAP对象,该上下文在林范围内复制——在CN=Sites,CN=Configuration,DC=corp,DC=com容器中。
可以从站点和服务Active Directory GUI管理站点。
2. 为何关注?
既然Active Directory站点背后的概念更清晰了,从攻击角度来看,我们为什么应该关注它?特别是如果站点仅用于网络效率目的分组对象?
事实证明,可以将组策略对象(GPO)分配给Active Directory站点。站点对象具有gPLink属性,描述站点关联的所有对象将应用的GPO。这是有道理的,因为某些特定位置的配置可能需要通过站点应用(防火墙规则、浏览器收藏夹、视觉标识等)。但这也为基于GPO的攻击向量提供了有趣的机会。
确实,如果攻击者能够以某种方式将恶意GPO链接到站点,或毒化已链接到它的GPO,他们可能危害站点的所有对象,包括充当站点服务器的域控制器。
几种基于ACL的攻击路径可能实现这种场景,这就是为什么Active Directory站点ACL应被视为有趣的——甚至在枚举Active Directory环境时可能是关键的。
3. 站点枚举:将Active Directory站点集成到BloodHound
我们观察到,与站点在Active Directory攻击研究中的低普及度一致,目前似乎没有工具收集和枚举站点ACL以突出潜在的高影响攻击路径。更具体地说,用于Active Directory攻击路径枚举和可视化的BloodHound工具尚未包含此类数据。
尽管影响站点的危险ACL可能不像与其他更常见对象类型相关的错误配置那样频繁,但由于它们可能具有的高潜在影响,在存在时捕获它们很重要。这就是为什么我们刚刚向SharpHound、SharpHoundCommon库以及BloodHound项目提交了拉取请求。这些拉取请求实现了以下功能:
- 从Active Directory环境枚举数据时收集有关站点、站点服务器和站点子网的数据。
- 通过将每个站点与相关服务器和子网对象关联,在BloodHound界面中表示站点数据。
- 将站点添加到默认高价值目标,因为对站点的控制可能导致与站点关联的所有对象(包括至少一个充当站点服务器的域控制器)的潜在危害。
- 创建针对站点对象的控制边缘(GenericAll、GenericWrite、WriteGPLink),因为这些权限是可利用的(更多内容见下一部分)。
- 从组策略对象到站点集成GPLink边缘,以枚举GPO何时影响站点(使得对此类GPO的控制更加有趣)。
以下屏幕截图表示拉取请求的预览。请注意,这仅用于信息目的。实际实现当然取决于BloodHound团队执行的拉取请求审查。如果拉取请求通过,视觉表示和实现可能会有所不同。
4. 利用站点实现"GPO风格"的权限提升和域沦陷
现在覆盖了枚举部分,下一节将具体描述可能影响站点对象的不同利用场景,以及如何利用它们。
a. 控制链接到站点的GPO
第一个利用场景是最直接的,发生在用户对链接到站点的组策略对象具有任何类型的写入权限时。在这种情况下,所述用户可能将恶意配置注入到站点链接的GPO中,并危害与站点关联的任何(或所有)对象。
对于本节的其余部分,演示将考虑以下环境。一家公司有一个Active Directory林,根域为corp.com。它有三个站点:默认的Default-First-Site-Name站点(用于组织在巴黎的主要办公室),以及用于其区域办公室的NewYork和Sydney站点。
假设攻击者危害了adove用户,该用户控制Paris_Servers_Firewall_Rules GPO。此GPO链接到Default-First-Site-Name默认站点,该站点有一个服务器,来自corp.com根域的AD01-DC。
这可以通过将恶意配置注入Paris_Servers_Firewall_Rules GPO来利用,并等待AD01-DC域控制器应用它以危害DC的域。
为此,可以使用最近发布的GroupPolicyBackdoor.py工具。它提供了一个稳定的Python GPO操作利用框架。项目的wiki详细描述了工具的工作原理,并提供了命令示例。简而言之,希望注入目标GPO的配置由ini文件描述。虽然支持各种配置(参见modules_templates目录),但我们将向GPO注入一个简单的即时计划任务,将我们控制的adove用户添加到本地管理员组。请注意,我们还通过使用计算机名称过滤器仅针对AD01-DC域控制器,因为我们不希望站点中的所有计算机执行我们的任务。
然后可以简单地使用gpo inject命令将描述的配置注入目标GPO。
剩下要做的就是等待目标域控制器应用恶意计划任务,并将adove用户添加到本地管理员组——意味着corp.com域的域管理员组。域控制器的GPO刷新每5分钟发生一次,之后可以通过连接到管理共享C$来验证我们的用户确实是域控制器的本地管理员。
然后可以使用GroupPolicyBackdoor.py通过gpo clean命令移除注入的配置,以移除利用痕迹。
b. 利用对站点的GenericAll、GenericWrite或WriteGPLink权限
第二个利用场景发生在用户对站点具有GenericAll、GenericWrite或WriteGPLink权限时。这可能由于嵌套组成员资格或配置失误而发生,这些在Active Directory环境中常见。但这也可能源于故意的管理选择。确实,Active Directory明确允许管理员委派管理站点的组策略链接的能力。
GenericAll、GenericWrite和WriteGPLink ACL都允许从攻击者角度做一件有趣的事情:改变站点的gPLink属性。
gPLink属性是一个LDAP属性,指示哪个GPO链接到容器(域、组织单位或,在我们的案例中,站点)。有了修改gPLink值的能力,攻击者可能欺骗链接到目标容器的对象应用恶意GPO。这可以通过两种方式实现。
第一种方式是最直接的。如果攻击者控制域中的任何GPO,他们将能够将恶意配置注入其中,然后利用其GenericAll、GenericWrite或WriteGPLink权限将其链接到目标站点。再次,这可以使用GroupPolicyBackdoor.py工具执行。将恶意配置注入GPO所需的命令与上述相同。然后可以使用links link命令执行链接改变的GPO。
如果攻击者没有对GPO的控制,GenericAll、GenericWrite或WriteGPLink ACL仍然可以在有限先决条件下被滥用。所涉及的技术首次由Petros Koutroumpis在其伟大的研究"OU having a laugh"中描述。我们后来在此基础上演示了该技术如何用于危害组织单位中的受保护对象或利用有限OU权利。我们还发布了一个自动化攻击的工具,OUned.py。
攻击背后的原则在Petros Koutroumpis的文章以及我们的文章中详细解释。我们不会再次详细讨论它。攻击的核心原则是向目标容器(这里,站点)的gPLink属性添加一个GPO链接。此GPO链接指向解析为攻击者控制下的机器的DNS名称。
与站点关联的对象然后将尝试在攻击者的机器上获取GPO,该机器将模拟有效的组策略容器(LDAP)以及有效的组策略模板(SMB)以提供客户端尝试应用的恶意GPO,从而危害所述客户端。
以下是使用OUned.py的快速演示。假设aacre用户对NewYork站点具有WriteGPLink权限,该站点有AD01-DC2站点服务器作为corp.com的域控制器。
OUned.py接受配置文件。所述文件描述了将作为漏洞利用的一部分传递给目标对象的恶意配置。在当前情况下,文件将再次是一个简单的即时任务,将受控的aacre用户添加到本地管理员组,即NewYork站点的域控制器的域管理员组。请注意,我们仅通过定义过滤器针对域控制器;如果您不希望站点的所有对象应用您的恶意配置,这可能很重要。
让我们使用定义的配置启动OUned.py。OUned毒化站点的gPLink属性,然后等待与NewYork站点关联的对象更新其GPO。它只会将恶意即时任务传递给站点的服务器AD01-DC2。
最多5分钟后,AD01-DC2域控制器尝试刷新其GPO,并将尝试应用恶意GPO。通过OUned.py工具的漏洞利用模拟有效的GPC以及有效的GPT,并提供恶意GPO。完成后,可以按CTRL+C触发清理操作(主要是恢复站点的gPLink属性)。
最后,我们可以验证aacre用户现在是AD01-DC2域控制器的本地管理员——意味着corp.com域被危害。
5. 滥用Active Directory站点进行林内横向移动
最后一部分描述了另一个涉及Active Directory站点的有趣攻击向量,这次用于横向移动。更具体地说,这种技术允许已危害林中一个域的攻击者危害林中的其他域,无论SID过滤配置如何。
这种技术在Jonas Bülow Knudsen、Martin Sohn Christensen和Tobias Thorbjørn Munch Torp的广泛研究"SID filter as security boundary between domains?"中得到了很好的描述。这项研究由7篇文章组成,描述了各种林内和林间横向移动技术。我们感兴趣的在第4部分中描述。
本节的目标是尝试使这种技术更广为人知,并展示可以使用GroupPolicyBackdoor.py以相当实用的方式利用它。
a. 攻击理论
本文前面提到,站点相关对象位于LDAP目录的配置命名上下文中。
命名上下文,也称为目录分区,指定中央目录的特定部分,具有独立的复制范围和时间安排数据。默认情况下,Active Directory实现三个不同的分区:
-
架构分区:中央目录的这部分充当蓝图,描述林中存在的对象及其结构。此分区在林范围内复制,意味着林中的每个域控制器都有架构分区的相同副本,即使它们来自不同的域。复制过程(站点间或站点内)确保分区在整个林中相同。
-
配置分区:此分区主要保存与网络拓扑和与复制相关的资产(如站点)的信息。与架构分区相同,林中的每个域控制器都有配置分区的相同版本,这些版本在它们之间复制。
-
域分区:域分区包含与本地域关联的目录对象,如用户和计算机。此分区在域内复制,但不与林中的其他域共享。
这里有趣的点是配置分区在整个林中复制,并且林中任何域的每个域控制器都持有此分区的可写副本。
这具体意味着已危害林中任何域(例如子域)的攻击者可以改变林的配置分区。这反过来意味着所述攻击者可以修改AD站点的配置。正如我们整篇文章所演示的,站点可以与组策略对象关联。因此,从他们危害的域,攻击者能够将恶意GPO链接到包含林中其他域的域控制器的一个或多个站点。在配置命名上下文复制后,目标域的域控制器将应用恶意GPO,导致它们被危害。
更具体地说配置分区的权限,默认情况下以下主体对其具有写入权限:林根域的域管理员组、企业管理员和企业域控制器组,以及存储配置分区的任何域控制器的NT AUTHORITY\SYSTEM本地帐户。在林中根域以外的任何域上,成为域管理员不足以改变配置分区。要这样做,有必要作为域控制器的SYSTEM帐户执行命令。
请注意,描述的