RDP协议

RDP,远程显示协议(Remote Display Protocol )简称RDP。提供了客户和服务器之间的连接。该协议是对国际电信联盟发布的一个国际标准的多通道会议协议T.120 的一个扩展。Shadow Session,映像会话是MetaFrame 的一项重要功能,用户可以通过这项功能映像其它用户的桌面。管理员可以通过映像会话指导用户使用软件和系统,也可以用来监视客户机运行情况。MetaFrame 的这一项功能可以实现一对一、一对多、多对多等功能。Windows 2000 Server 中的远程管理功能与此相似,但只能实现一对一。RDP是微软终端服务应用的协议,服务端基于win2000/winNT。协议基于T.128(T.120协议族)提供多通道通信。在客户端支持多种资源缓冲和图片数据的压缩处理。
  协议通过TCP/IP进行数据传输,在实际数据前进行了ISO/MCS/SEC三层的包装,ISO/MCS两层为多点并发式通信提供了可靠的传输保障,SEC层提供对RDP详细数据的加解密处理。各层在数据的前端加有一段数据头,用于对数据、传输的控制。具体的数据控制由STREAM类型的结构体管理(这种方法很灵活、易懂,可作为网络编程者的参考),不同的数据头由不同的结构成员管理,层次清晰。RDP协议将终端虚拟环境中的设备映射为不同的数据包,将对设备的输入输出(I/O)重定向到网络句柄中,不同设备的数据按不同格式组织成为小的数据包,并将多个小数据包封装成为一个大的数据包通过网络一次性发出,对方将网络解收的数据进行分解成为小包并按设备数据的类型进行不同的处理。
  windows从NT开始提供终端服务,它是微软买来的网络协议技术(Citrix),服务器端要安装、配置,客户端要连接程序。终端服务使任何一台有权限的终端机,用已知的账号登录服务器,可以使用账号内的资源,包括软件,硬件资源;同时,在协议升级后,客户端连接后可以使用本地的资源,包括本地打印机、声音本地回放,本地磁盘资源和本地硬件接口。所有的计算都在服务器端进行,客户端只需要处理网络连接、接收数据、界面显示和设备数据输出。
  二、概述
  1 版本功能说明: RDP协议在终端服务推出后已有四个版本,4.0、5.0、5.1、5.2。一般来说,版本是根据windows的版本确定的。 从客户端的角度来说,5.X版本间提供的功能差别不是很大,相对于4.0版本,它提供了用户带密码直接登录、客户端驱动器资源映射、客户端音频回放、最高24位色显示和符合FIPS加密级别连接。 另外,从4.0协议开始变提供的客户端功能有:高、中、低三种数据加密级别,客户端自定义初始登录环境,客户端打印机映射,客户端LPT端口映射,客户端com端口映射,剪贴板映射,客户登录的个性化设置(包括键盘、显示界面大小等)。
  2、协议层次说明: 通过破解研究,我们掌握了RDP协议的基本层次结构。基本上,RDP协议的每一层次上都标示出其层内的数据长度值。 对于层次划分,主要是指RDP协议网络功能数据传送时通常都包含的各层次,而对于各层次内所实现的单层次连接等功能将作为单独的模块来进行阐述。 网络连接层:RDP协议建立在TCP/IP协议之上,由于传输的数据量比较大,因此在协议的底层首先定义一层网络连接层。它定义了一个完整的RDP数据逻辑包,以避免由于网络包长度过长而被分割使数据丢失。 ISO数据层:在网络连接层之上是ISO数据层,它表示RDP数据的正常连接通信。 虚拟通道层:在ISO数据层之上,RDP协议定义一个虚拟通道层,用以拆分标示不同虚拟通道的数据,加快客户端处理速度,节省占用网络接口的时间。 加密解密层:在虚拟通道层之上,RDP定义一个数据加密解密层。此层用于对所有的功能数据进行加密、解密处理。 功能数据层:在加密解密层之上是功能数据,画面信息,本地资源转换,声音数据,打印数据等所有的功能数据信息都在此层进行处理。另外,根据数据类型的不同,这些数据都有各自不同层次的分割,他们的内部层次结构将在各个功能模块中进行阐述。
  3 其它说明: 本协议解析中所提到的各层次结构都是指RDP功能数据正常传送时的各底层结构,在功能数据传送前的各层次的建立连接过程及其结构、实现都归于模块实现来进行说明。 对于服务器端的各种设置以及个版本间的内部实现差异请看RDP帮助文档,以及rdpwin开发文档。
  4 连接过程说明:
  1) 客户端连接服务器
  2) ISO数据层建立连接
  3) 发送初始协议相关信息,接收加密、解密密钥
  4) 虚拟通道申请
  5) 加密形式发送客户端系统信息,同时验证加密协议
  6) 平台软件证书验证
  7) 各功能建立连接,各功能数据传输,功能实现
  三、网络层次:
  1 网络连接层: 在RDP协议网络实现连接中,本层的数据格式是固定的。 内容 协议版本号 保留 此逻辑包长度
  字节数 1 1 2
  值 当前版本皆是3 0 逻辑长度,从版本号开始到本包结束
  2 ISO数据层: 在RDP功能数据网络传输中,本层的数据格式是固定的。 内容 单层数据长度 ISO包类型 标志
  字节数 1 1 1
  值 2,从下字节开始计算 0xf0,表示数据 0x80
  3 虚拟通道层: 虚拟通道层用于在正常的网络连接数据之上,中个虚拟通道的功能数据。此层次的连接另见初始连接模块与通道申请模块,在此只说明正常数据连接时的层次结构。
  1) 结构信息: 内容 类型 虚拟通道个数 虚拟通道号 标志
  字节数 1 2 2 1
  值 0x64/0x68 0x0001 0x03eb至0x03ee 0x70/0xf0
  2) 类型说明: 0x64:客户端发送数据 0x68:客户端接收数据 3) 用户号说明: 本次连接的用户号,服务器发送的是0x0001;客户端所发送的值是初始连接时请示通道后服务器同意开通的虚拟个数。 4) 虚拟通道号说明: 虚拟通道号是本层次以上所发送的功能数据所在的虚拟通道号,其由初始连接通道申请建立时确定。 5) 标志说明: 客户端发送的标志为0x70;服务器端发送的标志,当功能数据是图像是(由通道号识别),其值为0x70,当功能数据是其它数据时,其值为0xf0。
  4 加密解密层: 加密解密层用于对网络连接中所发送、接收的数据进行加密、解密。为保证数据和系统的安全性,对网络数据进行加密传输是比较常用且必然的,RDP协议在此层对实际的功能数据进行加密。
  1) 结构信息: 内容 单层及层上数据总长度 加密标志 未知标志 数字签名
  字节数 1-2 2 2 8
  值 从下字节开始计算 0x0800 0x1000/0x0203 顺序取得
  2) 总长度说明: 若长度大于0x7f,则长度以两字节表示,并按位与0x8000。这是由于版本升级赞成的格式不统一,长度不定,当前版本认为长度值不大于0x0fff(4095)因此只用长度值并按位与0x8000实现版本兼容,在版本升级后会以0x8x表示长度值的字节数,其中8表示非1字节,x表示具体的字节个数。
  3) 加密标志说明: RDP协议要求在正常的功能连接实现之前,首先licence认证,其标志为0x8xxx,且其后数据不同于正常功能数据传输式的加密层格式,可以视licence认证为加密解密层的建立连接过程。另外功能数据的加密、解密的密钥是在初始连接时获得的,而加密解密功能的实现由加密、解密模块阐述。
  4) 未知标志说明: 服务器端发送过来的未知数据有两种,目前不知其意,客户端在发送数据时将其置为0x0000值。
  5) 数字签名说明: 对所有的加密数据在此放置8字节数字签名。其值由RC4会话键值和功能数据经过SHA运算和MD5运算得到。
  5 功能数据层: 功能数据是客户端与服务器进行交互的真正数据。他们都有各自固定格式,连接、控制方式,具体情况见各功能模块的说明。 根据当前我们所掌握的信息,RDP协议将图像信息、声音信息、设备信息、剪贴板内容都各自以单一的虚拟通道进行传送,而打印机映射,磁盘映射,端口映射都做为设备信息的内容进行处理。限于当前左上角工作和项目工作的限度,设备信息中只考虑了打印机映射的部分,对于打印机信息与其他的设备相关的信息没有进行有效隔离区分,而本协议说明中相关的连接信息、数据传送都只认为是打印机映射的内容
