工作组(Workgroup)
在介绍 Windows 域之前,需要先了解 Windows 最基础的网络组织形式——工作组(Workgroup)。
工作组是一种去中心化的管理模式。
在工作组环境中,每台计算机都是独立的个体,拥有自己的:
- 本地用户(Local User)
- 本地用户组(Local Group)
- 本地安全策略
- 本地权限配置
例如,有三台计算机:
PC01
├── Administrator
├── Alice
└── Bob
PC02
├── Administrator
├── Alice
└── Bob
PC03
├── Administrator
├── Alice
└── Bob
虽然这些账户名字可能相同,但实际上它们彼此独立。
PC01 上的 Alice 和 PC02 上的 Alice 并不是同一个用户,它们拥有不同的 SID、不同的密码和不同的权限。
如果 Alice 修改了密码,那么管理员需要到其他机器上重新修改。
如果 Bob 离职,那么管理员需要逐台删除账户。
工作组中的每台计算机都像一个独立的小王国,没有统一的管理中心。
工作组存在的问题
当计算机数量较少时,工作组模式已经足够使用。
例如:
- 家庭网络
- 小型办公室
- 实验环境
- 几台服务器组成的小网络
但是,当企业规模扩大之后,工作组模式会遇到很多问题。
用户管理困难
如果公司有 500 台计算机,每台机器都需要维护本地账户。
员工修改一次密码,管理员可能需要同步很多台机器。
权限管理复杂
假设财务部门只能访问财务服务器。
在工作组模式下,管理员可能需要逐台配置权限:
PC01 -> 配置
PC02 -> 配置
PC03 -> 配置
...
PC500 -> 配置
维护成本非常高。
无法统一安全策略
例如企业要求:
- 密码至少 12 位
- 禁止使用 USB
- 开启防火墙
- 自动安装补丁
工作组环境下通常需要人工逐台配置。
资源共享困难
如果员工需要访问文件服务器:
\\fileserver\share
服务器必须单独维护自己的用户数据库。
很多企业甚至会出现:
- 文件服务器一个密码
- 数据库一个密码
- 邮件系统一个密码
用户需要记住多个账户。
Windows 域的核心组成
为了解决工作组管理混乱的问题,微软提出了 Windows 域(Windows Domain)的概念。
Windows 域是一种集中式管理架构。
它通过一台或多台服务器统一管理整个网络中的:
- 用户
- 计算机
- 权限
- 安全策略
- 网络资源
负责管理整个域的服务器,称为:域控制器(Domain Controller,DC)。所有域成员都不再各自维护独立的用户体系,而是将身份认证交给域控制器完成。
因此:工作组是去中心化管理,而 Windows 域是集中式管理。Windows 域并没有改变网络通信方式,而是在网络之上增加了一套统一的身份和权限管理体系。
但 Windows 域并不是简单地由一台域控和若干客户端组成,而是一套层次化的目录服务系统(Directory Service)。
从逻辑结构上来看,一个典型的 Active Directory 域环境可以表示为:
Forest(森林)
│
├── Tree(树)
│ │
│ └── Domain(域)
│ │
│ ├── Active Directory
│ ├── Domain Controller
│ ├── OU
│ ├── GPO
│ ├── User
│ ├── Computer
│ └── Group
│
└── Site(站点)
其中,Active Directory 用于保存各种对象的信息,而域控负责提供认证、查询和管理服务。
Forest(森林)
森林(Forest)是 Active Directory 中最大的逻辑管理单元。
一个森林可以包含一个或多个域。
例如:
Forest
│
└── corp.local
也可以是:
Forest
│
├── corp.local
├── dev.corp.local
└── test.corp.local
森林中的所有域共享:
- Schema(架构)
- Configuration(配置)
- Global Catalog(全局编录)
同时,森林中的域之间默认建立双向传递信任关系。
对于绝大多数企业来说,一个森林已经能够满足需求,因此很多环境实际上只有一个森林。
信任关系(Trust Relationship)
信任关系定义了两个域之间是否允许互相进行身份认证。
单向信任与双向信任
单向信任(One-Way Trust)
Domain A → 信任 → Domain B
Domain A 信任 Domain B,意味着 Domain B 的用户可以访问 Domain A 的资源,但反过来不行。
双向信任(Two-Way Trust)
Domain A ↔ 互信 ↔ Domain B
两个域中的用户都可以访问对方的资源。
传递性信任(Transitive Trust)
如果 A 信任 B,B 信任 C,那么传递性信任意味着 A 也隐式信任 C。
同一个森林内部的域之间默认建立双向传递信任,因此森林内所有域的用户在理论上可以访问整个森林范围内的资源。
外部信任与林信任
外部信任(External Trust)
两个不同森林中的域之间建立的信任,默认是非传递的。
林信任(Forest Trust)
两个完整森林之间建立的信任,可以是传递的,但需要双方森林根域管理员手动配置。
SID 过滤(SID Filtering)
跨域访问时,Windows 默认会过滤票据中携带的外部域 SID,防止攻击者通过 SID History 伪造权限。
这种机制称为 SID Filtering(也叫 Quarantine)。
在林信任场景中,SID Filtering 默认启用;而旧版本的外部信任可能没有启用,这是历史漏洞利用的重要条件之一。
Tree(树)
树(Tree)是森林中的逻辑组成部分。
树由多个具有连续 DNS 命名空间的域组成。
例如:
corp.local
dev.corp.local
test.corp.local
它们共同组成一棵树。
如果域之间没有连续的命名空间:
corp.local
example.com
则它们通常属于不同的树,但仍然可以存在于同一个森林中。
树的设计主要是为了满足大型企业复杂的域名规划需求。
Domain(域)
域(Domain)是 Windows 域环境中最基本的管理单元。
一个域通常包含:
- 用户
- 计算机
- 安全组
- 域控制器
- OU
- GPO
例如:
corp.local
域具有自己独立的:
- 身份认证体系
- 用户数据库
- 安全策略
- SID 命名空间
在企业中,一个部门或者一个组织通常不会单独建立域,而是整个公司使用一个域进行统一管理。
SID(安全标识符)
SID(Security Identifier)是 Windows 为每个安全主体(用户、计算机、组等)分配的唯一标识符。
SID 格式
S-1-5-21-<DomainIdentifier>-<RID>
例如一个域用户的 SID:
S-1-5-21-3623811015-3361044348-30300820-1001
各字段含义:
| 字段 | 示例值 | 含义 |
|---|---|---|
| S | S | SID 固定前缀 |
| 修订版本 | 1 | 固定为 1 |
| 颁发机构 | 5 | NT Authority |
| 子颁发机构 | 21 | 域账户标识 |
| Domain Identifier | 3623811015-3361044348-30300820 | 域 SID(三段随机值) |
| RID | 1001 | 相对标识符,对象唯一号 |
Domain SID 与 Object SID
- Domain SID:
S-1-5-21-<三段随机值>,每个域在创建时生成,全局唯一 - Object SID:Domain SID + RID,是每个对象的完整标识
同一个域内所有对象共享相同的 Domain SID,只通过 RID 区分。
Well-Known SID
Windows 保留了一批预定义 SID,不属于任何域:
| SID | 含义 |
|---|---|
S-1-5-18 |
SYSTEM(本地系统) |
S-1-5-19 |
LOCAL SERVICE |
S-1-5-20 |
NETWORK SERVICE |
S-1-1-0 |
Everyone |
S-1-5-11 |
Authenticated Users |
S-1-5-7 |
Anonymous Logon |
RID 与特殊账户
域中某些账户的 RID 是固定的:
| RID | 账户 | 含义 |
|---|---|---|
| 500 | Administrator | 默认域管理员 |
| 501 | Guest | 来宾账户 |
| 502 | krbtgt | Kerberos 服务账户 |
Site(站点)
Site(站点)是 Active Directory 中容易被忽略的一个概念。
Site 并不是逻辑组织结构,而是网络拓扑结构。
例如:
北京数据中心
DC01
上海数据中心
DC02
深圳数据中心
DC03
管理员可以将不同地域划分为不同站点。
这样客户端会优先访问距离最近的域控制器,从而减少网络延迟和跨地域流量。
站点还影响:
- 域控制器定位
- 域数据复制
- Kerberos 认证
- GPO 获取
客户端可以使用:
nltest /dsgetsite
查看自己所属的站点。
Active Directory(AD)
Active Directory(简称 AD)是微软提供的目录服务。
可以简单理解为:一个用于保存企业网络资源信息的目录数据库。
AD 中存储着几乎所有重要对象:
- User(用户)
- Computer(计算机)
- Group(组)
- OU(组织单位)
- GPO(组策略对象)
- Contact(联系人)
- Printer(打印机)
- Shared Folder(共享资源)
- Service Account(服务账户)
- Certificate Template(证书模板)
每个对象都拥有自己的属性。
例如用户对象:
sAMAccountName
userPrincipalName
objectSid
memberOf
pwdLastSet
servicePrincipalName
计算机对象:
dNSHostName
operatingSystem
objectSid
servicePrincipalName
管理员通过这些对象和属性管理整个企业网络。
Domain Controller(域控制器)
域控制器(Domain Controller,DC)是安装了 Active Directory Domain Services(AD DS)的服务器。
它负责维护整个域环境的正常运行。
主要功能包括:
保存 AD 数据库
AD 数据库存储在:
C:\Windows\NTDS\ntds.dit
域中的对象信息都保存在其中。
提供身份认证服务
用户登录域时,需要由域控制器验证身份。
域控支持两种主要认证协议:
Kerberos
域环境的默认认证协议,基于票据(Ticket)机制。
整个认证流程中密码本身不在网络上传输,而是通过密钥派生和票据交换完成身份验证。
主要流程分为三个阶段:
1. AS-REQ / AS-REP 客户端向 KDC 申请 TGT(票据授予票据)
2. TGS-REQ / TGS-REP 客户端凭 TGT 向 KDC 申请目标服务的 ST(服务票据)
3. AP-REQ 客户端持 ST 访问目标服务
其中 KDC(Key Distribution Center)角色由域控承担。
NTLM
较旧的认证协议,基于挑战-响应(Challenge-Response)机制。
当出现以下情况时通常回退到 NTLM:
- 通过 IP 地址而非主机名访问
- 客户端不在域内
- 某些跨林访问场景
NTLM 不颁发票据,而是由目标服务器将挑战和响应转发给域控进行验证。
两种协议的详细原理可见:https://f0rget.me/2023/02/28/intranet-kerberos-auth/
提供 LDAP 服务
客户端和管理工具通常通过 LDAP 查询域中的对象信息。
例如:
- 查询用户
- 查询计算机
- 查询组
- 查询组织单位
提供 DNS 服务
大多数企业都会让域控制器同时承担 DNS 服务。实际上 DNS 服务器角色可以放到其他 Windows Server。
因为很多域功能都依赖 DNS 定位域控制器。
例如:
_ldap._tcp.dc._msdcs.domain.local
域数据复制
大型企业通常拥有多个域控。
多个域控之间通过复制机制保持数据一致。
GPO 分发
域控制器负责向客户端提供组策略数据。
客户端会定期向域控请求最新策略。
常见管理工具
Active Directory Users and Computers(dsa.msc)
这是最常用的域管理工具,也是管理员日常使用频率最高的控制台。
主要用于管理 Active Directory 中的基本对象,包括:
- 创建、删除域用户
- 创建、删除计算机对象
- 创建和管理安全组
- 管理组织单位(OU)
- 将计算机加入指定 OU
- 重置用户密码
- 启用或禁用账户
- 查看对象属性
例如:
Company
│
├── HR
├── RD
├── Server
└── Workstation
管理员通常通过 dsa.msc 维护整个企业的组织架构。
Active Directory Administrative Center(dsac.exe)
这是微软后来推出的新一代 AD 管理工具。
相比传统的 dsa.msc,它提供了:
- 更现代化的图形界面
- PowerShell 集成
- 回收站(AD Recycle Bin)管理
- 更丰富的对象属性展示
- 更方便的批量管理
例如:
可以直接恢复误删除的用户对象,而不需要复杂的命令操作。
很多 PowerShell 操作也可以通过该工具自动生成。
因此:dsa.msc 更像传统管理工具,而 AD Administrative Center 更偏向现代化管理平台。
Group Policy Management(gpmc.msc)
组策略管理控制台用于管理 GPO(Group Policy Object)。
管理员可以通过它:
- 创建 GPO
- 编辑 GPO
- 删除 GPO
- 将 GPO 链接到 Domain
- 将 GPO 链接到 OU
- 配置 GPO 优先级
- 查看策略继承关系
- 备份和恢复 GPO
例如:
Default Domain Policy
Default Domain Controllers Policy
Finance Policy
Server Security Policy
都可以在 gpmc.msc 中统一管理。
可以理解为:企业安全配置和批量运维配置的管理中心。
DNS Manager(dnsmgmt.msc)
Windows 域严重依赖 DNS 服务。
实际上,客户端查找域控制器时,首先依赖 DNS 记录。
例如:
_ldap._tcp.dc._msdcs.domain.local
DNS Manager 用于:
- 管理 DNS 区域(Zone)
- 添加和删除 DNS 记录
- 管理 SRV 记录
- 管理 A、AAAA、CNAME、PTR 等记录
- 查看动态 DNS 更新
- 管理域控自动注册的 DNS 信息
很多企业会将 DNS 服务和域控制器部署在同一台服务器上,因此 DNS Manager 也是域管理员的重要工具之一。
可以理解为:域环境名称解析服务的管理控制台。
ADSI Edit(adsiedit.msc)
ADSI Edit 是一个高级 Active Directory 编辑工具。
与 dsa.msc 不同,它不是面向日常管理,而是面向底层目录对象管理。
它可以直接查看和修改 Active Directory 对象的原始属性。
例如:
用户对象可以看到:
objectSid
servicePrincipalName
userAccountControl
msDS-KeyCredentialLink
adminCount
memberOf
计算机对象可以看到:
dNSHostName
servicePrincipalName
msDS-AllowedToActOnBehalfOfOtherIdentity
还可以浏览不同命名上下文:
- Default Naming Context
- Configuration
- Schema
- RootDSE
很多在 dsa.msc 中看不到的属性,都可以通过 ADSI Edit 查看。
因此,ADSI Edit 常被称为:Active Directory 的注册表编辑器。
由于它可以直接修改底层目录数据,因此管理员通常只在高级维护或故障排查时使用,不建议随意修改未知属性。
Computer(计算机对象)
任何加入域的计算机,都会在 Active Directory 中创建一个计算机对象。
例如:
WIN10-01$
FILESERVER$
WEB01$
SQL01$
计算机名称通常以 $ 结尾。
很多人会疑惑:
为什么机器也需要账户?
原因是计算机本身也需要证明自己的身份。
例如:
- 登录域
- 与域控建立信任关系
- 获取组策略
- 访问共享资源
- 与其他服务器进行认证
因此,计算机账户也拥有:
- SID
- 密码
- 权限
- 安全标识
机器密码
每个计算机账户都会生成自己的密码。
机器密码由系统自动维护。
默认情况下:
- 随机生成,密码强度不低于 120 位熵值
- 每 30 天自动更新一次
- 用户通常无感知
密码变更由客户端的 Netlogon 服务主动发起,而不是由域控推送。
变更周期受组策略控制:
计算机配置 → Windows 设置 → 安全设置 → 本地策略 → 安全选项
→ Domain member: Maximum machine account password age
对应注册表位置:
HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\MaximumPasswordAge
默认值为 30 天。虽然可以修改,但微软不推荐将值设置为大于 30 天,因为过长的密码有效期为攻击者提供了更大的横向移动窗口。
计算机通过机器密码与域控建立安全通道(Secure Channel)。
可以使用:
nltest /sc_query:domain.local
查看安全通道状态。
域控制器本身也是域成员计算机,因此域控的机器账户密码同样会定期变更。但与普通计算机不同:域控的机器账户密码在所有域控制器之间通过 AD 复制机制保持同步,确保任意一台域控都能验证安全通道。
计算机对象的关键安全属性
msDS-AllowedToDelegateTo
约束委派的配置属性,指定该计算机账户可以代表用户访问哪些目标服务。
例如:
msDS-AllowedToDelegateTo: MSSQLSvc/sql01.corp.local:1433
配置了约束委派的机器账户是委派攻击的核心目标。
msDS-AllowedToActOnBehalfOfOtherIdentity
基于资源的约束委派(RBCD)的配置属性,存储在被委派的目标对象上,指定哪些账户可以代表其他用户访问自己。
与传统约束委派的区别:
- 传统约束委派:配置在发起方账户上,需要域管权限
- RBCD:配置在目标方账户上,只需对目标对象有写权限
这意味着:如果攻击者对某机器对象有写权限,就可以直接配置 RBCD 完成横向移动,而不需要域管权限。
ms-DS-MachineAccountQuota
这是域级别的属性,定义了普通域用户(非管理员)最多可以将多少台计算机加入域。
默认值为 10。
安全意义:
- 攻击者只需拥有一个普通域账户,即可创建最多 10 个计算机账户
- 新创建的计算机账户创建者对该对象拥有写权限
- 配合 RBCD 可以构造权限提升路径
许多企业没有修改这个默认值,这是 RBCD 攻击链中经常被利用的起点。
计算机加入域
计算机加域时,大致会完成以下工作:
- 创建计算机对象。
- 创建机器账户。
- 建立安全通道。
- 保存机器密码。
- 在 DNS 中注册主机记录。
- 获取域策略。
默认情况下,域管理员组(Domain Admins)会被加入本地 Administrators 组,因此域管理员可以统一管理域成员计算机。
User(用户对象)
用户对象表示域中的身份。
域用户可以在整个域范围内进行认证。
除了普通员工账户,还存在一些特殊账户:
Administrator
默认管理员账户。
RID 为 500。
Guest
默认来宾账户。
RID 为 501。
krbtgt
Kerberos 服务账户。
用于支持 Kerberos 身份认证。
RID 为 502。
安全要点:
krbtgt 账户的密码是在域创建时设置的,之后默认永远不会自动修改。
这意味着:
- 如果攻击者获取了 krbtgt 的 NTLM Hash,就可以伪造任意用户的 TGT(Golden Ticket)
- 由于密码不会变更,即使组织定期修改域管密码,该 Hash 仍然有效
- Golden Ticket 可以伪造任意 SID、任意组成员身份,理论上拥有整个森林的完全控制权
因此,微软建议域管理员定期手动重置 krbtgt 密码,且需要连续重置两次(第一次作废旧票据,第二次确保新密钥生效)。
服务账户
很多后台服务使用独立账户运行。
例如:
svc_sql
svc_backup
svc_web
此外,Windows 还提供:
- Managed Service Account(MSA)
- Group Managed Service Account(gMSA)
用于简化服务账户管理。
用户对象的关键安全属性
从攻击者视角看,以下几个属性比账户名更重要。
userAccountControl(UAC 标志位)
这个属性是一个 32 位整数,每个比特位对应账户的一项设置。
常见标志位:
| 标志位名称 | 十六进制值 | 含义 |
|---|---|---|
| ACCOUNTDISABLE | 0x0002 | 账户已禁用 |
| DONT_EXPIRE_PASSWORD | 0x10000 | 密码永不过期 |
| TRUSTED_FOR_DELEGATION | 0x80000 | 允许非约束委派 |
| NOT_DELEGATED | 0x100000 | 禁止委派,保护敏感账户 |
| DONT_REQUIRE_PREAUTH | 0x400000 | 不要求 Kerberos 预认证(AS-REP Roasting 目标) |
| TRUSTED_TO_AUTH_FOR_DELEGATION | 0x1000000 | 允许约束委派(协议过渡) |
DONT_REQUIRE_PREAUTH标志是 AS-REP Roasting 攻击的前提条件;TRUSTED_FOR_DELEGATION是非约束委派攻击的核心标志。
servicePrincipalName(SPN)
SPN 是 Kerberos 中服务实例的唯一标识符。
格式:
serviceClass/host:port/serviceName
例如:
MSSQLSvc/sql01.corp.local:1433
HTTP/web01.corp.local
当一个用户账户注册了 SPN,任何域用户都可以向 KDC 申请该服务的 ST(服务票据),而 ST 使用该账户的 NTLM Hash 加密。
这意味着:拥有 SPN 的用户账户 = Kerberoasting 攻击目标。攻击者可以离线破解 ST 获取明文密码。
adminCount
当一个用户被添加到受保护组(如 Domain Admins)时,adminCount 会被设置为 1。
这表明该账户受到 AdminSDHolder 保护机制管理。
意义:
- 这类账户的 ACL 会定期被 AdminSDHolder 模板覆盖
- 即使从高权限组移除,
adminCount = 1也会保留,作为历史标志 - 枚举
adminCount = 1的账户是快速定位高价值目标的有效方式
pwdLastSet 与 lastLogon
| 属性 | 含义 | 安全意义 |
|---|---|---|
| pwdLastSet | 最近一次密码设置时间 | 值为 0 时表示账户必须下次登录时改密;长期未改密的账户可能使用弱口令 |
| lastLogon | 最近一次登录时间(本地 DC 记录) | 非全局一致,仅在登录的那台 DC 更新 |
| lastLogonTimestamp | 近似登录时间(全域复制) | 全局一致,但有 14 天内的延迟 |
长期未登录账户(lastLogon 很旧)或密码多年未改(pwdLastSet 很旧)往往是密码喷洒的优先目标。
memberOf 与组嵌套
memberOf 记录了账户直接所属的组。
但 AD 支持组嵌套,例如:
UserA
→ 组 A
→ 组 B(Domain Admins)
UserA 通过嵌套间接拥有 Domain Admins 权限,但 memberOf 只显示”组 A”。
Group(组)
组用于统一管理权限。
相比直接给用户授权,通过组授权更加方便维护。
Windows 中的组可以按照作用域分为:
本地域组(Domain Local Group)
通常用于给某个域中的资源分配权限。
全局组(Global Group)
通常用于组织同一个域中的用户。
例如:
研发部
财务部
运维部
通用组(Universal Group)
适用于多个域之间共享权限。
在大型企业中较为常见。
按照用途,组又可以分为:
- 安全组(Security Group)
- 分发组(Distribution Group)
其中安全组可以用于权限控制,分发组主要用于邮件系统。
常见内置组包括:
Domain Admins
Domain Users
Enterprise Admins
Schema Admins
Account Operators
Backup Operators
Print Operators
Remote Desktop Users
容器(Container)
Active Directory 中保存着大量对象,为了方便管理,这些对象需要存放在不同的位置。
微软引入了容器(Container)的概念。
容器本身并不表示一个真实存在的资源,而是用于组织和管理其他对象。
例如:
Domain
│
├── Users
├── Computers
├── Builtin
└── Domain Controllers
这些节点都可以保存其他对象。
容器就像操作系统中的文件夹,用来存放各种 Active Directory 对象。
Windows 域中的默认容器
创建一个新的域后,通常会看到如下默认结构:
Builtin
Computers
Domain Controllers
ForeignSecurityPrincipals
Managed Service Accounts
Users
其中:
| 名称 | 类型 | 用途 |
|---|---|---|
| Builtin | Container | 保存系统内置组 |
| Computers | Container | 默认保存新加入域的计算机 |
| Users | Container | 默认保存用户和部分内置组 |
| ForeignSecurityPrincipals | Container | 保存外部信任主体 |
| Managed Service Accounts | Container | 保存托管服务账户 |
| Domain Controllers | OU | 保存域控制器 |
OU(组织单位)
OU(Organizational Unit)是一种逻辑管理容器。
它存在的目的并不是安全隔离,而是方便管理。
例如:
Company
│
├── HR
├── RD
├── Finance
└── Server
管理员可以按照:
- 部门
- 地区
- 职能
- 设备类型
划分不同 OU。
OU 可以包含:
- 用户
- 计算机
- 组
- 子 OU
同时,还支持权限委派和组策略管理。
Container 与 OU 的区别
很多初学者容易混淆 Container 和 OU。
实际上:
OU(Organizational Unit)也是一种容器。
但是,并不是所有容器都是 OU。
Windows 域中主要存在两种管理容器:
| 类型 | LDAP 类型 | 是否支持 GPO | 是否支持权限委派 |
|---|---|---|---|
| Container | CN | × | × |
| OU | OU | √ | √ |
例如:
CN=Users,DC=corp,DC=local
表示一个普通容器。
而:
OU=HR,DC=corp,DC=local
表示一个组织单位。
可以看到:LDAP 路径中的前缀也不同。
GPO(组策略对象)
组策略(Group Policy Object,GPO)用于集中管理域中的用户和计算机。
GPO 分为两部分:
Computer Configuration
作用于计算机。
通常在系统启动时处理。
User Configuration
作用于用户。
通常在用户登录时处理。
管理员可以利用 GPO 配置:
- 密码策略
- 登录脚本
- 软件部署
- Windows 更新
- 注册表
- 防火墙
- 安全审计
- 桌面环境
为什么 GPO 通常绑定 OU
因为不同部门往往需要不同管理策略。
例如:
研发部
禁止自动更新
财务部
禁止 CMD
服务器
开启高级审计
通过将 GPO 绑定到不同 OU,可以实现精细化管理。
GPO 如何存储和生效
GPO 包括两部分:
Group Policy Container(GPC)
存储在 Active Directory 中。
Group Policy Template(GPT)
存储在:
\\domain.local\SYSVOL\
客户端会周期性访问 SYSVOL 获取策略文件。
管理员可以使用:
gpupdate /force
立即刷新策略。
查看策略结果:
gpresult /r
gpresult /h report.html
图形化查看:
rsop.msc
SYSVOL 与 NETLOGON
这两个共享是域环境中每个成员计算机默认都能访问的网络路径,也是域内信息收集的重要目标。
SYSVOL
\\domain.local\SYSVOL\
SYSVOL 是一个在所有域控之间复制同步的共享目录,存储着:
- GPO 的模板文件(Group Policy Template,GPT)
- 登录脚本(Logon Scripts)
- 密码策略等 XML 配置文件
访问权限:域内所有经过认证的用户(Authenticated Users)均可读取。
安全意义:
- 历史上曾有管理员将凭据以明文形式写入登录脚本(如
net use命令行) - 早期 GPP(Group Policy Preferences)会将本地管理员密码以 AES 加密后存储在 SYSVOL 的 XML 文件中,但微软公开了密钥,导致可以直接解密(MS14-025)
- SYSVOL 中的登录脚本路径是信息收集阶段的常规检查项
NETLOGON
\\domain.local\NETLOGON\
NETLOGON 是所有域控都提供的另一个共享目录,主要用于:
- 存放登录脚本
- 客户端定位域控时使用的辅助路径
访问权限:同样对所有域内认证用户可读。
渗透测试中,枚举 SYSVOL 和 NETLOGON 有时可以直接找到凭据或敏感配置。