计世网

一起分析一下这个刚刚修复的RDP漏洞CVE-2019-0708
作者:安全客 | 来源:国信安全湖北中心
2019-06-14
众所周知,Windows XP已经很多年没有过更新了。那么为什么微软这一次要修复这个高危漏洞呢?别着急,我们现在一起来看一看!

 

在微软今年五月份的漏洞更新安全公告中,提到了一个跟远程桌面协议(RDP)有关的漏洞。我们之所以要在这里专门针对这个漏洞进行分析,是因为这个漏洞更新涉及到Windows XP以及其他多个Windows操作系统,而众所周知,Windows XP已经很多年没有过更新了。那么为什么微软这一次要修复这个高危漏洞呢?别着急,我们现在一起来看一看!

根据微软发布的安全公告,这是一个非常严证的安全漏洞,它将导致攻击者在目标设备上实现远程代码执行,并植入蠕虫等恶意软件。这也就意味着,一旦目标组织的其中一台设备受到了感染,整个网络系统内其他未受安全保护的计算机设备也将“无一幸免”。在这份安全公告中,微软提到了著名的网络蠕虫“WannaCry”。在2017年三月份,微软修复了针对该恶意软件的相关漏洞(MS17-010),但是在此之前,很多攻击者都在使用“WannaCry”进行网络攻击。

鉴于该漏洞的安全威胁等级(高危漏洞),攻击者很有可能会在这段时间内开发出相应的漏洞利用工具,McAfee高级威胁研究团队也对该漏洞以及相关的威胁场景进行了深度分析,我们建议广大用户尽快修复漏洞CVE-2019-0708。

受影响的操作系统

Windows 2003

Windows XP

Windows 7

Windows Server 2008

Windows Server 2008 R2

RDP协议

远程桌面协议(RDP, Remote Desktop Protocol)是一个多通道(multi-channel)的协议可以帮助用户(客户端或称“本地电脑”)与提供微软终端机服务的电脑(服务器端或称“远程电脑”)建立通信连接。目前,市场上大部分的Windows都安装了远程桌面协议。其他操作系统也有相关的客户端软件,例如Linux、FreeBSD和Mac OS X等等。

该协议是对国际电信联盟发布的一个国际标准的多通道会议协议T.120 的一个扩展。RDP协议在终端服务推出后已有四个版本,即4.0、5.0、5.1、5.2。一般来说,版本是根据windows的版本确定的。从客户端的角度来说,5.X版本间提供的功能差别不是很大,相对于4.0版本,它提供了用户带密码直接登录、客户端驱动器资源映射、客户端音频回放、最高24位色显示和符合FIPS加密级别连接。另外,从4.0协议开始变提供的客户羰功能有:高、中、低三种数据加密级别,客户端自定义初始登录环境,客户端打印机映射,客户端LPT端口映射,客户端com端口映射,剪贴板映射,客户登录的个性化设置(包括键盘、显示界面大小等)。7.0版:这是最新的版本,仅支持Windows Server 2008 R2 或 Windows 7及以上版本。

漏洞概览

蠕虫病毒可以在受感染的网络系统内进行自我复制和传播,并在受感染的远程主机上自动运行,而不需要用户任何的额外交互。如果一款恶意软件的主要攻击载体是网络的话,那么它就应该被归类为蠕虫。

远程桌面协议(RDP)定义了通信双方在虚拟信道间的数据通信方式,支持客户端建立点到点的连接。这种虚拟信道为双向数据通道,可以扩展RDP的功能。Windows Server 2000在RDP v5.1中定义了32种静态虚拟信道(SVC),但是由于其中涉及还到大量动态虚拟信道(DVC),因此可用的信道数量以及种类会受到一定限制。SVC是在会话开始时创建的,并在会话终止前保持不变,但DVC不同,因为它是根据用户需求来创建和删除的。

漏洞分析

漏洞CVE-2019-0708涉及到了RDP驱动器termdd.sys中的_IcaBindVirtualChannels 和_IcaRebindVirtualChannels。我们可以从下图中看到,系统初始化了RDP连接序列,并且会在安全机制启用前完成信道的建立,这就导致了漏洞CVE-2019-0708的可蠕虫化,因为它可以通过开放端口3389在目标网络系统内实现自我复制和传播。

