1. 内网WriteOwner权限滥用风险全景解析
在Active Directory(AD)域环境中,WriteOwner权限作为ACL(访问控制列表)中的一项关键权限,常被攻击者用于权限提升攻击链。这个看似普通的权限项,实际上允许主体修改目标对象的所有者属性——而所有权变更往往意味着完全控制权的获取。我在多个企业红队评估项目中,亲眼目睹过攻击者如何利用这个"合法权限"实现从普通域账户到域管理员权限的跃迁。
2. WriteOwner权限技术原理深度剖析
2.1 ACL权限继承机制
AD中的每个对象都通过安全描述符(Security Descriptor)存储权限信息,其中包含DACL(自主访问控制列表)。当用户尝试修改对象属性时,系统会逐条检查DACL中的ACE(访问控制项),判断是否具有WriteProperty或WriteOwner权限。关键点在于:
- WriteOwner权限默认不会显示在常规权限管理界面
- 所有权变更后,新所有者会自动获得修改DACL的权限
- 子对象默认继承父容器的ACL设置(除非启用权限继承阻断)
2.2 典型滥用场景还原
以某次渗透测试为例,我们通过以下路径完成权限提升:
- 获取普通域账户(通过钓鱼或弱口令)
- 枚举ACL发现对某OU具有WriteOwner权限
- 使用PowerShell修改OU所有者:
$OU = Get-ADOrganizationalUnit -Identity "OU=Servers,DC=contoso,DC=com" $User = Get-ADUser -Identity "attacker" Set-ADObject -Identity $OU -Owner $User.DistinguishedName- 作为新所有者添加完全控制权限
- 在OU下创建恶意组策略对象(GPO)实现全域控制
3. 实战检测与防御方案
3.1 权限滥用检测技术
推荐使用BloodHound进行可视化分析:
# 收集域内ACL数据 SharpHound.exe --CollectionMethods ACL,Container --Domain contoso.com在BloodHound中重点关注:
- 非管理员账户拥有的WriteOwner权限
- 关键容器(如Domain Controllers OU)的异常权限分配
- 服务账户对用户对象的写权限
3.2 企业级防御策略
基于微软安全基准的强化建议:
| 防护层面 | 具体措施 | 实施命令示例 |
|---|---|---|
| 权限收敛 | 清理冗余ACL条目 | Get-ACL "AD:\OU=Servers" | Set-ACL -RemoveAccounts "S-1-5-21-*" |
| 审计强化 | 启用对象访问审计 | Auditpol /set /subcategory:"Directory Service Changes" /success:enable |
| 监控规则 | 创建SCOM警报规则 | 监控Event ID 4662中的Owner字段变更 |
关键提示:定期使用Microsoft's Attack Surface Analyzer检查权限配置漂移,特别关注新创建的ACL条目。
4. 权限模型优化实践
4.1 最小权限原则实施
在某金融客户案例中,我们采用三级权限模型:
- 核心层(Tier 0):域管理员组,仅允许交互式登录到DC
- 业务层(Tier 1):服务器管理员,通过JIT(即时)权限分配
- 用户层(Tier 2):标准用户,禁止所有WriteOwner权限
通过PowerShell自动化检测脚本:
# 检查非Tier0账户的WriteOwner权限 Get-ADObject -Filter * -Properties nTSecurityDescriptor | ForEach-Object { $sd = $_.nTSecurityDescriptor $sd.Access | Where-Object { $_.ActiveDirectoryRights -match "WriteOwner" -and $_.IdentityReference -notlike "*Tier0*" } | Select-Object @{N='Object';E={$_.DistinguishedName}}, @{N='Principal';E={$_.IdentityReference}} }4.2 常见配置错误修复
在制造业客户环境中发现的典型问题:
- 错误配置:Exchange Trusted Subsystem组对域根具有WriteOwner
- 修复方案:
$root = Get-ADRootDSE $acl = Get-ACL "AD:\$($root.defaultNamingContext)" $acl.PurgeAccessRules((New-Object System.Security.Principal.NTAccount("Exchange Trusted Subsystem"))) Set-ACL -Path "AD:\$($root.defaultNamingContext)" -AclObject $acl5. 高级威胁狩猎技巧
5.1 隐蔽攻击痕迹分析
攻击者常使用以下手法规避检测:
- 在非工作时间(UTC 02:00-04:00)执行权限变更
- 通过已入侵的服务器账户(如SQL服务账户)发起操作
- 使用低权限DC复制(DCSync)而非直接修改
对应的KQL查询示例(Azure Sentinel):
SecurityEvent | where EventID == 4662 | where TargetObject contains "Owner" | extend Account = tostring(parse_json(Account)[0].Account) | where not(Account endswith "$") // 排除机器账户 | where TimeGenerated between (ago(7d) .. now()) | summarize count() by Account, bin(TimeGenerated, 1h) | where count_ > 3 // 高频操作警报5.2 红队对抗经验
在实际攻防演练中,我们开发了多种绕过技术:
- 利用ACL继承延迟:在父容器添加权限后立即删除,子对象仍保留权限
- 通过Exchange相关漏洞(如CVE-2020-0688)间接获取WriteOwner
- 滥用DS-Replication-Get-Changes扩展权限实现等效控制
对应的防御检测规则应包含:
- 监控PowerShell的Set-ADObject调用栈(应禁止非管理会话调用)
- 分析LDAP流量的特殊属性修改请求(如owner=*)
- 建立权限变更的基线行为模型(如正常管理员操作模式)
在最近的客户环境中,我们发现攻击者开始滥用Azure AD Connect的同步账户实施此类攻击,这要求防御方必须将本地AD与云身份系统的权限关联分析。通过部署Microsoft Defender for Identity,可以捕获跨系统的异常权限使用模式,如从非管理终端发起的Owner属性修改请求。