Wireshark RDP 资源

作者:Sec-Labs | 发布时间:

项目地址

https://github.com/awakecoding/wireshark-rdp

Wireshark RDP 资源

寻找一种在 Wireshark 中捕获和检查 RDP 流量的方法?你来对地方了!

SSLKEYLOGFILE

许多应用程序,包括浏览器,支持使用 SSLKEYLOGFILE 环境变量和指向 TLS 预主密钥转储的文本文件路径。这种格式 受 Wireshark 支持,不需要导出服务器私钥。

要配置 Wireshark 使用特定的 TLS 密钥日志文件,打开首选项对话框(编辑 -> 首选项),在协议下的TLS部分中导航,然后更改(Pre)-Master-Secret log filename字段:

 

ad1a1b7183103857

SChannel

这种技术涉及连接到 lsass.exe,以便从 SChannel 转储 TLS 预主密钥到 Wireshark 支持的 SSLKEYLOGFILE 格式中。这绝对是最简单的方法,因此完全值得尝试,但应仅在可以禁用安全功能的测试环境中使用。

使用一个已提权的 PowerShell 终端,按照以下说明进行操作:

禁用 LSA 扩展保护,然后重新启动机器:

Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Lsa' -Name 'RunAsPPL' -Value 0

安装 PSDetour

Install-Module -Name PSDetour -Scope AllUsers -Force

运行 tls-lsa-dump.ps1:

.\tls-lsa-dump.ps1

默认情况下,脚本将使用 C:\Windows\Temp\tls-lsa.log 作为 SSLKEYLOGFILE。确保 Wireshark 正确配置以使用它,然后捕获第一个 RDP 连接以查看是否起作用!

Wireshark问题

以为就这样结束了?还没那么快!

RDP流量显示为'TPKT Continuation'

Wireshark默认将TCP/3389与TPKT解析器关联起来,这适用于在TLS握手之前发生的X.224连接请求/确认数据包。

由于某种原因,TPKT解析器经常无法将TLS数据包传递给TLS解析器,导致'TPKT Continuation'问题。当出现这种情况时,右键单击其中一个RDP数据包,然后选择解码为...

 

ad1a1b7183104039

 

在Wireshark的解码为..对话框中,将默认或当前解析器更改为TLS,然后点击确定:

 

ad1a1b7183104053

 

通过强制整个TCP连接使用TLS解析器,X.224数据包将显示为'忽略的未知记录',但现在您应该能够看到TLS握手,希望能够看到一些解密的RDP数据包!

 

ad1a1b7183104106

 

为了更清晰地查看RDP流量而无需显示TCP和TLS数据包,请将"rdp"添加到当前的Wireshark过滤器中。

 

ad1a1b7183104115

降噪处理

一些RDP功能可能会使数据包捕获变得混乱且更难分析,一些Windows功能可能会创建不必要的背景噪音,需要更高级的过滤才能仅保留相关流量。

RDP UDP传输

除非您打算处理RDP UDP协议本身,否则强烈建议禁用RDP UDP以获取单个干净的RDP TCP连接:

Set-ItemProperty -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services\Client' -Name 'fClientDisableUDP' -Value 1

即使在防火墙中阻止了RDP UDP流量,仍会从主要的RDP TCP连接中获取一些来自RDP多传输扩展的噪音。

带宽自动检测

在RDP连接的开始阶段,带宽自动检测非常吵闹 - 不惜一切代价禁用它在您的.RDP文件中:

connection type:i:6
networkautodetect:i:0
bandwidthautodetect:i:0

网络自动检测是连接类型 7(自动检测),带宽自动检测将在此时生效。这就是为什么通过设置明确的网络类型(6代表局域网)并禁用网络和带宽自动检测来完全禁用该功能的最佳方法。如果您感到困惑,您并不孤单。

批量数据压缩

RDP的批量数据压缩在大多数情况下都很好,但如果您想检查数据包,则需要禁用压缩。在您的.RDP文件中添加compression:i:0来禁用压缩:

compression:i:0

Windows SmartScreen

如果您同时检查RDP连接和HTTP流量(例如Azure AD、Azure虚拟桌面、RD Gateway等),则可以通过禁用SmartScreen来消除一些背景噪音:

Set-ItemProperty -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\System' -Name 'EnableSmartScreen' -Type DWORD -Value 0

不要忘记关闭未使用的浏览器,这样Windows应该会安静下来!

FreeRDP

最新版本的FreeRDP接受SSKEYLOGFILE作为命令行参数:

/tls:secrets-file:</path/to/freerdp-tls.keys>

建议从源代码构建FreeRDP,因为Linux发行版中的预编译版本可能不具备此选项。

IronRDP

IronRDP桌面客户端接受SSKEYLOGFILE环境变量:

$Env:SSLKEYLOGFILE="C:\path\to\ironrdp-tls.keys"

IronRDP目前仍在积极开发中,因此请经常检查更新!

确保您已经正确设置了Wireshark,使用RDP客户端使用的TLS预主密钥文件来捕获流量。开始捕获,启动连接,然后停止捕获。应用一个简单的过滤器,例如tcp.port == 3389,然后右键单击任何RDP数据包,选择Follow -> TCP Stream

 

ad1a1b7183104703

 

现在,Wireshark应该只显示一个带有解密的TLS流量的RDP TCP连接,并且所有不相关的流量都被删除。使用File -> Export Specified Packets..导出过滤后的捕获。在导出对话框中,选择Displayed而不是Captured,并将捕获保存为新的pcapng格式,而不是旧的pcap格式(非常重要!)。

接下来,使用File -> Export TLS Session Keys导出第二个文件,使用与.pcapng文件名相匹配的.keys扩展名,以便您可以轻松地记住哪些文件配对(rdp-test.pcapng + rdp-test.keys)。

$CaptureName = "rdp-test" # 更改此处
$Env:PATH += ";$Env:ProgramFiles\Wireshark"
& editcap --inject-secrets "tls,${CaptureName}.keys" "${CaptureName}.pcapng" "${CaptureName}-tls.pcapng"
@("${CaptureName}.pcapng", "${CaptureName}.keys") | Remove-Item
Move-Item "${CaptureName}-tls.pcapng" "${CaptureName}.pcapng"

最后一步是将TLS会话密钥嵌入到pcapng文件中,以便可以轻松地与未显式配置Wireshark加载特定TLS预主密钥文件的其他人共享。关闭Wireshark,然后打开PowerShell,并切换到包含文件的目录。

使用以下代码片段调用editcap命令行工具将TLS会话密钥嵌入到捕获文件中,并仅保留可与其他人轻松共享的最终捕获文件:

标签:工具分享, 流量分析, Wireshark