译文 | 捕获 RDP NetNTLMv2 哈希:攻击详细信息和操作指南
2022-2-23 09:0:0 Author: mp.weixin.qq.com(查看原文) 阅读量:20 收藏

开卷有益 · 不求甚解


前言

远程桌面协议 (RDP) 越来越受到网络安全的关注。勒索软件集团将其作为攻击公共和私营部门的弱点,在 2019 年造成 75 亿美元的损失。在 2020 年第一季度和第四季度之间,RDP 攻击增长了 768%。[网络安全和基础设施安全局等实体在其2020 年勒索软件指南](https://www.cisa.gov/sites/default/files/publications/CISA_MS-ISAC_Ransomware Guide_S508C_.pdf) 中将 RDP 确定为保护的重点。另一方面,渗透测试团队定期使用 RDP 作为一种有效工具,在网络内部进行横向移动、劫持会话和捕获哈希等。

GoSecure Titan Labs 团队看到了进一步探索哈希捕获主题的机会(这是任何进攻团队的必备工具)。本博客将研究 RDP 安全模式、它们的工作原理以及如何使用PyRDP(GoSecure 创建的库)通过 RDP 协议将其付诸行动以捕获 NetNTLMv2 哈希。这项工作始于一年一度的为期一个月的Hacktoberfest 期间的一个项目,该项目导致 PyRDP 的多项改进。在这些改进中,我们让用户更容易捕获 NetNTLMv2 哈希。

一堆生锈的旧钥匙

西蒙·格雷格( Simon Greig )的“古董钥匙” CC BY 2.0

入门

我们将介绍一种用于攻击性用例的技术,通过在 NTLMSSP 身份验证期间捕获NetNTLMv2哈希来访问远程 RDP机器。为了将其付诸实践,我们将利用PyRDP在RDP 支持的两种主要身份验证场景中执行这些哈希的捕获 :启用网络级别身份验证 ( NLA )和不启用NLA 。为了更多地了解这两种情况,让我们 首先详细介绍 RDP 协议中可用的安全模式。

RDP 安全模式

RDP 是一种通常用于通过 TCP/IP 使用终端客户端和服务器来远程管理计算机的协议。目前,它提供了不同类型的安全模式来加密客户端和服务器之间的通信:

  • RDP 标准安全性:根据客户端的支持和服务器选择的加密级别(低、客户端兼容、高、FIPS)对所有流量进行对称加密。这种方法在“中间怪物”攻击的情况下是最不安全的,因为服务器控制加密方法并可以决定是否不需要加密,从而完全禁用它。
  • RDP 增强安全性:实施外部协议以提供加密和安全机制。其中两种机制是:自 RDP 5.2 以来的 TLS(传输层安全性)和 CredSSP,除了使用 TLS 外,它还启用了 NLA(网络级身份验证),自 RDP 6 以来。具有 TLS 的 RDP 还警告用户存在怪物如果服务器的证书是自签名的或不受信任的,则可能会发生-the-middle 攻击,但它不会阻止客户端接受风险。

当 RDP使用NLA 的增强安全性时,用于委派合适的身份验证方法的协议是凭据安全支持提供程序 ( CredSSP )。这些授权的身份验证方法是 Kerberos 或 NTLMSSP,后者是用于捕获NetNTLMv2散列的身份验证方法,这些散列用于客户端和服务器之间的质询/身份验证消息。

通过网络级别的身份验证剖析身份验证

为了理解 NetNTLMv2 哈希捕获,本节将详细描述通过 NLA 进行的身份验证及其结构。为了简化这个过程,我们将把它分成四个阶段:

  1. RDP 客户端和服务器之间建立了 TLS 连接。
  2. CredSSP 的SPNEGO用于客户端和服务器来决定将使用哪种相互身份验证协议:Kerberos 或 NTLMSSP。
  3. 在这一步中,服务器的公钥被发送以进行验证并探测其真实性。这样做是为了避免中间怪物 (MITM) 攻击。
  4. 一旦通过 TLS 和 SPNEGO 保护连接,客户端就会发送其凭据以进行身份验证。

我们的注意力将集中在最后一步,因为在使用 NTLMSSP 协议的情况下,客户端将以 NTLM 消息的形式发送凭据的散列版本并将被拦截。这些消息是 ASN.1 编码的TSRequest结构,身份验证数据按以下顺序发送:

首先,从客户端发送一个 NEGOTIATION 消息以启动 NTLM 身份验证,该消息由来自服务器的带有“挑战”的 CHALLENGE 消息进行回答。在这个阶段,挑战是包含随机数(用于防止重放攻击的随机字节序列)的 64 位值。然后,客户端使用 AUTHENTICATION 消息响应挑战,该消息包含完成身份验证过程所需的凭据。这是我们想要达到的阶段,以从客户端提取质询响应,以NTLMv2_RESPONSE结构的形式,中继或破解它。

NTLMv2_RESPONSE 结构易于理解和解析,因为它只包含一个 16 字节的响应(证明)和可变大小的客户端质询。客户端的挑战可以概括为使用从安全帐户管理器 (SAM) 或 Active Directory (AD) 获得的 NT 哈希构建的 LMv2 和 NTv2 哈希,并使用HMAC-MD5将其与用户名和域名一起哈希. 所有这些都形成了 NetNTLMv2 哈希,这是密码破解工具(如John The Ripper 或 hashcat )所需要的。

使用PyRDP 捕获NetNTLMv2哈希

PyRDP是我们开发的一个库,用于执行中间怪物攻击并试验 RDP 协议。在 MITM 模式下,即使 PyRDP 没有真实服务器的证书和私钥并且 NLA 由服务器强制执行,PyRDP 也能够拦截 NetNTLMv2 哈希。在本节中,我们将探索和描述可以执行哈希捕获的两种场景。

在第一种情况下,我们拥有受到攻击的服务器的证书和私钥。在这种情况下,RDP 客户端和服务器之间的交互将在 CredSSP 支持下进行,PyRDP 将双向传输 NTLMSSP 消息。NetNTLMv2 捕获在 RDP 服务器发送 CHALLENGE 消息(此处 PyRDP 从消息中提取服务器质询值)后完成,客户端使用 PyRDP 记录的哈希值进行响应,然后发送到 RDP 服务器以继续身份验证过程。

我们最近实现了第二种情况:NLA由服务器强制执行,但我们没有服务器的证书和私钥。在这种情况下,PyRDP将切断与原始服务器的连接并继续进行客户端的连接和 NTLMSSP 身份验证,以便执行与之前所示相同的 NetNTLMv2 提取。诀窍:PyRDP在收到客户端的 NEGOTIATION 消息后会生成 CHALLENGE消息并发送。这种方式PyRDP 控制挑战值,稍后将收到 AUTHENTICATION 消息。

为了说明这种攻击,当PyRDP在未启用 NLA的情况下运行(默认值,请参阅启用 NLA 攻击的标志)并且客户端尝试连接到强制执行它的服务器时,这就是哈希提取后日志的样子从 AUTHENTICATION 消息:--auth

[2021-11-10 22:52:11,394] - INFO - GLOBAL - pyrdp - MITM Server listening on 0.0.0.0:3389
[2021-11-10 22:52:22,167] - INFO - Karen105427 - pyrdp.mitm.connections.tcp - New client connected from 127.0.0.1:36936
[2021-11-10 22:52:22,167] - INFO - Karen105427 - pyrdp.mitm.connections.x224 - No cookie for this connection
[2021-11-10 22:52:22,190] - INFO - Karen105427 - pyrdp.mitm.connections.tcp - Server connected
[2021-11-10 22:52:22,216] - INFO - Karen105427 - pyrdp.mitm.connections.x224 - Server requires CredSSP. Closing connection with server and attempting to catch NTML hashes.
[2021-11-10 22:52:28,243] - INFO - Karen105427 - pyrdp.mitm.connections.ntlmssp - NTLMSSP Negotiation
[2021-11-10 22:52:28,343] - INFO - Karen105427 - pyrdp.mitm.connections.ntlmssp - [!] NTLMSSP Hash: admin:::937f60a48cea8943:f298d601927699c77aab319e7de5b9ac:010100000000000000debca285d6d7015f3d313dc29e380c0000000002000a00570049004e004e00540001000a00570049004e004e00540004000a00570049004e004e00540003000a00570049004e004e00540005000a00570049004e004e00540006000400020000000a00100000000000000000000000000000000000090022005400450052004d005300520056002f006c006f00630061006c0068006f007300740000000000000000000000000000000000000000000000000000000000
[2021-11-10 22:52:28,444] - INFO - Karen105427 - pyrdp.mitm.connections.tcp - Client connection closed. Connection was closed cleanly.
[2021-11-10 22:52:28,448] - INFO - Karen105427 - pyrdp.mitm.connections.tcp - Connection report: report: 1.0, connectionTime: 6.277477025985718, totalInput: 0, totalOutput: 0, replayFilename: rdp_replay_20211110_22-52-22_166_Karen105427.pyrdp

请注意,在最后一种情况下,一旦提取哈希,PyRDP 和客户端之间的连接就会关闭,因为MITM进程无法完成服务器的连接,因为它受 NLA 保护。您可以 通过在我们的主分支之外运行PyRDP或使用最近的 docker容器来使用此新功能。此功能将成为我们即将发布的 1.2.0 版本的一部分。

结论

在本文中,我们展示了 RDP 连接期间 NetNTLMv2 捕获的工作原理以及 PyRDP 可用作实用的攻击工具。感谢Responder等其他项目探索了这种可能性以及 PyRDP 的极端可扩展性(和灵活性),这种技术更易于使用和实践。

译文申明

  • 文章来源为近期阅读文章,质量尚可的,大部分较新,但也可能有老文章。
  • 开卷有益,不求甚解,不需面面俱到,能学到一个小技巧就赚了。
  • 译文仅供参考,具体内容表达以及含义, 以原文为准 (译文来自自动翻译)
  • 如英文不错的,尽量阅读原文。(点击原文跳转)
  • 每日早读基本自动化发布(不定期删除),这是一项测试

最新动态: Follow Me

微信/微博:red4blue

公众号/知乎:blueteams



文章来源: http://mp.weixin.qq.com/s?__biz=MzU0MDcyMTMxOQ==&mid=2247485538&idx=3&sn=6db56b0f7feadf1908b127deb49d613f&chksm=fb35a1aacc4228bcbfba07c3d4b23dd6ef7a6a8958a186f8f3f25a86339d3364abf4e4e49e7a#rd
如有侵权请联系:admin#unsafe.sh