Wireshark 解密 RDP 流量

向劳动人民致敬!

Wireshark Tutorial: Decrypting RDP Traffic

近年来,攻击者利用远程桌面协议(RDP)访问不安全的服务器和企业网络。自2017年以来,RDP已成为使用勒索软件进行恶意软件攻击的重要载体。安全专业人员通过编写签名来检测RDP漏洞并防止攻击,将注意力越来越集中在此协议上。

作为Microsoft的专有协议,RDP支持多种加密网络流量的操作模式。不幸的是,由于RDP内容被隐藏,因此这种加密使写入RDP签名变得困难。

幸运的是,我们可以建立一个提供密钥文件的测试环境,并且可以使用该密钥解密Wireshark中RDP流量的数据包捕获(pcap)。

此文章演示了如何准备环境,获取解密密钥并使用它来解密RDP流量。

要求

为了从本教程中获得最大价值,必须进行以下操作:

运行两个Windows主机(例如VirtualBox或VMware)的虚拟环境。
了解如何设置和使用RDP。
RDP客户端。在本教程中,我们使用运行Windows 10 Professional的主机。
RDP服务器。这可以是另一个启用RDP的Windows主机,也可以是运行FreeRDP的非Windows主机。
一种记录这两个主机之间的网络流量的方法。在虚拟环境中最容易做到这一点。
Wireshark 3.0版或更高版本。
网络流量基础知识。

整体流程

整个过程遵循七个常规步骤:

步骤1:设置一个虚拟环境,其中包含两台主机,其中一台充当RDP客户端,一台充当RDP服务器。

步骤2:从RDP客户端删除前向保密密码。

步骤3:获取RDP服务器的专用加密密钥。

步骤4:捕获RDP服务器和Windows客户端之间的RDP通信。

步骤5:在Wireshark中打开pcap。

步骤6:将密钥加载到Wireshark中。

步骤7:检查RDP数据。

步骤1:设置虚拟环境

用于这种类型分析的两个最常见的虚拟环境是VirtualBox或Windows和Linux的VMware Workstation。 VMWare Fusion用于macOS。 VirtualBox是免费的,而VMware是商业产品。

本教程不涉及在虚拟环境中设置虚拟机(VM)。本教程使用的实验室的基本结构如下图1所示。
图1图1.本教程使用的实验室设置。

我们的实验室环境包含两个Windows 10主机。一台主机充当RDP客户端,另一台主机充当RDP服务器。我们从虚拟LAN记录了​​这两个主机之间的RDP会话的网络流量。

步骤2:从RDP客户端中删除转发保密密码

一些加密密码提供前向保密性,也称为完美前向保密性。这些类型的密码会为SSL / TLS连接创建多个会话密钥。使用前向保密性,我们无法使用来自RDP服务器的单个私有加密密钥来解密SSL / TLS通信。因此,我们必须删除支持RDP客户端上的前向保密性的配置选项。

在本教程中,我们的RDP客户端是运行Windows 10 Pro的主机。该主机具有内置的RDP客户端。

Microsoft已在文章“管理传输层安全性(TLS)”和“优先处理Schannel密码套件”中发布了有关删除支持前向保密性的配置选项的详细信息。以下是我们使用的分步过程。

以管理员身份打开组策略管理控制台gpedit.msc,如图2所示。

单击“以管理员身份运行”,以管理员身份打开组策略管理控制台gpedit.msc,如下所示。
图2.以管理员身份在Windows 10 Pro中运行组策略编辑器。

在控制台中,使用以下菜单路径:

计算机配置。
管理模板。
网络。
SSL配置设置。

下面的图3显示了如何查找SSL配置设置。

在这里插入图片描述图3.进入SSL配置设置。屏幕快照中的黑色大箭头指示SSL配置设置在文件系统中的位置。

在“ SSL配置设置”下,双击“ SSL Cipher Suite Order”条目,如下图4所示。
在这里插入图片描述图4.进入SSL Cipher Suite订单。

在SSL Cipher Suite Order下,单击Enabled选项,如图5所示。

在这里插入图片描述图5.启用SSL密码套件顺序。

接下来,双击密码列表,然后选择整个列表,如图6所示。
下一步是选择整个密码列表,如屏幕截图所示。图6.选择密码列表。

如图所示,复制密码列表图7.复制密码列表。

将此密码列表复制到文本编辑器(如记事本)中。使用Diffie-Hellman临时(ECDHE)或数字签名算法(ECDSA)加密,删除所有支持椭圆曲线加密的密码。这些应该是名称中带有ECDHE和/或ECDSA的任何条目。在图8所示的示例中,这些密码都按顺序放置,因此很容易从文本中删除它们。
通过删除名称中带有ECDHE和/或ECDHA的所有条目,删除支持椭圆曲线密码学的密码。在我们的示例中,密码是顺序放置的,因此很容易删除。
在这里插入图片描述图8.删除ECDHE和ECDSA的条目。

下面表1列出了来自图8的更新密码列表。

