GoSecure/pyrdp项目中的RDP协议分层解析

GoSecure/pyrdp项目中的RDP协议分层解析

引言

在远程桌面协议(RDP)的实现和分析中,理解协议的分层结构至关重要。GoSecure/pyrdp项目采用了一种清晰的分层架构来处理RDP协议数据流,本文将深入解析这一设计理念及其实现细节。

分层架构设计理念

RDP协议栈采用分层设计,数据从网络接收后依次通过各层处理。理想情况下,每一层都负责解析协议数据单元(PDU)的一部分,并逐步剥离无关数据,最终提取出核心内容。

典型的处理流程如下:

TCP -> 中间层1(400字节) -> 中间层2(380字节) -> ... -> 实际数据(250字节)

然而,RDP协议栈中的大多数协议并不如此简单。许多协议包含连接PDU类型,这些PDU不能简单地转发到下一层。特别是MCS协议,它具有复杂的初始化序列,并根据服务器或客户端角色使用不同的消息类型。

观察者模式的应用

为了处理这种复杂性,GoSecure/pyrdp采用了观察者模式:

  1. 基本机制:每个层可以附加零到多个观察者(Observer)
  2. 处理流程:当层接收到PDU时,调用pduReceived方法通知所有观察者
  3. 选择性转发:根据PDU类型决定是否转发到下一层

这种设计保持了层类的"解析并转发"的简洁性,同时通过观察者处理特殊PDU。

观察者的实际应用

  1. 功能实现:剪贴板和文件窃取逻辑都通过观察者实现
  2. 监控调试:可以附加观察者到每一层,记录或日志所有接收数据
  3. 灵活扩展:开发者可以轻松添加新的观察者来实现特定功能

RDP协议栈详细分层解析

1. TCP层

作为最底层,TCP层是网络引擎的适配器,主要功能包括:

  • 数据转发
  • TLS连接初始化
  • 基础网络通信功能

2. 分段层(Segmentation)

位于TCP层之上,核心职责是根据PDU类型将数据路由到适当的上层:

  • TPKT协议:结构简单,仅包含头部、长度和有效载荷
  • 快速路径(Fast-path)协议:更为复杂,包含长度字段和输入/输出数据

两种协议可在同一会话中使用:

  • 快速路径用于快速输入/输出传输
  • TPKT用于连接序列和特殊PDU

3. TPKT层

专用于将数据流分割为独立消息,功能单一但关键。

4. X224/COTP层

处理初始连接信息,包括:

  • mstshash cookie
  • 连接使用的协议(TLS、CredSSP等)
  • 断开连接和错误PDU

只有数据PDU会被转发,其他类型PDU应由观察者处理。

5. MCS层

RDP中最复杂的协议,主要功能包括:

  • 管理同一连接上不同用户和通道的通信
  • 为每个功能/插件分配独立通道(输入/输出、剪贴板、驱动器映射等)

MCS层设计特殊之处:

  • 无法设置单一的下层,因为数据处理取决于消息发送的通道
  • 使用MCSRouter(观察者类)处理部分MCS PDU
MCS用户管理
  • 用户创建由MCS路由器负责
  • 用户必须附加后才能加入通道
  • 通道创建使用ChannelFactory的buildChannel方法
MCS通道

每个MCS通道都应视为从MCS层分支出的独立层栈。

6. 安全层

处理加密/解密和签名,主要功能包括:

  • RDP标准安全机制
  • 安全头处理(即使在TLS连接中也用于部分PDU)

7. I/O(数据)层

处理慢速路径RDP数据的最终目的地,也用于连接序列的结束阶段。

8. 虚拟通道层

处理剪贴板、驱动器等虚拟通道,与I/O层路径相似但包结构不同。

9. 快速路径层

特点包括:

  • 只包含关键信息
  • 默认启用
  • 混合了TPKT、安全和数据层的功能

10. GCC/T.124协议

严格来说不是独立层,但在连接阶段使用:

  • MCS连接初始PDU的有效载荷是GCC创建会议请求
  • 包含重要的RDP连接信息

设计优势与最佳实践

GoSecure/pyrdp的分层设计具有以下优势:

  1. 关注点分离:每层只处理特定协议功能
  2. 扩展性:通过观察者模式轻松添加新功能
  3. 灵活性:支持协议栈的动态调整
  4. 可维护性:清晰的层次划分便于调试和维护

对于开发者而言,理解这一分层架构是深入分析RDP协议的基础。无论是实现新的功能模块还是进行安全分析,都可以基于这一架构进行扩展。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

邬颖舒

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

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

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

打赏作者

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

抵扣说明:

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

余额充值