• RDP协议流程详解(一)Connection Initiation阶段


            Connetction Initiation是RDP连接的第一个阶段,具体包含两个消息RDP Negotiation Request和RDP Negotiation Response,下面结合协议数据包详细分析。

            (1)RDP Negotiation Request

            从数据包可以清晰看到此时的协议栈依次是TCP-TPKT-X.224-RDP。其中TCP协议非常普遍,这里不详细说了。TPKT协议的全称是"Transport Protocol Data Unit",它在RDP中负责对RDP数据进行分割、传输和重组。TPKT协议主要用于在网络中可靠地传输RDP数据。TPKT协议具体定义了如何将RDP数据分割成数据单元(称为数据包)以及如何在网络中传输这些数据包。每个TPKT数据包包含一个特定的头部,用于标识包的开始和结束,并提供错误检测和纠正机制。TPKT头部中包含了数据包长度、版本号和其他必要的控制信息。TPKT示例如下,包含版本和长度。

            X.224协议是一种用于远程桌面协议(RDP)中的传输层协议。它提供了在网络中建立和管理RDP会话的功能,是RDP协议栈中的关键组成部分。X.224负责连接的建立和维护、可靠的数据传输、错误检测和纠正、会话管理以及安全性支持等功能。比如,X.224协议可以与其他安全协议结合使用,如SSL(Secure Sockets Layer)或TLS(Transport Layer Security),以提供传输层的数据加密和身份验证机制。通过这些安全协议,X.224可以确保RDP会话的机密性和保密性,示例如下。

            下面我们来重点分析RDP_NEG_REQ消息。

            RoutingToken/Cookie是可选字段,如果是RoutingToken则是用来作为负载均衡(load balancing),如果是Cookie则具体形式为“Cookie: mstshash=IDENTIFIER”,Token或Cookie只能是二者选一。

            Type取值为0x01,表明消息类型为TYPE_RDP_NEG_REQ。

            Flags字段包含8位,定义为0x01:RESTRICTED_ADMIN_MODE_REQUIRED (客户端要求为restricted admin mode,如果服务端支持则发送相应空证书),0x02:REDIRECTED_AUTHENTICATION_MODE_REQUIRED (客户端要求为Remote Credential Guard模式,如果服务器支持则基于CredSSP的重定向鉴别),0x08:CORRELATION_INFO_PRESENT(这里指示是否有rdpCorrelationInfo字段)。

            Length必须是0x0008,也就是8个字节。

            requestedProtocols指示支持的安全协议,长度为4字节。定义为0x00000000:PROTOCOL_RPD(支持标准RDP安全),0x00000001:PROTOCOL_SSL(支持TLS1.0,1.1或1.2),0x00000002:PROTOCOL_HYBRID(支持CredSSP,一般这里设置为1则TLS也设置为1),0x00000004:PROTOCOL_RDSTLS(支持RDSTLS协议),0x00000008:PROTOCOL_HYBRID_EX(一般这里设置为1则PROTOCOL_HYBRID也设置为1),0x00000010:PROTOCOL_RDSAAD(支持RDS AAD Auth安全)。

            (2)RDP Negotiation Response 

            TPKT和X.224层不具体说了,重点分析RDP_NEG_RSP。

            Type取值为0x02,表明消息类型为TYPE_RDP_NEG_RSP。

            Flags字段也是8位长度,指示的是服务端的协议支持能力。

            Length必须是0x0008,也就是8个字节。

            selectedProtocol指示协商使用的安全协议类型,这里是CredSSP类型0x0000002。其他定义如下。

    取值说明
    PROTOCOL_RDP 0x00000000standared RDP Security
    PROTOCOL_SSL 0x00000001TLS1.0 1.1 1.2
    PROTOCOL_HYBRID 0x00000002CredSSP
    PROTOCOL_RDSTLS 0x00000004RDSTLS协议
    PROTOCOL_HYBRID_EX 0x00000008Credential Security Support Provider protocol (CredSSP)基于
    Early User Authorization Result PDU
    PROTOCOL_RDSAAD 0x00000010
    RDS AAD Auth安全协议
  • 相关阅读:
    安全至上:落地DevSecOps最佳实践你不得不知道的工具
    PHP SimpleXML
    进 4 球得 1 分,阿根廷败北背后的科技与狠活
    软件测试学习路线
    GNS3 vm 添加 H3C VSR1000 镜像、导入初始配置
    基于springboot的宿舍管理系统
    搞懂这些关键指标,数据分析起码少费一半力
    哈希散列表hlist_head - linux内核经典实例
    劲爆,Java 协程终于来了
    el-form动态表单动态验证(先验证不为空,再验证长度在20以内,最后向后台发送请求验证账号是否重复)
  • 原文地址:https://blog.csdn.net/ryanzzzzz/article/details/133553126