cpassword 为什么等于明文
早期的组策略首选项(GPP)支持在策略里直接填写口令,这些口令以固定的 AES 密钥加密后写入 SYSVOL 下的 XML 文件,密文字段就是 cpassword。密钥是微软公开的,所以任何能读 SYSVOL 的普通域用户都能在几秒内解出原文——这是域内权限提升最经典的路径之一。2014 年微软发补丁禁止再通过 GPP 设置口令,但历史遗留文件不会自己消失,必须主动扫描并清理。
基本信息
| 加固项 | 域内 GPP 口令残留治理 |
|---|---|
| 适用平台 | Active Directory 域(SYSVOL 中的组策略文件) |
| 权限要求 | 域管理员(清理),普通域用户即可读取 SYSVOL |
| 达标判据 | SYSVOL 全量扫描结果中无 cpassword 字段 |
| 对应补丁 | Microsoft 安全公告 KB2962486 |
典型使用场景
- 域安全基线审计与红队评估后的整改闭环
- 接手历史较久的域环境,清点旧运维留下的凭据
- 从旧域迁移或合并时清理对方遗留的策略文件
- 应急响应中确认攻击者可能拿到的域内凭据范围
- 定期巡检,防止有人重新用 GPP 方式下发口令
扫描 SYSVOL
扫描 SYSVOL
Select-String -Path '\\corp.example.com\SYSVOL' -Pattern 'cpassword' -SimpleMatch -ErrorAction SilentlyContinue | Select-Object -First 20 Path, LineNumber
findstr /s /i /m cpassword "\\corp.example.com\SYSVOL\*" # 备用方式:只列命中的文件名
# 定位后可查看具体策略目录名称,判断是哪条 GPP 留下的处置顺序
处置顺序
# 1) 记录命中的策略路径与涉及的账号名(留档)
# 2) 在组策略管理控制台删除对应的 GPP 条目(不要只删 XML 文件)
# 3) 轮换所有被写在 GPP 里的账号口令
# 4) 等待组策略复制完成后重新全量扫描确认清零常见的泄露位置
| GPP 类型 | 典型内容 | 风险 |
|---|---|---|
| 本地用户与组 | 批量下发本地管理员口令 | 所有机器同口令,横向移动一把梭 |
| 映射驱动器 | 访问共享所用的账号口令 | 直接拿到文件服务器凭据 |
| 计划任务 | 以特定账号运行任务的口令 | 常带高权限服务账号 |
| 服务 | 服务运行账号的口令 | 影响面覆盖全站点机器 |
扫描到的每一处都按“已泄露”处理:只删除策略文件而不轮换口令,等于什么也没做,攻击者手里已经有原文了。清理和轮换必须一起做,且要确认域内复制已完成后再次扫描验证。
排查范围不要只盯 SYSVOL 里的 GPP:脚本、登录脚本、批处理文件、内部 wiki 里同样常见明文口令。域内凭据治理应当把“扫描+轮换”做成定期动作,而不是一次性项目。