漏洞名称:Remote Desktop Protocol漏洞 威胁等级:严重 影响范围:Windows XP、Windows 7 、 Windows Server 2003、Windows Server 2008、Windows Server 2008 R2 漏洞类型:任意代码执行漏洞
Remote Desktop Protocol(远程桌面协议,RDP)是微软公司创建的专有协议。它允许系统用户通过图形用户界面连接到远程系统。在默认情况下,该协议的客户端代理内置在微软的操作系统中,也可以安装在非微软操作系统中。RDP的服务器端安装在微软操作系统中,从客户端代理接收请求,显示发布应用程序的图形界面或者远程访问系统本身。默认情况下,系统在3389端口来监听来自客户端的通过RDP的连接请求。
通常情况下,在企业中,RDP或者终端服务会话被配置在需要分布式客户端机器来连接的服务器上。它可以用于管理、远程访问或者发布用于中央使用的应用程序。该协议还常被桌面管理员来远程访问用户系统,以协助排除故障。如果RDP没有正确配置或存在漏洞,这种特定功能将会给企业带来威胁,因为未授权访问者将可以访问关键企业系统。
二、漏洞描述
CVE-2019-0708,属于远程代码执行漏洞,当未经身份验证的攻击者使用RDP连接到目标系统并发送特制请求时,即可触发该漏洞。无需用户交互,成功利用此漏洞的攻击者可以安装应用程序,查看、更改、删除数据或创建具有完全用户权限的新账户。
此外,恶意攻击者还很有可能利用该漏洞专门编写恶意代码到定制的恶意软件,攻击易受感染的主机并进行病毒传播。
三、漏洞分析
1.漏洞原理
远程桌面协议(RDP)支持客户端和服务器之间的连接,并且以虚拟信道的形式定义了它们之间通信的数据。虚拟信道是双向数据管道,可以针对RDP实现扩展。 Windows Server 2000使用RDP 5.1定义了32个静态虚拟信道(Static Virtual Channel, SVC),由于信道数量的限制,进一步定义了动态虚拟信道(Dynamic Virtual Channel, DVC),这些信道包含在专用SVC中。 SVC在会话开始时创建并保持到会话终止,而DVC将会根据是否需要确定是否创建和抛弃。
此次微软补丁termdd.sys中的_IcaBindVirtualChannels和_IcaRebindVirtualChannels函数用于对这32个SVC进行绑定相关操作。
如下图所示,RDP连接序列在信道安全属性设置之前就进行了连接和设置,这为CVE-2019-0708的创建和传播提供了条件。
2.漏洞流量分析
“MS_T120”这个SVC名称在RDP协议的GCC Conference初始化序列时被绑定为数字31的参考信道。此信道名称由Microsoft内部使用,在客户端没有明显的、合法的使用以“MS_T120”命名的SVC来发起请求进行连接的用例。
下图展示了一个标准GCC Conference初始化序列的信息。
然而,在GCC Conference初始化期间,攻击者可以在31之外的信道上设置另一个名为”MS_T120”的SVC,这种行为将会导致堆内存破坏,最终可以实现远程代码执行。下图展示了GCC Conference初始化序列期间的异常信道请求:
3.漏洞补丁函数分析
下图中显示了MS_T120信道管理中涉及的相关组件。rdpwsx.dll和rdpwp.sys会为MS_T120信道分配堆内存。在31之外的信道索引的上下文中对MS_T120信道进行处理时,会发生堆内存损坏,损坏位置位于termdd.sys中。
通过对微软更新的CVE-2019-0708补丁的分析,可以发现该补丁修复了RDP驱动程序termdd.sys中的_IcaBindVirtualChannels和_IcaRebindVirtualChannels函数。
下图补丁函数分析所示,Microsoft补丁针对使用了信道名称“MS_T120”的情况下,添加了对客户端连接请求的检查,并确保它在termdd.sys中的_IcaBindVirtualChannels和_IcaRebindVirtualChannels函数中仅绑定到通道31(1Fh)。
四、影响范围
1.暴露资产情况
到目前为止,在全球范围内对互联网开放RDP的资产数量已经多达1250万,其中美国地区对外开放的RDP数量排名第一,为341万台。排名第二与第三的分别是中国和德国,其中中国数量远远超过德国的数量。
由以上数据统计看来,国内RDP的使用基数很高,用户相当广泛。其中RDP使用量最高的三个省市是北京,浙江以及广东。北京的使用量最高,数量达864982台,浙江省的使用量也达57万以上,广东省的使用量达27万。因此,针对此次RDP的漏洞防范尤为重要。
2.目前受影响Windows版本
Microsoft Windows XP
Microsoft Windows Server 2008 R2 for x64-based Systems SP1
Microsoft Windows Server 2008 R2 for Itanium-based Systems SP1
Microsoft Windows Server 2008 for x64-based Systems SP2
Microsoft Windows Server 2008 for Itanium-based Systems SP2
Microsoft Windows Server 2008 for 32-bit Systems SP2
Microsoft Windows Server 2003
Microsoft Windows 7 for x64-based Systems SP1
Microsoft Windows 7 for 32-bit Systems SP1
五、解决方案
修复建议如下:
(1)及时安装微软发布的安全更新补丁:
Microsoft官方已经在 2019年5月14日修复了该漏洞,用户可以通过安装微软的安全更新来给系统打上安全补丁,下载地址为:https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2019-0708
同时针对已不受微软更新支持的系统Windows Server 2003和Windows XP提供的安全更新,下载地址: https://support.microsoft.com/zh-cn/help/4500705/customer-guidance-for-cve-2019-0708
(2)缓解措施(在无法及时安装微软安全更新的情况下作为临时性解决方案):
若用户不需要用到远程桌面服务,建议禁用该服务。
开启网络级别身份验证(NLA),此方案适用于Windows 7, Windows Server 2008, Windows Server 2008 R2。
暂时性修改RDP的连接端口,默认端口为3389。
使用ACL对RDP的访问来源进行限制。
使用RDP网关,网关的功能是安全的将流量从远程客户端传递到本地设备。 使用RDP网关可以防止或最小化远程用户访问,并使组织能够更好的控制用户角色,访问权限和身份验证需求。
以上缓解措施只能暂时性针对该漏洞对系统进行部分缓解,强烈建议在条件允许的情况下及时安装微软安全更新。
六、参考链接
[1].https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2019-0708
[2].https://securingtomorrow.mcafee.com/other-blogs/mcafee-labs/rdp-stands-for-really-do-patch-understanding-the-wormable-rdp-vulnerability-cve-2019-0708/
[3].https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-rdpbcgr/5073f4ed-1e93-45e1-b039-6e30c385867c