TLS_AES_256_GCM_SHA384,TLS_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_3DES_EDE_CBC_SHA,TLS_RSA_WITH_NULL_SHA256,TLS_RSA_WITH_NULL_SHA,TLS_PSK_WITH_AES_256_GCM_SHA384,TLS_PSK_WITH_AES_128_GCM_SHA256,TLS_PSK_WITH_AES_256_CBC_SHA384,TLS_PSK_WITH_AES_128_CBC_SHA256,TLS_PSK_WITH_NULL_SHA384,TLS_PSK_WITH_NULL_SHA256

表1.删除前向保密密码后的更新列表。

将更新的密码列表粘贴回SSL Cipher Suites字段,确保覆盖原始列表。单击“应用”按钮,然后单击“确定”关闭窗口。现在,您已经更新了列表,并且可以关闭组策略编辑器。

完成此步骤后,我们必须获取RDP服务器的私钥。

步骤3:获取RDP服务器的私钥

FreeRDP是用作RDP服务器的一种选择。您可以从该GitHub存储库中获取FreeRDP以及构建说明。确保在创建服务器时设置WITH_SERVER = ON标志。构建服务器后,您必须为其提供私钥,或使用FreeRDP随附的私钥。

对于本教程中的RDP服务器,我们使用了另一台运行Windows 10 Pro的主机。然后,我们从主机的操作系统中提取了私钥。

为了确保第二台Windows主机充当RDP服务器,我们启用了RDP。要在运行Windows 10 Pro的主机上启用RDP,请从“开始”菜单转到Windows设置,然后选择“系统”图标,如图9所示。

为了确保我们的第二个Windows主机充当RDP服务器,我们通过选择“系统”图标来启用RDP,如下所示。
在这里插入图片描述图9.进入Windows系统设置。

在系统设置下,选择远程桌面,然后单击启用远程桌面的开关,如图10所示。
在这里插入图片描述图10.在Windows中启用RDP 10。黑色大箭头显示在何处选择远程桌面以及在何处单击启用远程桌面的开关。

在将第二台Windows主机设置为RDP服务器之后,我们从其操作系统中提取了私钥。

要提取服务器密钥,我们可以使用“越狱”或“ Mimikatz”。我们选择了越狱。

Jailbreak 是iSECPartners的工具,可以导出服务器的RDP证书。从导出的证书中,我们可以提取私钥。

要使用Jailbreak ,我们从新建立的RDP服务器上的GitHub存储库中下载了以下Jailbreak binaires:

EasyHook64.dll
jailbreak64.exe
jailbreakhook64.dll
jbstore2_64.exe

注意:以上文件是在2021年3月4日下载的Windows 10 Pro 64位主机上使用的。GitHub页面的屏幕截图如下图11所示。
在这里插入图片描述图11. Jailbreak binaires文件的GitHub页面。

下载 Jailbreak binaires后,我们以管理员权限打开了一个命令提示符,如图12所示。
在这里插入图片描述图12.以管理员身份打开命令提示符。

在命令提示符下,我们进入了包含下载的越狱二进制文件的目录。我们从该目录运行以下命令:

jailbreak64.exe%WINDIR%\ system32 \ mmc.exe%WINDIR%\ system32 \ certlm.msc -64

如果运行的是32位版本的Windows,则将使用:

jailbreak32.exe%WINDIR%\ system32 \ mmc.exe%WINDIR%\ system32 \ certlm.msc -32

有关在充当RDP服务器的Windows主机上运行64位命令的示例,请参见下面的图13。
在这里插入图片描述图13.从命令提示符运行Jailbreak 屏幕截图显示了在充当RDP服务器的Windows主机上运行64位命令的示例。

此命令为我们的本地计算机打开了证书管理器。在左列中,我们展开了远程桌面,然后转到了Certificates文件夹。这显示了一个证书。如果证书不止一个,我们将选择一个具有最近失效日期的证书。我们右键单击证书,选择“所有任务”,然后使用“导出”,如图14所示。
在这里插入图片描述图14.导出RDP证书。

导出证书时,我们确保选择导出私钥的选项,如下图15所示。
在这里插入图片描述屏幕截图显示为:“导出私钥:您可以选择导出带有证书的私钥。私钥受密码保护。如果要导出带有证书的私钥,则必须在后面的页面中输入密码。您要导出带有证书的私钥吗?”黑色大箭头显示了要确保与证书一起导出私钥的选择内容。
图15.确保私钥与证书一起导出。

对于主机,我们只能将证书导出为PKCS#12(.PFX)文件,如图16所示。
在这里插入图片描述对于本教程中用于在Wireshark中解密RDP流量的主机,我们只能将证书导出为PKCS#12(.PFX)文件,如图所示。
图16.仅可以将证书导出为.pfx文件。

如下图17所示,证书必须具有密码。幸运的是,我们没有复杂性要求,因此我们使用单个字母作为密码。
在这里插入图片描述如图所示,证书必须具有密码。因为没有复杂性要求,所以我们使用单个字母作为密码。
图17.导出过程需要证书的密码。

