JVBotelho/dcsync-variant-tester
GitHub: JVBotelho/dcsync-variant-tester
通过操纵 DRS 标志位测试能否绕过域控制器对 DCSync 操作的 Event 4662 检测,并在 Server 2016 和 2025 上验证了所有变体均无法绕过。
Stars: 0 | Forks: 0
# DCSync 变体测试器
测试 DRS 标志位操作是否能阻止 GUID `1131f6ad` (DS-Replication-Get-Changes-All)
在凭证转储期间出现在域控制器的 Event 4662 中。
**结论:无效。** 当请求凭证属性时,DC 始终会校验 `Get-Changes-All`,
而不受标志位组合的影响。已在 Windows Server 2016 和 Windows Server 2025 (build 26100) 上确认。
[完整结果 →](results/)
## 快速开始
```
pip install "impacket==0.13.1"
python3 tester/stealth_dcsync_test.py \
--dc \
--domain \
-u \
-p
```
测试工具运行 5 种 DRSGetNCChanges 变体 (V1-V5),并打印时间戳以及
一条要在 DC 上运行的 `wevtutil` 命令。详情及通过修改版 secretsdump.py 的
替代用法,请参阅 [tester/README.md](tester/README.md)。
## 测试内容
当 DCSync 工具请求密码哈希时,DC 会记录带有 GUID
`1131f6ad-9c07-11d1-f79f-00c04fc2dcd2` (DS-Replication-Get-Changes-All) 的 Event 4662。
大多数 SIEM/EDR 检测机制专门监控此 GUID。
本仓库测试了是否可以通过操纵 DRS 请求标志位 —— 移除
`DRS_WRIT_REP`、使用 `DRS_SPECIAL_SECRET_PROCESSING`,或切换为
`EXOP_REPL_SECRETS` —— 来让 DC 仅校验
`Get-Changes-In-Filtered-Set` (GUID `89e95b76`),从而使该操作对标准检测机制不可见。
**答案:否。** 在所有变体和测试的每个 DC 版本上,DC 都会记录
`1131f6ad`,因为权限检查是基于**所请求的属性**
(`unicodePwd`, `supplementalCredentials`),而不是 DRS 标志位。
## 结果摘要
| 变体 | 标志位 | Server 2016 | Server 2025 |
|---|---|---|---|
| V1 Baseline | `INIT_SYNC \| WRIT_REP` | `1131f6ad` | `1131f6ad` |
| V2 No WRIT_REP | `INIT_SYNC` | `1131f6ad` | `1131f6ad` |
| V3 SPECIAL_SECRET | `INIT_SYNC \| SPECIAL_SECRET` | `1131f6ad` | `1131f6ad` |
| V4 REPL_SECRETS | `INIT_SYNC`, `EXOP_REPL_SECRETS` | `1131f6ad` | `1131f6ad` |
| V5 REPL_SEC full | `INIT_SYNC \| WRIT_REP`, `EXOP_REPL_SECRETS` | `1131f6ad` | `1131f6ad` |
[Server 2016 完整结果 →](results/server-2016.md)
[Server 2025 完整结果 →](results/server-2025.md)
## 限制
- **依赖审计策略:** Event 4662 仅在同时启用了 `Audit Directory Service
Access` 并且域根目录具有用于属性读取的 SACL 时才会出现。如果没有
此配置,对比无效。参见 [docs/methodology.md](docs/methodology.md)。
- **已测试版本:** 仅测试了 Windows Server 2016 和 2025。在 2008 R2、2012
和 2012 R2 上的行为未知。
- **Impacket 版本固定:** 使用 impacket 0.13.1 进行测试。更新版本可能会改变
DRSGetNCChanges 的结构布局;`run_variants.sh` 中的补丁行号适用于
0.13.1。
- **需要 Domain Admin:** 测试账户必须拥有 `Replicating Directory
Changes All` 权限 —— 这是一项授权操作,而非漏洞利用。本研究
探讨的是*检测*是否可以被绕过,而不是是否可以在未经授权的情况下执行该*操作*。
## 仓库结构
```
dcsync-variant-tester/
├── README.md
├── LICENSE (MIT)
├── .gitignore
├── .gitleaks.toml
├── tester/
│ ├── README.md (quickstart)
│ ├── stealth_dcsync_test.py (standalone harness)
│ └── run_variants.sh (shell wrapper — patches secretsdump.py)
├── results/
│ ├── server-2016.md
│ └── server-2025.md
└── docs/
├── methodology.md
└── prior-art.md
```
## 许可证
MIT — 参见 [LICENSE](LICENSE)。
标签:Cutter, 凭据提取, 后渗透测试, 域渗透, 安全检测绕过, 攻击模拟, 电子数据取证, 红队评估, 逆向工具, 驱动签名利用