我们一起分析一下这个刚刚修复的RDP漏洞CVE-2019-0708

先给大家简单介绍一下“MS_T120”这个静态虚拟信道,它的RDP信道编号为31,位于GCC会话初始序列中。这是一个微软内部使用的信道名称,而且在客户端通过一个SVC来请求建立连接时,不会显示关于“MS_T120”这个信道的使用信息。

下图显示的是GCC会话初始化序列的信道请求信息,我们可以看到其中不涉及到任何关于MS_T120信道的信息。

我们一起分析一下这个刚刚修复的RDP漏洞CVE-2019-0708

但是在GCC会话初始化的过程中,客户端提供的信道名称并不在服务器端的白名单中,因此攻击者将能够设置另一个名为“MS_T120”的SVC信道(而不是之前编号为31的合法信道)来让目标系统发生堆内存崩溃,或实现远程代码执行。

下图显示的是GCC会话初始化过程中的非正常信道请求(“MS_T120”信道编号为4):

我们一起分析一下这个刚刚修复的RDP漏洞CVE-2019-0708

MS_T120信道管理中涉及到的组件我们在下图中进行了标注。MS_T120参考信道会在rdpwsx.dll中创建,堆内存也会在rdpwp.sys中分配内存池。当MS_T120参考信道在信道编号非31的场景下建立时,便会发生堆内存崩溃。

我们一起分析一下这个刚刚修复的RDP漏洞CVE-2019-0708

下图显示的是微软的漏洞修复情况,微软在termdd.sys的_IcaBindVirtualChannels和_IcaRebindVirtualChannels函数中的客户端连接请求部分添加了针对信道名称“MS_T120”的检测代码,并确保该信道会跟信道序列31进行绑定。

我们一起分析一下这个刚刚修复的RDP漏洞CVE-2019-0708

在对Windows 2003和Windows XP的漏洞补丁进行了分析之后,我们弄清楚了RDP协议在安装补丁之前以及安装补丁之后的信道解析流程,因此我们打算针对这个漏洞开发一份漏洞概念验证代码,并尝试在目标设备上利用该漏洞来实现远程代码执行,然后启动计算器程序。

下图为我们PoC程序的执行截图:

我们一起分析一下这个刚刚修复的RDP漏洞CVE-2019-0708

经过简单配置之后,我们在目标设备上启用了远程桌面协议,并且在运行概念验证代码前确保了该设备没有安装漏洞补丁。

我们通过研究分析,确认了PoC代码的有效性,并成功在目标系统上实现了远程代码执行。但是,如果目标系统启用了网络等级认证功能,那么这份PoC代码就无法正常运行了。不过攻击者如何能够获取到目标网络系统的管理员凭证,那么他们仍然能够绕过这种安全保护机制。

由于微软已经针对该漏洞发布了相应的漏洞补丁,因此我们就不再详细讨论针对该漏洞的利用方法了,而且出于对广大用户的安全性负责的角度考虑,我们也不打算对外公开我们的PoC代码。

缓解方案

1、 确保我们的Windows系统已安装了针对漏洞CVE-2019-0708的安全补丁,我们强烈建议广大用户尽快安装该补丁。

2、 禁止设备在外网使用远程桌面协议,并将其限制在内网使用。如果可以的话,建议广大用户直接禁用远程桌面协议,因为该协议如果被禁用,那么设备安全也就完全不会受到该漏洞的影响了。

3、 在远程桌面协议的GCC会话初始化序列时,将“MS_T120”与信道编号31进行绑定,如果请求的信道编号不正确,则禁止建立连接。

需要注意的是,我们还可以在注册表中修改默认的RDP端口,重启之后我们就可以使用新的通信端口了:

我们一起分析一下这个刚刚修复的RDP漏洞CVE-2019-0708

但是,恶意软件在获取到了目标系统的管理员权限之后,是可以修改这种配置参数的,并且在注册表中写入新的通信端口。

责任编辑:焦旭