扩展阅读:
  1. DP是一个多层多虚通道通讯协议,它在一个TCP连接中虚拟出若干个通道,分别进行各种信息的传输。

    1. 协议层次图:

各个层次数据包说明:

  1. RDP层:RDP客户端任何的用户操作,都将形成RDP数据包,并以数据包类型形成RDP包头,然后将数据包传给Secure Connection层,由Secure Connection负责将数据往下传递。
  2. Secure Connection层:该层再收到RDP层数据包后,在RDP数据包中添加Sec层的包头,将对RDP数据进行加密,然后传给MCS层。
  3. MCS层:在收到Sec层传来的数据包后,在该数据包中添加MCS层数据包包头信息,然后将数据包传给ISO层。
  4. ISO层:收到MCS层的数据后,在该数据包中添加ISO包头,并将数据包传给TCP层,由TCP层负责将数据通过网络发送出去。
  5. TCP层:这是我们常说的传输层,在收到ISO层传输过来的数据后,将通过原建立好的SOCK将数据发送出去。

    注:(a)、以上所述是数据的发送过程,是一层一层往下进行处理,接收过程则相反,一层一层往上对数据组合并上传。

    (b)、初始化数据包时,是从下往上先调用TCP_init开辟空间并初始化,然后再由ISO层对ISO层的内容进行初始化,依此往上类推。

    1. 多虚通道图示:

    首先在建立连接时,会与服务器之间建立一条TCP连接,再在该TCP连接中虚拟出若干条通道。这些虚通道主要有:

    1. 全局通道。
    2. 剪贴板通道。
    3. 声音映射通道。
    4. 其它设备通道(如Serial、Disk、Print、Parallel等)等等。

  1. RDP数据包的类型:

