ActiveDirectory安全攻防(五)"

admin 2026-10-18 15:25:20 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

cover_image

Active Directory安全攻防(五)

原创

寰宇秘阁
寰宇秘阁

寰宇密阁

2026年7月11日 10:00
安徽

在小说阅读器读本章

去阅读

在前几篇文章中,我们深入探讨了 Active Directory 的访问控制列表(ACL)机制、SDProp 安全描述符传播器以及 AdminSDHolder 容器的保护原理。我们了解到,AD 中对象的权限来源是多层次的——既有通过组织单位(OU)委派的权限,也有 SDProp 机制为高权限账户强制设定的权限。

然而,还有一个常被忽视但同样重要的权限来源:Schema(架构)中定义的默认权限。

每当 Active Directory 创建一个新对象(如用户、计算机、组等),系统并不是从零开始构建其安全描述符的。相反,AD 会从 Schema 中读取该对象类预定义的默认安全描述符,作为新对象的初始权限模板。这些默认权限使用一种名为 SDDL(Security Descriptor Definition Language,安全描述符定义语言) 的专用字符串格式进行定义。

理解 Schema 默认权限和 SDDL 语法,对于安全审计、权限分析以及攻防研究都至关重要。本文将详细解析这一机制。


在深入 Schema 默认权限之前,让我们先回顾一下 Active Directory 中对象权限的完整来源体系:

权限来源 描述 适用范围
Schema 默认权限 在对象创建时,从 Schema 中该对象类的 defaultSecurityDescriptor 属性读取并应用 所有新创建的 AD 对象
OU 级别的委派权限 通过在组织单位上配置 ACL 实现权限继承,子对象继承父容器的权限 OU 内的对象(通过继承)
SDProp 强制权限 AdminSDHolder 容器上的 ACL 模板,由 SDProp 进程周期性地强制覆盖到受保护账户 受保护安全组的成员(adminCount=1)

这三层权限共同构成了 AD 对象最终的有效权限。其中,Schema 默认权限是最基础的一层——它决定了对象\"出生\"时的权限状态。


二、Schema 中的默认安全描述符

2.1 什么是 Schema?

Active Directory Schema(架构)定义了目录数据库中可以存储的所有对象类型(类)和属性。可以将 Schema 理解为 AD 的\"数据字典\"或\"蓝图\"——它规定了:

  • 类(Class)

:可以创建哪些类型的对象(如 user、computer、group、organizationalUnit 等)
* 属性(Attribute)

:每种对象可以拥有哪些属性(如 sAMAccountName、mail、memberOf 等)
* 默认安全描述符

:每种对象在创建时应具有的初始权限

2.2 查看 Schema 中的默认权限

要查看某个对象类的默认安全描述符,可以通过以下两种方式:

方式一:使用 Schema 管理单元(Schema Snap-in)

  1. 运行 regsvr32 schmmgmt.dll 注册 Schema 管理单元
  2. 打开 MMC 控制台,添加\"Active Directory 架构\"管理单元
  3. 展开\"类\"节点,找到目标类(如 user)
  4. 右键点击 → 属性 → 切换到 “默认安全性(Default Security)” 选项卡

在这个选项卡中,你可以看到以图形化方式展示的默认权限配置。

方式二:使用 ADSI 编辑器(adsiedit.msc)

  1. 打开 ADSI 编辑器
  2. 连接到 Schema 命名上下文
  3. 找到目标类对象(如 CN=User,CN=Schema,CN=Configuration,DC=...)
  4. 查看其 defaultSecurityDescriptor 属性

该属性的值是一个 SDDL 格式的字符串,这就是我们接下来要重点解析的内容。

2.3 defaultSecurityDescriptor 属性

defaultSecurityDescriptor 是 Schema 中每个类对象上的一个属性,它以 SDDL 字符串的形式存储了该类对象的默认权限模板。

例如,user 类的 defaultSecurityDescriptor 可能类似如下:

D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;AO)(A;;RPLCLORC;;;PS)(OA;;CR;ab721a53-1e2f-11d0-9819-00aa0040529b;;PS)...

这段看起来像\"天书\"的字符串,实际上是一种高度结构化的权限描述语言。让我们来逐步解析它。


三、SDDL 安全描述符定义语言详解

3.1 SDDL 概述

SDDL(Security Descriptor Definition Language) 是 Microsoft 定义的一种文本格式,用于描述安全描述符。它将复杂的二进制安全描述符转换为人类可读(虽然不太友好)的字符串表示。

