远程桌面协议 (RDP) 在网络安全领域发挥的作用越老越大。勒索软件组织将其作为攻击公共和私营部门的抓手,在 2019 年由远程桌面协议引起的攻击已经造成了 75 亿美元的损失。在 2020 年,RDP 攻击增长了 768%。网络安全与基础设施安全局(Cybersecurity & Infrastructure Security Agency)等机构在其2020年的《勒索软件指南》(Ransomware Guide)中将RDP列为需要保护的焦点。而在另一方面,渗透测试团队正在定期使用RDP作为在网络内部进行横向移动、劫持会话和捕获哈希值等的有效工具。
GoSecure Titan Labs 团队看到了进一步探索哈希捕获主题的机会,这是任何进攻团队的必备工具。本文将研究 RDP 安全模式、它们如何工作以及如何使用 PyRDP(GoSecure 创建的库)通过 RDP 协议将其付诸行动以捕获 NetNTLMv2 哈希。这一努力始于每年长达一个月的Hacktoberfest期间的一个项目,该项目导致了PyRDP的几项改进。在这些改进中,我们让用户更容易捕获NetNTLMv2哈希。
首先,我们将介绍一种用于攻击性用例的技术,通过在NTLMSSP身份验证期间捕获NetNTLMv2哈希值来获得对远程RDP设备的访问。为了将其付诸实践,我们将利用 PyRDP 在 RDP 支持的两个主要身份验证场景中执行这些哈希的捕获:启用网络级别身份验证 (NLA) 和不启用 NLA。为了更多地了解这两种场景,让我们从详细介绍 RDP 协议中可用的安全模式开始。
RDP 安全模式
RDP 是一种通常用于通过 TCP/IP 使用终端客户端和服务器来远程管理计算机的协议。目前,它提供了不同类型的安全模式来加密客户端和服务器之间的通信:
RDP 标准安全性:根据客户端的支持和服务器选择的加密级别(低、客户端兼容、高、FIPS)对所有流量进行对称加密。这种方法在中间人攻击攻击的情况下是最不安全的,因为服务器控制加密方法并可以决定是否不需要加密,从而完全禁用它。
RDP 增强安全性:通过外部协议提供加密和安全机制。其中两种机制是:自RDP 5.2以来的TLS(传输层安全)和CredSSP,自RDP 6以来,除了使用TLS外,它还支持NLA(网络级别认证)。带有TLS的RDP还警告用户,如果服务器的证书是自签名的或不受信任的,可能会发生中间人攻击,但它不会阻止客户端接受风险。
当 RDP 使用 NLA 的增强安全性时,用于委派合适的身份验证方法的协议是凭据安全支持提供程序 (CredSSP)。这些授权的身份验证方法是 Kerberos 或 NTLMSSP,后者是用于捕获 NetNTLMv2 哈希的身份验证方法,这些哈希用于客户端和服务器之间的质询/身份验证消息。
通过网络级身份验证剖析身份验证
为了理解 NetNTLMv2 哈希捕获,本节将详细描述通过 NLA 进行的身份验证及其结构。为了简化这个过程,我们将把它分成四个阶段:
1.RDP 客户端和服务器之间建立了 TLS 连接;
2.CredSSP 的 SPNEGO 为客户端和服务器执行,以决定将使用哪种相互身份验证协议:Kerberos 或 NTLMSSP;
3.在这一步中,将发送服务器的公钥进行验证,并探测其真实性。这样做是为了避免中间人攻击;
4.一旦通过 TLS 和 SPNEGO 保护连接,客户端就会发送其凭据以进行身份验证。
我们的注意力将集中在最后一步,因为在使用 NTLMSSP 协议的情况下,客户端将以 NTLM 消息的形式发送凭据的哈希版本并将被拦截。这些消息是 ASN.1 编码的 TSRequest 结构,身份验证数据按以下顺序发送:
首先,客户端发送一个NEGOTIATION消息来启动NTLM认证,服务器端发送一个CHALLENGE消息来回应这个质询。在这个阶段,质询是包含随机数(用于防止重放攻击的随机字节序列)的 64 位值。然后,客户端使用个身份验证消息来响应这个请求,该消息包含完成身份验证过程所需的凭据。这是我们希望从客户短中提取质询响应(以 NTLMv2_RESPONSE 结构的形式)并进行中继或破解的阶段。
NTLMv2_RESPONSE结构很容易理解和解析,因为它只包含16字节的响应和可变大小的客户端质询。客户端的质询可以概括为使用从安全帐户管理器 (SAM) 或 Active Directory (AD) 获得的 NT 哈希构建的 LMv2 和 NTv2 哈希,并使用HMAC-MD5对用户和域名进行哈希。所有这些都形成了NetNTLMv2哈希,这是密码破解工具如 John the Ripper 或 hashcat所需要的。
使用 PyRDP 捕获 NetNTLMv2 哈希
PyRDPi 是我们开发的一个库,用于执行中间人攻击并试验 RDP 协议。在中间人攻击模式下,PyRDP有能力拦截NetNTLMv2哈希,即使它没有实服务器的证书和私钥,并且NLA是由服务器强制执行的。在本节中,我们将探索和描述两种可以执行哈希捕获的场景。
在第一种场景中,我们拥有受攻击服务器的证书和私钥。在本例中,RDP客户端和服务器之间的交互将在CredSSP支持下进行,PyRDP将以两种方式传输NTLMSSP消息。NetNTLMv2捕获是在RDP服务器发送CHALLENGE消息之后完成的,PyRDP从消息中提取服务器的CHALLENGE值,客户端响应PyRDP记录的哈希值,然后发送给RDP服务器继续身份验证过程。
我们最近实现了第二个场景:NLA 由服务器强制执行,但我们没有服务器的证书和私钥。在这个场景中,PyRDP将切断与原始服务器的连接,并继续进行客户端连接和NTLMSSP身份验证,以便执行前面所示的相同的NetNTLMv2提取。PyRDP在接收到客户端的NEGOTIATION消息后将生成CHALLENGE消息并发送它。通过这种方式,PyRDP可以控制质询值,稍后将接收AUTHENTICATION消息。
为了说明这种攻击,当 PyRDP 在未启用 NLA 的情况下运行(默认值,请参见——auth标志启用NLA攻击),并且客户端试图连接到执行NLA攻击的服务器,然后从AUTHENTICATION消息的哈希提取之后,日志如下所示:
请注意,在最后一个场景中,一旦提取了哈希,PyRDP 和客户端之间的连接就会关闭,因为中间人攻击进程无法完成服务器的连接,因为它受到 NLA 的保护。
总结
在本文中,我们展示了在RDP连接期间如何捕获NetNTLMv2,以及PyRDP可以用作一种实用的攻击工具。
本文翻译自:https://www.gosecure.net/blog/2022/01/17/capturing-rdp-netntlmv2-hashes-attack-details-and-a-technical-how-to-guide/如若转载,请注明原文地址