接收端在接收到数据包,并经过各层的处理后最终形成明文RDP数据包后,在每个数据包的包头都含有数据包的类型说明字段,该字段指明本数据包是什么类型,如:

终端服务传向客户端的数据包类型举例:

显示区域更新包;

鼠标指针位置变动包;

剪站板操作数据包;

声音数据包;

RDP打印数据包;

磁盘读写请求包及写数据包;

串口读写请求包及写数据包;

并口读写请求包及写数据包等等

客户端传向终端服务器的数据包类型举例:

按键信息数据包;

鼠标操作数据包;

用户登录用户名及密码数据包;

外设输入数据包;

从本地磁盘及外设读出的数据包等等。

  1. 各种类型数据包的处理:

    客户端在接收到终端服务器发送下来的数据包后,将从包头中解释出数据包类型,并根据包类型进行不同的操作,如收到串口操作数据包,则将该数据包交给串口数据处理程序进行处理。

    当RDP客户端程序收到终端输入信息(如按键信息)后,会将该信息组成数据包并发给服务器(如将按键扫描码发给终端服务器,由服务器进行相应的操作)。

  1. RDP通讯数据加密级别设置说明

Window终端通过RDP协议与终端服务器连接时,所有在网络中传输的数据都将经过加密,具体加密等级的设置有两种方法:

  1. 通过终端服务配置进行配置:

可以在"管理工具"—》"终端服配置"—》"连接"—》"右击"并选择属性—》在其中的"常规"选项卡中的"加密级别"进行设置,具体选项说明如下:

  1. 通过组策略进行设置:

打开组策略并在"计算机配置"—》"管理模板"—》"Windows 组件"—》"终端服务"—》"加密与安全性"上,双击"设置客户端连接加密级别"设置,然后单击"已启用"。

  1. 加密级别说明:

对于其中的加密级别,在这里简单给予说明。

  1. "符合 FIPS 标准"级别通过使用 Microsoft 加密模块的联邦信息处理标准(FIPS)加密算法,对客户端和服务器之间相互发送的数据进行加密和解密。 对于终端服务,它只支持Triple DES 加密算法,以便对终端服务网络通信加密。

    要点:如果通过系统加密:使用FIPS兼容的算法来加密、哈希和签名组策略或终端服务"设置客户端连接加密级别"组策略,已经启用了 FIPS 兼容算法,就不能使用终端服务配置更改加密级别。

  2. "高"级别使用 128 位的强加密RC4算法,对客户端和服务器之间发送的数据进行加密。当终端服务器运行在仅包含 128 位客户端(例如运行 Windows Server2003 家族操作系统之一的客户端)的环境中时,才使用该级别。不支持该加密级别的客户端将无法进行连接。
  3. "客户端兼容"级别以客户端所支持的最大密钥强度来加密客户端和服务器之间发送的数据。如果终端服务器的运行环境包含混合或旧的客户端,请使用此级别。
  4. "低"级别将使用 56 位加密对从客户端传输到服务器的数据进行加密。对从服务器传输到客户端的数据不进行加密需要抓包分析时请将加密级别设置为"低"。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值