Windows RDP 服务高危漏洞分析 (CVE-2019-0708)

  • 2019-06-11
  • 0
  • 0

0x001 背景

2019 年 5 月 14 日微软官方发布紧急安全补丁,修复了 Windows 远程桌面服务的远程代码执行高危漏洞 CVE-2019-0708(CNVD-2019-14264、CNNVD-201905-434),该漏洞影响了某些旧版本的 Windows 系统。由于该漏洞无需身份验证且无需用户交互,所以这个漏洞可以通过网络蠕虫的方式被利用,利用此漏洞的恶意软件可以从被感染的计算机传播到网络中其他易受攻击的计算机,传播方式与 2017 年 WannaCry 恶意软件的传播方式类似。

0x002 影响范围

  • Windows 7
  • Windows Server 2008
  • Windows Server 2008 R2
  • Windows 2003
  • Windows XP

0x003 RDP协议简介

RDP 是微软终端服务应用的协议,服务端基于 Windows 操作系统,Windows 从 NT 开始提供终端服务。RDP 协议基于 T.128(T.120 协议族)提供多通道通信,并进行了拓展。

RDP 协议的连接流程可以分为 10 个不同的阶段。这里我们关注通道连接相关的几个阶段。

(1)ConnectionInitiation(连接初始化)

客户端通过向服务器发送Class 0 X.224 ConnectionRequest PDU启动连接请求。服务器使用Class 0 X.224 Connection Confirm PDU进行响应。之后,客户端和服务器之间发送的所有后续数据都被包裹在X.224数据协议数据单元(PDU)中。

(2) BasicSettings Exchange(交换基本设置)

通过使用MCS Connect Initial PDUMCS Connect Response PDU在客户端和服务器之间交换基本设置。GCC 的全称是 Generic Conference Control,GCC 作为 T.124 的标准协议,用于连续传输大量数据时,将数据整理分块传输。

(3)Channel Connection (虚拟通道连接)

客户端通过发送multiple MCS Channel Join Request PDUs加入用户信道,输入/输出通道及所有的静态虚拟通道(IO 和静态虚拟通道 ID信息在 GCC 数据包中)。服务器通过MCS Channel Join Confirm PDU回复每个通道。

0x004 补丁分析

通过补丁包分析,我们发现补丁前后差异在于termdd.sys文件的 IcaBindVirtualChannelsIcaReBindVirtualChannels,增加了对MS_T120协议通道的判定。如果是通道协议名为MS_T120,则设定IcaBindChannel的第三个参数为 31 。

服务端在初始化阶段,会创建MS_T120, Index 为 31 的通道。在收到MCS Connect Initial数据封包后进行通道创建和绑定操作。

IcaBindVirtualChannels函数中进行绑定时,IcaFindChannelByName函数只根据通道名进行通道查找。当通道名为MS_T120(不区分大小写)时,会找到系统内部通道 MS_T120的通道并与之绑定,绑定后,通道索引会即被更改为新的通道索引。

0x005 漏洞原理分析

我们在客户端MCS Connect Initial数据封包中,增加一个名为MS_T120的通道。

接下来,我们释放这个 Channel 。我们向MS_T120通道发送构造的数据,但由于这个通道已经被绑定到内置的MS_T120通道,所以数据最终会派发到相应的处理函数rdpwsx!MCSProtData中,然后调用MCSChannelClose函数关闭通道。

此后,我们向系统的MS_T120通道发送数据,再次引用被关闭的通道,从而导致 UAF 漏洞。

0x006 解决方案

  • 目前启明星辰已经发布了对应的产品级解决方案,相关链接:https://www.venustech.com.cn/article/1/9148.html。
  • 对于 Windows 7 及 Windows Server 2008 的用户,及时安装 Windows 发布的安全更新。
  • 对于 Windows 2003 及 Windows XP 的用户,及时更新系统版本。
  • 临时危害减轻措施:开启网络身份验证(NLA)。请注意如果攻击者拥有合法的网络身份,依然可以绕过该身份验证,利用漏洞攻击目标主机。

本文由 Seebug Paper 发布.

评论

还没有任何评论,你来说两句吧