Site Unseen: 枚举和攻击Active Directory站点
引言
Active Directory站点是用于优化AD内部环境中网络性能和带宽使用的一项功能。大型地理分散的组织通常会实施此功能。
与其他基于ACL的攻击向量相比,站点在Active Directory攻击研究社区中未受到太多关注。本文旨在证明不仅存在针对Active Directory站点的攻击向量,而且这些攻击可能导致严重的权限提升场景和域泄露。
我们将描述向BloodHound项目提交的拉取请求,以枚举站点ACL攻击路径,以及如何使用我们最近发布的与GPO攻击向量相关的工具来有效利用这些路径。
1. Active Directory站点基础
Active Directory站点主要关注网络效率和带宽使用优化。站点是与高度连接子网关联的对象 - 这些子网中的所有对象(计算机以及连接到这些计算机的用户)都是站点的一部分。
站点的主要用途包括:
- 复制:Active Directory中有两种复制类型:站点内复制和站点间复制
- 身份验证:站点应分配一个或多个服务器,这些服务器是负责该站点的域控制器
默认情况下,林中只存在一个站点(名为Default-First-Site-Name)。在创建另一个站点之前,所有对象都会自动分配给此站点。
2. 为何关注站点?
从攻击角度而言,我们可以向Active Directory站点分配组策略对象(GPO)。站点对象具有gPLink属性,描述站点关联的所有对象将应用的GPO。
如果攻击者能够以某种方式将恶意GPO链接到站点,或者毒化已链接到站点的GPO,他们可以危害站点的所有对象,包括充当站点服务器的域控制器。
3. 站点枚举:将Active Directory站点集成到BloodHound中
我们观察到,目前似乎没有工具能够收集和枚举站点ACL以突出潜在的高影响攻击路径。更具体地说,用于Active Directory攻击路径枚举和可视化的BloodHound工具尚未包含此类数据。
我们向SharpHound、SharpHoundCommon库以及BloodHound项目提交了拉取请求,实现了以下功能:
- 从Active Directory环境枚举数据时收集有关站点、站点服务器和站点子网的数据
- 通过将每个站点与相关服务器和子网对象关联,在BloodHound界面中表示站点数据
- 将站点添加到默认高价值目标
- 创建针对站点对象的控制边缘
- 集成从组策略对象到站点的GPLink边缘
4. 利用站点进行"GPO风格"的权限提升和域泄露
a. 控制链接到站点的GPO
第一种利用场景发生在用户对链接到站点的组策略对象具有任何类型的写入权限时。在这种情况下,该用户可以向站点链接的GPO注入恶意配置,并危害与站点关联的任何(或所有)对象。
演示使用GroupPolicyBackdoor.py工具注入恶意配置:
|
|
b. 利用对站点的GenericAll、GenericWrite或WriteGPLink权限
第二种利用场景发生在用户对站点具有GenericAll、GenericWrite或WriteGPLink权限时。这些ACL都允许从攻击者角度做一件有趣的事情:更改站点的gPLink属性。
可以使用OUned.py工具自动化此攻击:
|
|
5. 滥用Active Directory站点进行林内横向移动
a. 攻击理论
站点相关对象位于LDAP目录的配置命名上下文中。配置分区在整个林中复制,林中的每个域控制器都具有此分区的可写副本。
这意味着已危害林中任何域的攻击者可以更改林的配置分区,从而修改AD站点配置。攻击者可以从他们已危害的域将恶意GPO链接到包含林中其他域控制器的站点。
b. 实践操作
使用GroupPolicyBackdoor.py进行实际操作:
- 在已危害的域上创建恶意GPO
- 向GPO注入恶意配置
- 使用SYSTEM权限在dev.corp.com的域控制器上执行命令,将恶意GPO链接到站点
|
|
结论
涉及Active Directory站点的攻击路径可能不是最常见的,也不是最方便利用的。但是,当它们确实存在时,可能相当关键,因为它们可能导致完整的域泄露。
从防御角度来看,定期审查分配给Active Directory站点对象的ACL可能很重要。如果组织出于管理目的委托站点相关权利,则尤其如此。