【域渗透】DCSync
概述:DCSync 介绍及渗透,获取用户 hash,对 Dcsync 的检测及防护
相关文章:
- 域渗透——DCSync - 阅力值 ⭐⭐⭐⭐
- DCSync | h0ny’s blog - 阅力值 ⭐⭐⭐
- DCSync与DCshadow攻击学习 - Shu1L’s blog - 阅力值 ⭐⭐⭐⭐
- 揭秘DCShadow - 斗象能力中心 - 阅力值 ⭐⭐⭐⭐⭐
1. DCSync
1.1. DCSync 是什么
DCSync 是一种机制。在域环境中,不同域控制器(DC)之间,每 15 分钟都会有一次域数据的同步。当一个域控制器(DC 1)想从其他域控制器(DC 2)获取数据时,DC 1 会向 DC 2 发起一个 GetNCChanges 请求,该请求的数据包括需要同步的数据。如果需要同步的数据比较多,则会重复上述过程。DCSync 就是利用的这个原理,通过 Directory Replication Service(DRS) 服务的 GetNCChanges 接口向域控发起数据同步请求。
1.2. DCSync 渗透的由来
DCSync 是域渗透中经常会用到的技术,其被整合在了 [[…/…/…/C_OpenSource/【mimikatz】|【mimikatz】]] 中。在 DCSync 功能出现之前,要想获得域用户的哈希,需要登录域控制器,在域控制器上执行代码才能获得域用户的哈希。
2015 年 8 月,Benjamin Delpy(神器 Mimikatz 的作者)和 Vincent Le Toux 发布了新版本的 Mimikatz,新增加了 DCSync 功能。该功能可以模仿一个域控制器,从真实的域控制器中请求数据,例如用户的哈希。该功能最大的特点就是不用登陆域控制器,即可远程通过域数据同步复制的方式获得域控制器上的的数据。不要尝试在公司的域内执行这种操作,除了权限问题,还有一些比较常见的防护策略,详见后文检测与防护相关。
注意:DCSync 攻击的对象如果是只读域控制器 (RODC),则会失效,因为 RODC 是不能参与复制同步数据到其他 DC 的。
在默认情况下,只有 Administrators、Domain Controllers 和 Enterprise Domain Admins 组内的用户有权限使用 DCSync,但我们可以对域内普通用户添加 ACL (Access Control List) 实现普通用户也能调用 DCSync 功能。
渗透相关文章:
2. 利用 DCSync 获取 Hash
利用条件:
获得以下任一用户的权限:
- Administrators 组内的用户
- Domain Admins 组内的用户
- Enterprise Admins 组内的用户
- 域控制器的计算机帐户
利用原理:
- 利用 DRS(Directory Replication Service)协议通过 IDL_DRSGetNCChanges 从域控制器复制用户凭据
参考资料:
实现代码:
- https://github.com/gentilkiwi/mimikatz/blob/master/mimikatz/modules/lsadump/kuhl_m_lsadump_dc.c#L27
利用方法:
2.1. 使用 mimikatz
导出域内所有用户的 hash:
1 |
|
导出域内 administrator 帐户的 hash:
1 |
|
2.2. powershell 实现
https://gist.github.com/monoxgas/9d238accd969550136db
通过 Invoke-ReflectivePEinjection 调用 mimikatz.dll 中的 dcsync 功能
导出域内所有用户的 hash:
1 |
|
导出域内 administrator 帐户的 hash:
1 |
|
这里可以扩展的知识点包括: #pass-the-hash #pass-the-key
3. 利用 DCSync 在域内维持权限
参考文章:
利用条件:
获得以下任一用户的权限:
- Domain Admins 组内的用户
- Enterprise Admins 组内的用户
利用原理:
向域内的一个普通用户添加如下三条 ACE(Access Control Entries):
- DS-Replication-Get-Changes(GUID: 1131f6aa-9c07-11d1-f79f-00c04fc2dcd2)
- DS-Replication-Get-Changes-All(GUID: 1131f6ad-9c07-11d1-f79f-00c04fc2dcd2)
- DS-Replication-Get-Changes(GUID: 89e95b76-444d-4c62-991a-0facbeda640c)
该用户即可获得利用 DCSync 导出域内所有用户 hash 的权限
实现代码:
https://github.com/PowerShellMafia/PowerSploit/blob/dev/Recon/PowerView.ps1#L8270
利用方法:
添加 ACE 的命令如下:
1 |
|
补充:
删除 ACE 的命令:
1 |
|
注:
关于更多 ACL 的内容可参考之前的文章:《渗透技巧——Windows 下的 Access Control List》
使用域用户 test1 调用 DCSync 的方法如下:
3.1. 在域内一台登录了 test1 用户的主机上面,直接使用 mimikatz 的 DCSync 功能
1 |
|
3.2. 使用 runas 实现登录 test1 用户,再使用 DCSync
(1)弹出 cmd
1 |
|
弹出的 cmd 下执行如下命令:
1 |
|
(2)不弹框实现
1 |
|
1.bat 的内容如下:
1 |
|
注:
同类的工具还有 lsrunas、lsrunase 和 CPAU
3.3. 使用 powershell 实现登录 test1 用户,再使用 DCSync
(1)弹出 cmd
1 |
|
弹出的 cmd 下执行如下命令:
1 |
|
(2)不弹框实现
1 |
|
1.bat 的内容如下:
1 |
|
注:
使用 wmic 在本机实现登录用户 test1 会失败,错误如下:
1 |
|
4. 自动化检测 DCSync 以及 DCSync 后门的方法
4.1. DCSync 后门
具有高权限但不在高权限组的用户被称之为 Shadow Admin,例如 0x03 中的域用户 test1,仅通过查询高权限组的成员无法发现域内的 Shadow Admin
检测原理:
枚举 Active Directory 中所有用户的 ACL,标记出特权帐户
实现代码:
https://github.com/cyberark/ACLight
利用条件:
- Powershell v3.0
- 域内普通用户权限
检测方法:
执行项目中的 Execute-ACLight2.bat
生成三个文件:
- Privileged Accounts - Layers Analysis.txt
- Privileged Accounts Permissions - Final Report.csv
- Privileged Accounts Permissions - Irregular Accounts.csv
文件中会显示出所有特权帐户
经测试,ACLight 能够检测出被添加 DCSync 权限的用户 test1
4.2. DCSync 检测
相关文章
- Detecting DCSync - by Brian O’Hara - 阅力值 ⭐⭐⭐
整理了一些可行的方案,如下所示:
- 通过 IDS/IPS 检测 RPC/DCE 流量,以及专门针对
IDL_DRSGetNCChanges
接口流量的检测 - 通过事件日志进行检测。具体操作可以看文章内容,主要是通过开启审计目录服务访问策略来生成系统事件(事件 ID :4662)。
- 使用 SIEM(Security Information and event management, SIEM, 信息安全和事件管理)。
- DCSync attacks defined - 阅力值 ⭐
通过权限控制哪些用户可以进行 DCSync 操作。 - DCSync Attacks - Definition, Examples, & Detection - ExtraHop - 阅力值 ⭐⭐