Windows RDP服务高危误差剖析(CVE-2019-0708)

宣布时间 2019-05-29
误差配景


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


误差影响版本


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


RDP协议简介


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


ku酷游(集团)官方网站


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 PDU和MCS 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回复每个通道。


补丁剖析


通过补丁包剖析 ,我们发明补丁前后差别在于termdd.sys文件的IcaBindVirtualChannels及IcaReBindVirtualChannels ,增添了对MS_T120协议通道的判断。若是是通道协议名为MS_T120 ,则设定IcaBindChannel的第三个参数为31。


ku酷游(集团)官方网站


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


在IcaBindVirtualChannels函数中举行绑准时 ,IcaFindChannelByName函数只凭证通道名举行通道查找。当通道名为MS_T120(不区分巨细写)时 ,会找到系统内部通道MS_T120的通道并与之绑定 ,绑定后 ,通道索引会即被更改为新的通道索引。


误差原理剖析


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


ku酷游(集团)官方网站


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


ku酷游(集团)官方网站


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


ku酷游(集团)官方网站




解决计划


现在酷游官网已经宣布了对应的产品级解决计划 ,相关链接为:/article/1/9148.html 。


关于Windows 7及Windows Server 2008的用户 ,实时装置Windows宣布的清静更新。


关于Windows 2003及Windows XP的用户 ,实时更新系统版本。


暂时危害减轻步伐:开启网络身份验证(NLA)。请注重若是攻击者拥有正当的网络身份 ,依然可以绕过该身份验证 ,使用误差攻击目的主机。