SDDL 字符串的基本结构如下:

O:<所有者SID>G:<主组SID>D:<DACL>S:<SACL>
组成部分 含义
O: Owner(所有者)——对象的所有者 SID
G: Group(主组)——对象的主组 SID
D: DACL(自主访问控制列表)——定义谁可以访问对象
S: SACL(系统访问控制列表)——定义审计规则

在 Schema 的 defaultSecurityDescriptor 中,最常见的是 D: 部分(DACL),它定义了对象的默认访问权限。

3.2 ACE 条目的格式

DACL 部分由一系列 ACE(访问控制条目) 组成,每个 ACE 用括号包裹,格式如下:

(ACE_Type;ACE_Flags;Rights;Object_GUID;Inherit_Object_GUID;Account_SID)

各字段的含义:

字段 含义 示例
ACE\_Type ACE 类型 A = 允许(Access Allowed),D = 拒绝(Access Denied),OA = 对象特定的允许
ACE\_Flags 继承标志 CI = 容器继承,OI = 对象继承
Rights 权限代码 RP = 读取属性,WP = 写入属性,CC = 创建子对象等
Object\_GUID 对象 GUID(仅对象特定 ACE) 控制权限适用于哪个属性或扩展权限
Inherit\_Object\_GUID 继承对象 GUID 控制继承适用于哪种子对象类型
Account\_SID 安全主体 DA = Domain Admins,SY = System 等

3.3 权限代码详解

SDDL 中的权限使用两字母缩写表示,以下是常见的权限代码:

代码 全称 含义
RP Read Property 读取属性
WP Write Property 写入属性
CR Control Access / Extended Right 控制访问权 / 扩展权限
CC Create Child 创建子对象
DC Delete Child 删除子对象
LC List Children 列出子对象
LO List Object 列出对象
RC Read Control 读取安全描述符(DACL)
WO Write Owner 修改所有者
WD Write DACL 修改 DACL
SD Standard Delete 标准删除
DT Delete Tree 删除子树
SW Self Write 自写(如将自己添加到组中)
GA Generic All 完全控制
GR Generic Read 通用读取
GW Generic Write 通用写入
GX Generic Execute 通用执行

3.4 安全主体代码

SDDL 使用简短的代码来表示常见的安全主体,避免使用冗长的 SID 字符串:

代码 安全主体 说明
DA Domain Admins 域管理员组
SY System 本地系统账户
AO Account Operators 账户操作员组
PS Personal Self(Self) 对象自身(用户可以修改自己的某些属性)
RS RAS and IAS Servers RAS 和 IAS 服务器组
AU Authenticated Users 已认证用户
WD Everyone 所有人
CA Certificate Publishers 证书发布者
BA Built-in Administrators 内置管理员组
EA Enterprise Admins 企业管理员组
SA Schema Admins 架构管理员组
CO Creator Owner 创建者/所有者

此外,对于没有预定义代码的安全主体,SDDL 直接使用完整的 SID 字符串表示:

SID 安全主体
S-1-5-32-560 Windows Authorization Access Group(Windows 授权访问组)
S-1-5-32-561 Terminal Server License Servers(终端服务器许可证服务器)

四、实战解析 SDDL 字符串

4.1 逐条解析示例

让我们以 user 类的默认安全描述符为例,逐条解析其中的 ACE:

第一条 ACE:

(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)

拆解:

字段 值 含义
ACE\_Type A Access Allowed(允许访问)
ACE\_Flags (空) 无继承标志
Rights RPWPCRCCDCLCLORCWOWDSDDTSW 多项权限的组合
Object\_GUID (空) 适用于所有属性
Inherit\_Object\_GUID (空) 无继承限制
Account\_SID DA Domain Admins(域管理员)

权限代码展开:

代码 权限
RP 读取属性
WP 写入属性
CR 控制访问权
CC 创建子对象
DC 删除子对象
LC 列出子对象
LO 列出对象
RC 读取安全描述符
WO 修改所有者
WD 修改 DACL
SD 标准删除
DT 删除子树
SW 自写

解读:Domain Admins 对该对象拥有几乎所有权限,相当于完全控制。

第二条 ACE:

(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)

与第一条结构完全相同,只是安全主体变为 SY(System)。这意味着本地系统账户也拥有完全控制权限。

第三条 ACE:

(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;AO)

