滥用 GPO 攻击活动目录—Part 1
字数 1332 2025-08-27 12:33:37

滥用GPO攻击活动目录 - 完整指南

1. GPO基础概念

组策略对象(Group Policy Objects, GPO)是Active Directory中用于集中管理计算机和用户配置的核心组件。GPO可以包含各种策略设置,从安全配置到软件部署等。

GPO关键组件:

  • GPC (Group Policy Container):存储在AD中的GPO部分,包含版本和状态信息
  • GPT (Group Policy Template):存储在SYSVOL中的GPO部分,包含实际策略设置
  • GPLink:将GPO链接到组织单位(OU)的属性

2. GPO攻击面枚举

2.1 枚举创建GPO的权限

Get-DomainObjectAcl -SearchBase "CN=Policies,CN=System,DC=testlab,DC=local" -ResolveGUIDs | 
Where-Object { $_.ObjectAceType -eq "Group-Policy-Container" }

关键点:

  • 查找CreateChild权限(在此上下文中表示"创建GPO")
  • 注意具有此权限的用户/组的SID

2.2 枚举GPO链接权限

Get-DomainOU | Get-DomainObjectAcl -ResolveGUIDs | 
Where-Object { $_.ObjectAceType -eq "GP-Link" }

关键点:

  • 查找WriteProperty权限(GP-Link是OU对象上的一个属性)
  • 注意InheritanceFlagsIsInherited属性

2.3 枚举修改现有GPO的权限

Get-DomainGPO | Get-DomainObjectAcl -ResolveGUIDs | 
Where-Object { 
    $_.ActiveDirectoryRights -match "WriteProperty|WriteDacl|WriteOwner" -and 
    $_.SecurityIdentifier -match "S-1-5-21-407754292-3742881058-3910138598-[\d]{4,10}" 
}

关键点:

  • 查找WritePropertyWriteDaclWriteOwner权限
  • 过滤掉内置管理员组(RID<1000)

3. GPO与OU关系映射

3.1 按计算机枚举GPO

Get-DomainGPO -ComputerIdentity ws-1 -Properties Name, DisplayName

3.2 按GPO枚举适用的OU

Get-DomainOU -GPLink "{ECB75201-82D7-49F3-A0E0-86788EE7DC36}" -Properties DistinguishedName

3.3 按OU枚举链接的GPO

$GPLink = (Get-DomainOU -Identity "Workstations" -Properties GPLink).gplink
[Regex]::Matches($GPLink,"\{[A-Z0-9]{8}-([A-Z0-9]{4}-){3}[A-Z0-9]{12}\}") | 
Select-Object -ExpandProperty Value | 
ForEach-Object { Get-DomainGPO -Identity "{$_}" -Properties DisplayName }

4. 继承分析

GPO权限可以继承:

  • InheritanceFlags: ContainerInherit表示权限将应用于子容器
  • IsInherited: True表示权限是从父容器继承的
  • AceFlags: ContainerInherit, Inherited表示权限是继承的且将传递给子容器

关键继承场景:

  1. 默认情况下,权限会继承到所有子对象
  2. 可以设置为"仅此对象"(This object only),此时InheritanceFlagsAceFlags将为None
  3. 嵌套OU会继承所有父OU的权限

5. 攻击路径分析

5.1 创建新GPO的攻击路径

  1. 检查是否有创建GPO的权限
  2. 检查是否有将GPO链接到目标OU的权限
  3. 创建恶意GPO并链接到目标OU

5.2 修改现有GPO的攻击路径

  1. 枚举可修改的GPO
  2. 检查这些GPO链接的OU
  3. 修改GPO设置以添加恶意任务或配置

5.3 链接现有GPO的攻击路径

  1. 枚举有GP-Link权限的OU
  2. 查找现有的未链接或可用的GPO
  3. 将GPO链接到目标OU

6. 防御建议

  1. 定期审计GPO权限委派
  2. 限制GPO创建和修改权限
  3. 监控SYSVOL中的异常更改
  4. 实施GPO变更管理流程
  5. 使用工具如BloodHound检测攻击路径

7. 工具推荐

  • PowerView:用于枚举GPO权限和关系
  • BloodHound:可视化GPO攻击路径
  • GPMC:组策略管理控制台,用于管理GPO
  • ADUC:Active Directory用户和计算机,用于委派控制

通过深入理解GPO的工作原理和权限模型,攻击者可以找到提升权限或维持持久性的途径,而防御者则可以更好地保护Active Directory环境免受此类攻击。

滥用GPO攻击活动目录 - 完整指南 1. GPO基础概念 组策略对象(Group Policy Objects, GPO)是Active Directory中用于集中管理计算机和用户配置的核心组件。GPO可以包含各种策略设置,从安全配置到软件部署等。 GPO关键组件: GPC (Group Policy Container) :存储在AD中的GPO部分,包含版本和状态信息 GPT (Group Policy Template) :存储在SYSVOL中的GPO部分,包含实际策略设置 GPLink :将GPO链接到组织单位(OU)的属性 2. GPO攻击面枚举 2.1 枚举创建GPO的权限 关键点: 查找 CreateChild 权限(在此上下文中表示"创建GPO") 注意具有此权限的用户/组的SID 2.2 枚举GPO链接权限 关键点: 查找 WriteProperty 权限(GP-Link是OU对象上的一个属性) 注意 InheritanceFlags 和 IsInherited 属性 2.3 枚举修改现有GPO的权限 关键点: 查找 WriteProperty 、 WriteDacl 或 WriteOwner 权限 过滤掉内置管理员组(RID <1000) 3. GPO与OU关系映射 3.1 按计算机枚举GPO 3.2 按GPO枚举适用的OU 3.3 按OU枚举链接的GPO 4. 继承分析 GPO权限可以继承: InheritanceFlags: ContainerInherit 表示权限将应用于子容器 IsInherited: True 表示权限是从父容器继承的 AceFlags: ContainerInherit, Inherited 表示权限是继承的且将传递给子容器 关键继承场景: 默认情况下,权限会继承到所有子对象 可以设置为"仅此对象"(This object only),此时 InheritanceFlags 和 AceFlags 将为 None 嵌套OU会继承所有父OU的权限 5. 攻击路径分析 5.1 创建新GPO的攻击路径 检查是否有创建GPO的权限 检查是否有将GPO链接到目标OU的权限 创建恶意GPO并链接到目标OU 5.2 修改现有GPO的攻击路径 枚举可修改的GPO 检查这些GPO链接的OU 修改GPO设置以添加恶意任务或配置 5.3 链接现有GPO的攻击路径 枚举有GP-Link权限的OU 查找现有的未链接或可用的GPO 将GPO链接到目标OU 6. 防御建议 定期审计GPO权限委派 限制GPO创建和修改权限 监控SYSVOL中的异常更改 实施GPO变更管理流程 使用工具如BloodHound检测攻击路径 7. 工具推荐 PowerView :用于枚举GPO权限和关系 BloodHound :可视化GPO攻击路径 GPMC :组策略管理控制台,用于管理GPO ADUC :Active Directory用户和计算机,用于委派控制 通过深入理解GPO的工作原理和权限模型,攻击者可以找到提升权限或维持持久性的途径,而防御者则可以更好地保护Active Directory环境免受此类攻击。