0×00 概述
20190514,微软发布补丁,修复了一个严重的RDP远程代码执行漏洞。该漏洞无需身份认证和用户交互,可能形成蠕虫爆发,影响堪比wannycry。
0×01影响范围
Windows 7
Windows Server 2008 R2
Windows Server 2008
Windows Server 2003
Windows XP
0×02 漏洞重现
poc已出,重现几个网上主流的poc:
1)360的0708detector.exe(无损扫描工具)
//感觉不是很稳定,对同个ip有时成功有时不成功……
一些根据此工具写的批量
包含了msf的rb
git clone https://github.com/zerosum0x0/CVE-2019-0708.gitcd CVE-2019-0708/rdesktop-fork-bd6aa6acddf0ba640a49834807872f4cc0d0a773/ ./bootstrap ./configure –disable-credssp –disable-smartcard make ./rdesktop 192.168.1.7:3389
可能要apt-get install libssl1.0.0 libssl-dev
用scan_with_docker.py可以批量
//较稳定
可以批量
先安装impacket
pip install -r requestments.txt pip install . vim bluekeep_poc.py
删除重复的一个impacket
可批量
//较不稳定
pip3 install impacket
//20190531新增蓝屏poc,用03standx86测试出现
OpenSSL.SSL.SysCallError: (104, ‘ECONNRESET’)
应该是这个03系统问题
直接找几个僵尸主机测一测
//效果不错!
试了几个都是timed out,可能是poc未完善……
其他一些poc(未测试):
https://github.com/skyshell20082008/CVE-2019-0708-PoC-Hitting-Path
https://github.com/blacksunwen/CVE-2019-0708(和5基本一样)
https://github.com/Jaky5155/cve-2019-0708-exp
https://github.com/fourtwizzy/CVE-2019-0708-Check-Device-Patch-Status
https://github.com/trickster0/CVE-2019-0708
https://github.com/algo7/bluekeep_CVE-2019-0708_poc_to_exploit(powershell)
截至发文(20190605),尚未发现公开可用exp,拭目以待!
360的某大神已搞出exp,能在win7 x64弹框了,未公开。
20190606,发现msf可获取meterpreter的exp,未公开。
还有一堆假exp,利用ms12-020、os.system()、alert、假GUI、骗star等等。
www.cve-2019-0708.com(20190529无法访问了)据说是假的!
0×03 漏洞分析
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通道信息
利用360无损检查工具发送的数据包(neg req=fff)
此处本人推测ms_t120通道编号是1,channelCount就是channelDefArray元素数,验证漏洞存在!
利用./rdesktop(第二个poc)对某僵尸主机发送的数据包:
此时推测ms_t120通道编号为2,验证漏洞存在!
利用蓝屏crashpoc.py对某僵尸主机发送的数据包:
本人才疏学浅,对rdp不甚了解,只能从浅层大概分析,高手可参考相关分析资料。
相关分析资料:
英文:
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-ccfa266682f6https://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://zerosum0x0.blogspot.com/2019/05/avoiding-dos-how-bluekeep-scanners-work.html
中文:
https://xz.aliyun.com/t/5295(翻译zerodayinitiative)
https://www.anquanke.com/post/id/178964(翻译mcafee)
https://www.anquanke.com/post/id/178966
0×04 修复方案
1.补丁
https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2019-07082. 开启NLA网络级身份验证减轻危害(利用漏洞就需要身份验证)
0×05 结语
此漏洞危害巨大,一旦exp公开,必会掀起腥风血雨,估计各种勒索挖矿病毒已经蓄势待发,所以大家抓紧打补丁吧!
文章如有错漏,欢迎指出,共同交流!
0×06 参考资料
关于领信
陕西领信未来信息科技有限公司是一家主要面向铁路、科研院所、大型企业等行业的网络安全集成和网络安全技术支持服务及相关应用的专业化信息技术企业。成立于2003年。多年来为用户提供从方案设计、工程实施到售后技术服务的全面技术支持,具有健全的运营体制和现代企业理念 , 公司成立以来,业绩显著,成功完成了多项网络安全建设项目,建立了完善的客户服务系统,赢得了广大客户的赞誉和信赖。在信息安全、网络应急服务实施过程中,领信未来已发展成为陕西省内信息安全技术领域颇具实力的企业之一
业务范围
安全服务、应急响应、渗透测试、系统集成
联系方式
电话:029-88235366
邮箱:liujj@linktrust.net