最后,我们使用私钥导出了证书,如图18所示。
在这里插入图片描述如图所示,我们使用私钥导出了证书。
图18.完成我们的证书导出。

或者,我们可以使用Mimikatz而不是Jailbreak来提取服务器的证书。 GitHub上列出了使用Mimikatz获得RDP服务器证书的说明。

由于我们的证书是使用Jailbreak获得的,因此我们将其移至Linux主机并使用OpenSSL提取密钥。首先,我们使用以下OpenSSL命令提取PEM格式的密钥:

openssl pkcs12 -in server_certificate.pfx -nocerts -out server_key.pem -nodes

要从密钥中删除密码短语,我们还使用了以下命令:

openssl rsa -in server_key.pem -out server.key

这为我们提供了RDP服务器的私钥,如下图19所示。

在这里插入图片描述黑色箭头和标签“私有密钥”指示从证书中提取私有服务器密钥的位置。
图19.从证书中提取的专用服务器密钥。

在使用私有服务器密钥之前,我们需要记录两个Windows主机之间的RDP会话并将其另存为pcap。

步骤4:捕获RDP流量

在两个Windows主机处于同一虚拟环境中的情况下,我们可以使用dumpcap,tcpdump或Wireshark等工具本身使用混杂模式在VLAN中记录网络流量。录制开始后,我们的Windows客户端使用RDP登录到另一台充当RDP服务器的Windows主机。服务器的主机名是DESKTOP-USER1PC。
在这里插入图片描述屏幕截图显示了我们的Windows客户端如何使用RDP登录到另一台充当RDP服务器的Windows主机。
图20.使用远程桌面连接工具登录到我们的RDP服务器。

记录pcap时,我们登录了DESKTOP-USER1PC并执行了一些基本任务,例如打开文档和Web浏览。
在这里插入图片描述记录pcap时,我们登录了DESKTOP-USER1PC并执行了一些基本任务,例如打开文档和浏览网页。
图21.通过RDP执行一些常见的桌面任务。

大约一分钟后,我们注销了RDP并停止记录来自VLAN的网络流量。

步骤5:在Wireshark中打开pcap

我们在Wireshark中打开了RDP会话的pcap。在Wireshark显示过滤器中的rdp上进行过滤时,由于RDP流量已加密,因此看不到任何结果。图22显示了在pcap中过滤RDP时看到的空白列显示。
在这里插入图片描述由于RDP流量已加密,因此在pcap中过滤RDP时,我们将看到空白列显示,如图所示。
图22.由于RDP加密通信,过滤RDP信息,但没有结果。

但是,当我们使用专用服务器密钥在Wireshark中解密RDP流量时,结果看起来大不相同。

步骤6:将密钥加载到Wireshark

在我们记录的pcap中,RDP服务器DESKTOP-USER1PC的IP地址为10.3.4.138,RDP通信通过TCP端口3389进行。我们需要此信息来正确解密Wireshark中的RDP通信。

在Wireshark中,我们使用了Preferences窗口并扩展了Protocols部分,如下图23所示。
在这里插入图片描述用于在Wires中解密RDP流量拜托,我们需要IP地址和端口信息。在Wireshark中,我们使用“首选项”窗口并展开了“协议”部分,如图所示。
图23.进入Wireshark的“偏好设置”菜单的“协议”部分。

对于Wireshark 3.x,请使用TLS条目。如果使用的是Wireshark 2.x,请使用SSL条目。对于此部分,应该有一个按钮来编辑RSA密钥列表。我们单击了按钮,并添加了RDP服务器的IP地址,RDP端口(3389)和私钥文件的位置。我们的示例如下图24所示。
在这里插入图片描述我们单击了按钮,并添加了RDP服务器的IP地址,RDP端口(3389)和私钥文件的位置。
图24.转到TLS部分,并将私钥添加到RSA密钥列表中。

设置Wireshark来解密RDP流量后,在查看pcap时我们得到了更好的结果。

步骤7:检查RDP数据

加载密钥后,过滤RDP时列显示不再为空白。我们得到了几个结果,如下图25所示。
在这里插入图片描述加载密钥后,解密RDP流量成为可能。屏幕截图显示,在过滤RDP时,我们的列显示不再为空白。
图25.将私钥加载到Wireshark后,查看相同的RDP活动。

对于编写签名以发现RDP漏洞和攻击的安全专业人员来说,图25上面显示的信息类型对其工作至关重要。

结论

该博客回顾了如何建立一种环境来解密来自RDP会话的流量。这在具有两个运行Windows 10 Professional的主机的虚拟LAN中最容易做到。确保客户端不使用任何前向保密密码后,我们从充当RDP服务器的Windows主机中提取了私钥。然后,我们轻松记录了网络流量的数据。会话结束后,我们能够使用服务器的私钥解密RDP流量。

这种类型的环境可以帮助安全专业人员编写签名来检测RDP漏洞和攻击。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GuiltyFet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值