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, 凭据提取, 后渗透测试, 域渗透, 安全检测绕过, 攻击模拟, 电子数据取证, 红队评估, 逆向工具, 驱动签名利用