安全主体为 AO(Account Operators),同样拥有完全控制权限。这就是为什么 Account Operators 组默认可以管理域中的用户和组对象。

第四条 ACE:

(A;;RPLCLORC;;;PS)
字段 值 含义
ACE\_Type A 允许访问
Rights RPLCLORC RP(读取属性)+ LC(列出子对象)+ LO(列出对象)+ RC(读取安全描述符)
Account\_SID PS Personal Self(对象自身)

解读:用户对自己的对象拥有基本的读取权限——可以读取自己的属性、列出子对象、列出对象以及读取安全描述符。这是一组只读权限,确保用户至少能够查看自己的基本信息。

第五条 ACE:

(OA;;CR;ab721a53-1e2f-11d0-9819-00aa0040529b;;PS)
字段 值 含义
ACE\_Type OA Object-specific Access Allowed(对象特定的允许访问)
ACE\_Flags (空) 无继承标志
Rights CR Control Access / Extended Right(扩展权限)
Object\_GUID ab721a53-1e2f-11d0-9819-00aa0040529b 对应 Change Password(更改密码)扩展权限
Inherit\_Object\_GUID (空) 无继承限制
Account\_SID PS Personal Self(对象自身)

解读:用户拥有更改自己密码的扩展权限。注意这里使用了 OA 类型而非普通的 A,因为这是一个对象特定的 ACE——它通过 Object\_GUID 精确指定了权限适用于哪个扩展权限(Change Password)。

知识点:OA 类型的 ACE 是 Active Directory 特有的,它允许将权限精确绑定到特定的属性、属性集或扩展权限。Object\_GUID 字段引用的是 Schema 中定义的 rightsGuid 或 schemaIDGUID。

4.2 常见扩展权限 GUID 对照表

在解析 SDDL 时,经常会遇到 Object\_GUID 字段中的 GUID 值。以下是一些常见的扩展权限及其 GUID:

GUID 扩展权限名称 说明
ab721a53-1e2f-11d0-9819-00aa0040529b Change Password 更改密码
00299570-246d-11d0-a768-00aa006e0529 Reset Password 重置密码
ab721a54-1e2f-11d0-9819-00aa0040529b Send As 代理发送
ab721a56-1e2f-11d0-9819-00aa0040529b Receive As 代理接收
1131f6aa-9c07-11d1-f79f-00c04fc2dcd2 DS-Replication-Get-Changes 目录复制获取变更
1131f6ad-9c07-11d1-f79f-00c04fc2dcd2 DS-Replication-Get-Changes-All 目录复制获取所有变更
89e95b76-444d-4c62-991a-0facbeda640c DS-Replication-Get-Changes-In-Filtered-Set 目录复制获取过滤集变更

安全提示:DS-Replication-Get-Changes 和 DS-Replication-Get-Changes-All 这两个扩展权限是执行 DCSync 攻击的关键前提。如果攻击者能够获得这两个权限,就可以模拟域控制器进行目录复制,从而提取域内所有用户的密码哈希。

4.3 完整 SDDL 解析流程

为了帮助读者建立系统化的 SDDL 解析能力,我们总结一个标准的解析流程:

步骤一:识别整体结构

O:<所有者>G:<主组>D:<DACL标志>(ACE1)(ACE2)...S:<SACL标志>(ACE1)...

首先确定字符串中包含哪些部分(O、G、D、S),然后分别处理。

步骤二:分离 ACE 条目

在 D: 或 S: 部分中,每对括号 () 包含一个独立的 ACE。将它们逐一提取出来。

步骤三:解析每个 ACE 的六个字段

按照分号 ; 分隔,依次解析:

  1. ACE 类型(A/D/OA/OD 等)
  2. ACE 标志(继承选项)
  3. 权限代码
  4. 对象 GUID
  5. 继承对象 GUID
  6. 安全主体

步骤四:翻译权限代码和安全主体

参照前文的对照表,将两字母代码翻译为可读的权限名称和安全主体名称。

步骤五:查找 GUID 对应的含义

对于 OA 或 OD 类型的 ACE,需要查找 Object\_GUID 对应的属性、属性集或扩展权限名称。可以通过以下方式查询:

