文章总结: 本文介绍了ActiveDirectory中的机密属性机制,通过设置searchFlags的Bit7(值128)将属性标记为机密,移除AuthenticatedUsers的默认读取权限,仅允许显式授权的主体读取。该机制用于保护敏感数据如LAPS密码,但需注意对应用程序的影响和攻击者可能通过查询Schema识别机密属性。建议防御方将其纳入数据分类和保护策略。 综合评分: 80 文章分类: 安全建设,安全工具,红队,内网渗透,漏洞分析
Active Directory安全攻防(六)
原创
寰宇秘阁 寰宇秘阁
寰宇密阁
2026年7月16日 10:00 安徽
在小说阅读器读本章
去阅读
在 Active Directory 的默认安全模型中,有一个需要特别关注的设计:所有经过身份验证的用户(Authenticated Users)都拥有对大部分属性内容的读取权限。
这意味着,只要一个用户或计算机账户成功通过了域身份验证,它就可以查询并读取目录中其他对象的绝大多数属性值——包括用户的部门、电话号码、邮箱地址、组成员关系等信息。
这种设计在功能层面是合理的:AD 本质上是一个目录服务,需要支持地址簿查询、应用程序集成、邮件系统联动等场景,广泛的读取权限是这些功能正常运作的基础。
然而,从安全角度来看,这也带来了风险。某些存储在 AD 属性中的敏感数据(如自定义的密码字段、密钥信息、或业务敏感的标识符),如果遵循默认权限,将对域内所有已认证用户可见。
那么,如何在不改变整体权限模型的前提下,对特定属性实施更严格的访问控制?
这就是机密属性(Confidential Attribute)机制要解决的问题。
二、机密属性的核心机制
2.1 什么是机密属性
机密属性是 Active Directory 提供的一种属性级别的访问控制增强机制。当一个 Schema 属性被标记为机密后,系统会自动移除 Authenticated Users 对该属性内容的默认读取权限,只有被显式授权的安全主体才能读取该属性的值。
简单来说:
| 状态 | 读取权限 | | — | — | | 普通属性 | 所有 Authenticated Users 默认可读 | | 机密属性 | 仅被显式授权的身份可读 |
2.2 如何标记机密属性
机密属性的标记通过修改 Schema 中对应属性对象的 searchFlags 属性来实现。
searchFlags 是一个位掩码(bitmask)字段,其中不同的 bit 位控制着属性的不同行为特征(如是否建立索引、是否在全局编录中复制等)。控制机密性的是第 7 位(Bit 7),对应的十进制值为 128。
具体操作逻辑如下:
- 如果
searchFlags的当前值中包含 128(即 Bit 7 已置位),则该属性被视为机密属性 - 如果需要将一个属性标记为机密,需要将 128 加到
searchFlags的现有值上(或通过位运算设置 Bit 7)
示例:
# 假设某属性的 searchFlags 当前值为 1(表示已建立索引)
# 要将其标记为机密,新值应为:1 + 128 = 129
# 如果 searchFlags 当前值为 0
# 标记为机密后,新值为:0 + 128 = 128
注意:修改 Schema 属性需要 Schema Admins 权限,且 Schema 修改会复制到整个林中的所有域控制器。这是一个影响范围很大的操作,务必谨慎执行。
2.3 searchFlags 各 bit 位含义
为了更好地理解 Bit 7 在整个 searchFlags 中的位置,下表列出了常用的 bit 位定义:
| Bit 位 | 十进制值 | 含义 | | — | — | — | | Bit 0 | 1 | 为该属性建立索引(fATTINDEX) | | Bit 1 | 2 | 在 ANR(模糊名称解析)中包含该属性 | | Bit 2 | 4 | 保留 | | Bit 3 | 8 | 保留 | | Bit 4 | 16 | 保留 | | Bit 5 | 32 | 属性在元数据中保留(fPRESERVEONDELETE) | | Bit 6 | 64 | 复制时包含该属性(fCOPY) | | Bit 7 | 128 | 机密属性(fCONFIDENTIAL) | | Bit 8 | 256 | RODC 过滤属性集(fRODCFilteredAttribute) | | Bit 9 | 512 | 搜索时不显示(fNEVER_AUDIT) |
可以看到,searchFlags 是一个多功能的控制字段,Bit 7 专门用于机密性标记。
三、机密属性的工作原理
3.1 权限评估流程的变化
当一个属性被标记为机密后,AD 的访问控制评估逻辑会发生关键变化:
普通属性的读取评估:
- 检查请求者是否为 Authenticated User → 是 → 允许读取
机密属性的读取评估:
- 检查请求者是否为 Authenticated User → 仅此身份不足以授予读取权限
- 检查请求者是否被显式授予了对该属性(或包含该属性的属性集)的读取权限 → 是 → 允许读取
- 检查请求者是否为 Domain Admins 或具有完全控制权限 → 是 → 允许读取
本质上,机密属性机制在默认的 Authenticated Users 读取权限之上增加了一个额外的访问检查层:系统要求请求者必须持有 CONTROL_ACCESS(控制访问) 权限才能读取该属性的值。
3.2 如何授予机密属性的读取权限
将属性标记为机密后,需要为合法的读取者显式授予权限。授权方式包括:
- 直接授予对象上的属性读取权限:在目标对象的 ACL 中添加针对该属性的读取 ACE
- 通过属性集授权:如果该属性属于某个属性集(Property Set),授予对该属性集的读取权限
- 授予完全控制权限:拥有完全控制权限的安全主体可以读取所有属性,包括机密属性
四、实际应用场景
4.1 保护自定义敏感属性
企业可能在 AD Schema 中扩展了自定义属性来存储敏感信息(如员工身份证号、薪资等级代码等)。将这些属性标记为机密,可以确保只有 HR 系统的服务账户或特定管理员能够读取。
4.2 LAPS 密码属性保护
微软的 LAPS(Local Administrator Password Solution) 是机密属性最经典的应用场景之一。LAPS 将本地管理员密码存储在计算机对象的特定属性中(如 ms-Mcs-AdmPwd),该属性被标记为机密,确保只有被授权的管理员才能读取本地管理员密码。
五、安全考量与注意事项
5.1 不能标记为机密的属性
并非所有属性都可以被标记为机密。基础 Schema 属性(Base Schema Attributes)——即属于 Schema 基础类别(Category 1)的属性——在早期版本的 AD 中不支持标记为机密。微软后续通过补丁放宽了这一限制,但仍需注意兼容性。
5.2 对应用程序的影响
将属性标记为机密后,所有依赖 Authenticated Users 身份读取该属性的应用程序都将受到影响。在实施前,必须全面评估:
- 哪些应用程序或服务会读取该属性
- 这些应用程序使用的服务账户是否已被显式授权
- 是否有监控或报告系统依赖该属性的可读性
5.3 攻防视角
防御方:机密属性是保护 AD 中敏感数据的有效手段,应将其纳入数据分类和保护策略中。
攻击方:在侦察阶段,攻击者可以通过查询 Schema 中 searchFlags 包含 128 的属性来识别哪些属性被标记为机密——这些属性往往存储着高价值信息。识别机密属性后,攻击者会转而寻找拥有这些属性读取权限的账户作为下一步攻击目标。
# 查找所有被标记为机密的属性
Get-ADObject-SearchBase "CN=Schema,CN=Configuration,DC=yourdomain,DC=com" `
-Filter{objectClass -eq"attributeSchema"} `
-Properties name,searchFlags |
Where-Object{$_.searchFlags -band 128 }|
Select-Object name,searchFlags
六、总结
机密属性机制是 Active Directory 在属性级别提供的一种精细化访问控制手段。通过设置 Schema 属性的 searchFlags 第 7 位(值 128),可以将特定属性从 Authenticated Users 的默认可读范围中移除,实现”显式授权才可读”的安全模型。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:寰宇密阁 寰宇秘阁 寰宇秘阁《Active Directory安全攻防(六)》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论