RDP抓包分析方法

949 阅读5分钟

工欲善其事,必先利其器。对RDP协议最好的研究学习方法就是通过抓包的方式,对着文档一步一步分析RDP的通信过程。本文将介绍常见的RDP客户端和服务的抓包解密方法。

抓包环境

  • RDP 服务器(Windows Server)虚拟机一台
  • RDP 客户端
    • mstsc(windows)虚拟机一台
    • freerdp(ubuntu)虚拟机一台

Windows RDP服务器配置

配置 RDS 服务器

www.server-world.info/en/note?os=…

导出 RDP 服务端私钥

这里使用 jailbreak 来导出证书, 下载并在命令行中切换到 binaries 目录, 以管理员权限执行以下命令

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

执行完命令后会弹出以下窗口

按照上面的步骤操作就可以导出 RDP 证书

将证书拷贝到 ubuntu 系统中执行以下命令转化证书格式

禁用 UDP 协议

安装Wireshark

www.wireshark.org/download.ht…

使用 nmap 扫描RDP服务端支持的密码学套件

由于前向保密的特殊性, 即使有私钥也没有办法完全解密用该密码学套件加密的通信流量。

这里包含DHE或ECDHE的可能就是支持前向加密的密码学套件,需要在客户端中指定密码学套件。

# ubuntu上安装 nmap
sudo apt install -y nmap
# 扫描 RDP 端口
$ nmap -p 3389 --script ssl-enum-ciphers 10.15.132.89

Starting Nmap 7.80 ( https://nmap.org ) at 2023-05-18 10:25 CST
Nmap scan report for 10.15.132.89
Host is up (0.022s latency).

PORT     STATE SERVICE
3389/tcp open  ms-wbt-server
| ssl-enum-ciphers: 
|   TLSv1.0: 
|     ciphers: 
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (ecdh_x25519) - A
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (ecdh_x25519) - A
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 2048) - A
|       TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
|       TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - C
|       TLS_RSA_WITH_RC4_128_MD5 (rsa 2048) - C
|     compressors: 
|       NULL
|     cipher preference: server
|     warnings: 
|       64-bit block cipher 3DES vulnerable to SWEET32 attack
|       Broken cipher RC4 is deprecated by RFC 7465
|       Ciphersuite uses MD5 for message integrity
|   TLSv1.1: 
|     ciphers: 
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (ecdh_x25519) - A
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (ecdh_x25519) - A
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 2048) - A
|       TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
|       TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - C
|       TLS_RSA_WITH_RC4_128_MD5 (rsa 2048) - C
|     compressors: 
|       NULL
|     cipher preference: server
|     warnings: 
|       64-bit block cipher 3DES vulnerable to SWEET32 attack
|       Broken cipher RC4 is deprecated by RFC 7465
|       Ciphersuite uses MD5 for message integrity
|   TLSv1.2: 
|     ciphers: 
|       TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (ecdh_x25519) - A
|       TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (ecdh_x25519) - A
|       TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 2048) - A
|       TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (dh 2048) - A
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (ecdh_x25519) - A
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (ecdh_x25519) - A
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (ecdh_x25519) - A
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (ecdh_x25519) - A
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 2048) - A
|       TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) - A
|       TLS_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048) - A
|       TLS_RSA_WITH_AES_256_CBC_SHA256 (rsa 2048) - A
|       TLS_RSA_WITH_AES_128_CBC_SHA256 (rsa 2048) - A
|       TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
|       TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - C
|       TLS_RSA_WITH_RC4_128_MD5 (rsa 2048) - C
|     compressors: 
|       NULL
|     cipher preference: server
|     warnings: 
|       64-bit block cipher 3DES vulnerable to SWEET32 attack
|       Broken cipher RC4 is deprecated by RFC 7465
|       Ciphersuite uses MD5 for message integrity
|_  least strength: C

Nmap done: 1 IP address (1 host up) scanned in 3.14 seconds

XRDP证书

默认证书位置 /etc/xrdp/key.pem, 导出后可直接使用

MSTSC客户端设置

设置SSL密码学套件

打开组策略管理器

拷贝到文本编辑器中, 删除所有包含DHE或ECDHE的条目,覆盖原来的配置应用即可。

配置完后需要重启一下电脑

如果配置不成功可以直接尝试改成TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA

FreeRDP客户端设置

设置密码学套件

xfreerdp 添加以下命令行参数指定密码学套件

/sec:nla /tls-ciphers:ciphers=AES256-SHA:AES128-SHA

调整 RDP 连接参数, 让RDP 数据包更好分析

禁用带宽自动调整(可以简化 RDP 连接过程)

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

禁用批量数据压缩(提升 fast-path 数据包可读性)

compression:i:0

Wireshark配置

IP address 填写 RDP 服务端地址

参考文档

Wireshark for Pentester: Decrypting RDP Traffic - Hacking Articles

unit42.paloaltonetworks.com

GitHub - awakecoding/wireshark-rdp: Wireshark RDP resources

RDP 协议文档: [MS-RDPBCGR] [MS-RDPERP]