# 查找扩展权限
Get-ADObject-SearchBase \"CN=Extended-Rights,CN=Configuration,DC=yourdomain,DC=com\" `
-Filter{rightsGuid -eq\"ab721a53-1e2f-11d0-9819-00aa0040529b\"} `
-Properties displayName,rightsGuid

五、不同对象类的默认权限对比

不同类型的 AD 对象在 Schema 中定义了不同的默认权限。了解这些差异有助于理解 AD 的安全设计理念。

5.1 User 类的默认权限特点

  • Domain Admins、System、Account Operators

拥有完全控制权限
* 用户自身(PS)

拥有基本读取权限和更改密码权限
* Authenticated Users

通常拥有读取大部分属性的权限
* 某些敏感属性(如 userPassword)有额外的保护

5.2 Computer 类的默认权限特点

Computer 类的默认权限与 User 类相似(因为 computer 类继承自 user 类),但有一些针对计算机对象的特殊权限:

  • 计算机对象自身通常拥有写入某些 DNS 相关属性的权限
  • Domain Admins 和 System 拥有完全控制

5.3 Group 类的默认权限特点

  • Domain Admins 和 System

拥有完全控制
* Account Operators

拥有管理权限
* Authenticated Users

拥有读取权限
* 组成员的修改权限(member 属性的写入权限)是一个关键的安全控制点

5.4 OrganizationalUnit 类的默认权限特点

OU 的默认权限相对简单,但由于 OU 是权限委派的基本单位,其 ACL 通常会在创建后被管理员大量修改。


六、Schema 默认权限的安全影响

6.1 默认权限与实际权限的关系

需要特别强调的是,Schema 中定义的默认权限只是对象创建时的初始权限。对象创建后,其实际权限可能因以下因素而发生变化:

  1. 继承

:父容器(如 OU)上的 ACL 会通过继承传递给子对象
2. 显式修改

:管理员可能直接修改对象的 ACL
3. SDProp 覆盖

:对于受保护安全组的成员,SDProp 会周期性地用 AdminSDHolder 的 ACL 覆盖对象的权限
4. 组策略

:某些组策略设置可能影响权限

因此,要了解一个对象的实际有效权限,不能仅看 Schema 默认权限,还需要综合考虑所有权限来源。

6.2 修改 Schema 默认权限的风险

Schema 的默认安全描述符是可以修改的(需要 Schema Admins 权限),但这样做需要极其谨慎:

  • 影响范围广

:修改后,所有新创建的该类对象都会使用新的默认权限
* 不影响已有对象

:修改 Schema 默认权限不会自动更新已存在对象的权限
* 难以回滚

:Schema 修改通常是不可逆的
* 可能破坏功能

:不当的权限修改可能导致应用程序或管理工具无法正常工作

攻防视角:如果攻击者获得了 Schema Admins 权限,他们可以修改 Schema 中的默认安全描述符,为未来创建的所有对象植入后门权限。这是一种极其隐蔽的持久化手段,因为:

  • 修改发生在 Schema 层面,不容易被常规审计发现
  • 只影响新创建的对象,不会触发现有对象的权限变更告警
  • 即使管理员清理了已知的恶意权限,新创建的对象仍会携带后门权限

6.3 安全审计建议

针对 Schema 默认权限,建议采取以下安全措施:

1. 定期审计 Schema 默认安全描述符

# 导出所有类的默认安全描述符
Get-ADObject-SearchBase \"CN=Schema,CN=Configuration,DC=yourdomain,DC=com\" `
-Filter{objectClass -eq\"classSchema\"} `
-Properties name,defaultSecurityDescriptor |
Select-Object name,defaultSecurityDescriptor |
Export-Csv-Path \"SchemaDefaultSecurity.csv\"-NoTypeInformation

将导出结果与已知的基线进行对比,检测是否有未授权的修改。

2. 监控 Schema 变更

启用对 Schema 分区的审计,监控 defaultSecurityDescriptor 属性的修改事件。关键的事件 ID 包括:

事件 ID 描述
5136 目录服务对象被修改
5137 目录服务对象被创建

3. 保护 Schema Admins 组

  • 保持 Schema Admins 组为空(仅在需要修改 Schema 时临时添加成员)
  • 对 Schema Admins 组的成员变更启用告警
  • 确保 Schema Admins 组受 SDProp 保护(默认情况下已受保护)

4. 使用 SDDL 解析工具

手动解析 SDDL 字符串容易出错,建议使用工具辅助:

# 使用 PowerShell 将 SDDL 转换为可读格式
$sddl = \"D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPLCLORC;;;PS)\"
$sd = New-Object System.Security.AccessControl.RawSecurityDescriptor($sddl)
$sd.DiscretionaryAcl |ForEach-Object{
[PSCustomObject]@{
        AceType       = $_.AceType
        SecurityIdentifier = $_.SecurityIdentifier.Translate([System.Security.Principal.NTAccount])
        AccessMask    = $_.AccessMask
        IsInherited   = $_.IsInherited
}
}

七、SDDL 在其他场景中的应用

SDDL 不仅用于 Active Directory 的 Schema 默认权限,它在 Windows 安全体系中有广泛的应用:

应用场景 说明
文件系统 ACL NTFS 文件和文件夹的安全描述符可以用 SDDL 表示
注册表权限 注册表键的安全描述符使用 SDDL 格式
服务安全描述符 Windows 服务的访问控制使用 SDDL 定义
WMI 命名空间安全 WMI 命名空间的权限使用 SDDL 配置
组策略安全设置 某些组策略设置中使用 SDDL 定义权限
Windows 防火墙规则 防火墙规则的安全描述符使用 SDDL

掌握 SDDL 语法,不仅有助于理解 AD 安全,还能在 Windows 安全的多个领域发挥作用。


八、总结

本文深入解析了 Active Directory Schema 中的默认安全描述符机制以及 SDDL 安全描述符定义语言。关键要点总结如下:

  1. Schema 默认权限是 AD 对象权限的基础层,它决定了对象创建时的初始安全状态,与 OU 继承权限和 SDProp 强制权限共同构成完整的权限体系。
  2. SDDL 是一种结构化的权限描述语言,虽然看起来晦涩难懂,但遵循固定的语法规则。掌握其 ACE 格式(类型、标志、权限、GUID、安全主体)是解读权限的关键。
  3. 不同对象类有不同的默认权限,这些差异反映了 AD 的安全设计理念——例如,Domain Admins 和 System 通常拥有完全控制,而普通用户只有有限的自管理权。

ActiveDirectory安全攻防(五)" 网络安全文章

ActiveDirectory安全攻防(五)"

本文是ActiveDirectory安全攻防系列第五篇,重点解析Schema默认权限和SDDL安全描述符定义语言。文章指出AD对象权限有三大来源:Schema默认权限、OU委派和SDProp强制权限,其中Schema默认权限是对象创建时的初始权限模板。详细介绍了SDDL语法结构、权限代码和安全主体代码,并通过实战解析user类的默认安全描述符示例,说明DomainAdmins、System等拥有完全控制权,而用户自身仅有基本读取和更改密码权限。理解这些机制对安全审计和攻防研究至关重要。
美国正加速制定AI模型发布的自愿性标准" 网络安全文章

美国正加速制定AI模型发布的自愿性标准"

美国白宫正联合国家安全部门与OpenAI、Anthropic、谷歌等企业加速制定AI模型发布的自愿性行业标准,旨在为具备高级网络渗透能力的尖端模型建立统一安全标准。此举落实特朗普人工智能行政令,明确先进AI模型的准入条件与安全审查机制。此前美方对头部企业的临时干预曾引发争议,此次制度化规则旨在化解行业困惑。但业界担忧碎片化行政介入可能拖累美国AI创新效率。
上海通管局发布关于开展“铸盾模都”2026年人工智能安全赋能专项行动的通知" 网络安全文章

上海通管局发布关于开展“铸盾模都”2026年人工智能安全赋能专项行动的通知"

上海市通信管理局发布铸盾模都2026年人工智能安全赋能专项行动通知,要求相关企业落实网络数据安全主体责任,加强人工智能研发训练部署应用等全流程安全管理,重点防范数据投毒、对抗样本攻击等风险,强化供应链、智能体、具身智能安全,并明确备案时间节点。企业需在8月31日前备案重要数据目录,11月30日前上报业务清单。该通知为上海地区AI安全合规提供明确指引。
从停车场到公园长椅,读懂俄罗斯军事情报在意大利的十二年工程" 网络安全文章

从停车场到公园长椅,读懂俄罗斯军事情报在意大利的十二年工程"

2026年7月意大利驱逐两名俄武官并逮捕两名前特工,揭露格鲁乌在意大利长达十二年的渗透活动。涉案前反间谍特工皮拉斯向俄方提供SAMP/T防空系统数据、北约任务细节及反间谍人员身份等敏感信息。此案是俄罗斯混合战争组成部分,显示其通过多层次代理结构持续获取西方军事与工业情报。
评论:0   参与:  0