手机上怎么买彩票双色球 微信上有人推荐买彩票 能合买彩票的平台 夫妻买彩票狂中30亿 买彩票心态 买彩票就买大乐透开奖结果 哪个平台买彩票安全吗 买彩票有买一个号的吗 怎么看走势图买彩票 如何在电脑上买彩票 美国几岁可以买彩票? 福彩工作人员买彩票 彩客网买彩票 能在微信上买彩票吗 怎么买彩票容易中

微软RDP服务高危UAF漏洞分析(CVE-2019-0708)

来源:本站整理 作者:佚名 时间:2019-07-06 TAG: 我要投稿

CVE-2019-0708经微软披露已经有一个多月了,本文将主要围绕以下几个方面介绍该漏洞
1、经过分析验证该漏洞是一个UAF漏洞,引发UAF漏洞的指针是由何时创建以及为何该指针在Free之后又被使用,是本文重点关注的地方。
2、该漏洞属于RDP协议实现方面的漏洞,文中会列举与该漏洞相关的RDP协议知识。
 
0x01 RDP协议介绍
1.1 RDP协议简介
远程桌面协议(RDP, RemoteDesktop Protocol)是一个多通道(multi-channel)的协议。RDP协议也是C/S网络结构,双方通过TCP连接进行通信,基本也是基于请求/响应这样的数据交换模式,这里贴一张来自微软发布的RDP协议时序图,该图详?#35813;?#36848;了RDP连?#21448;?#35831;求及响应的顺序及过程。

该文档([MS-RDPBCGR].pdf)地址如下:
https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-rdpbcgr/5073f4ed-1e93-45e1-b039-6e30c385867c
文中不介绍通讯细节,有兴趣的读者可以自行阅读该文档。
1.2 静态虚拟信道(Static Virtual Channels)
静态虚拟通道允许RDP Client和RDP Server通过主RDP数据连接通信。虚拟通道数据是特定于应用程序的,对RDP不?#35813;鰲?#36830;接时最多可以创建31个静态虚拟通道。RDP Client在连?#26377;?#21015;的Basic Settings Exchange阶段请求并确认所需虚拟通道列表,并在ChannelConnection阶段进行信道的连接。
每个虚拟通道充当独立的数据流。RDP Client和RDP Server检查在每个虚拟通道上接收的数据,并将数据流路由到适当的处理函数以进行进一步处理。
 
0x02 UAF成因及调试过程
已确认的是,CVE-2019-0708为UAF漏洞,众所周知UAF漏洞主要是由于对象指针在?#22836;?#21518;再次被使用而引发的安全问题。那么在这一部分内容中,我将描述引发UAF漏洞的指针是由何时创建以及为何该指针在Free之后又被使用。
2.1 触发UAF的过程
1、 RDP连接建立,RDP Server 默?#31995;?#29992;IcaCreateChannel() 创建MS_T120静态虚拟信道,并绑定到0x1F信道号,此时是该信道第一次绑定。
2、RDP Client 在通讯的Channel Connecttion阶段告知 RDP Server 绑定名称为“MS_T120”的信道到指定信道号,此时Server使用IcaFindChannelByName()函数搜索到默认创建的MS_T120信道,将该信道对象绑定到用户指定的信道号上。此时是MS_T120信道第二次绑定。
3、 至此,MS_T120信道已经完成2次绑定。随后RDP Client 告知RDP Server断开第二次绑定的信道,该操作会引发RDP Server 调用IcaFreeChannel()?#22836;?#35813;信道并?#22836;?#35813;对象占用的空间。
4)随后RDP Client 将通知RDP Server关闭RDP连接,此操作会引发Server调用SingalBrokenConnection()函数?#22836;?#20449;道号0x1F的MS_T120信道对象。由于该对象空间已经?#22836;?#36807;,这里再次调用IcaFreeChannel()函数执行清理操作,其中ExDeleteResourceLite()会引用该对象的成员数据而触发UAF漏洞。
2.2 调试过程
下图是漏洞补丁修复前后对比图:

关键的修改是针对_IcaBindChannel()函数的调用前增加了一个条件判断,判断的内容是stricmp() 返回值,也就是?#22336;?#20018;是否相等。
而以字面意思解读icaFindChannelByName(), 就是以名字查找信道。下图为该函数的实现,通过遍历列表,可以?#33539;?#30340;是信道对象中偏移0x94的位置就是信道名称。

回过头来看漏洞补丁的代码,?#23548;?#19978;打过补丁后,在调用icaBindChannel()函数的之前,也是进行信道名称的判定,当信道名称为”MS_T120” 的时候,后续调用icaBindChannel()的第三个参数,强制改为0x1F。
这里看一看icaBindChannel()函数的实现,关键在第12行的代码中,会将传入该函数参数1的信道指针,写入一个内存地?#20998;小O远?#26131;见的是,写入的地方是通过参数2?#23433;?#25968;3计算得到。

?#23548;?#19978;这个函数就是漏洞的关键,至于为什么关键,我们后面再谈。首?#35748;?#20171;绍一下,引起UAF的对象指针是何时创建的。
早在前文已经介绍过, RDP协议定义静态虚拟信道,而名称为MS_T120的信道就是其中一个。MS_T120在RDP协议建立之初,就会由RDP服务端主动创建,本次漏洞引起UAF的对象指针就是MS_T120信道。termdd!icaCreateChannel()函数用于创建信道,在该函数设置断点,使用微软远程桌面连接工具连接并观察一下该信道建立的过程。

通过分析该函数代码可知,参数2偏移0xC的位置为信道名称。建立RDP连接,WinDbg停在IcaCreateChannel()处,其参数中的名称正是MS_T120

进一步跟踪该函数,进入了关键函数_IcaAllocateChannel(),如下图,该函数首先调用ExAllocatePoolWithTag()申请空间,之后就是对象成员初始化工作。

[1] [2]  下一页

【声明】:黑吧安全网(http://www.rliwo.live)登载此文出于传递更多信息之目的,并不代表本站赞同其观点?#25237;?#20854;真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱[email protected],我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载
        购买彩票权威网址
        手机上怎么买彩票双色球 微信上有人推荐买彩票 能合买彩票的平台 夫妻买彩票狂中30亿 买彩票心态 买彩票就买大乐透开奖结果 哪个平台买彩票安全吗 买彩票有买一个号的吗 怎么看走势图买彩票 如何在电脑上买彩票 美国几岁可以买彩票? 福彩工作人员买彩票 彩客网买彩票 能在微信上买彩票吗 怎么买彩票容易中
        双百搭投注 熊猫麻将怎么作弊 西班牙人vs巴萨图 天涯明月刀演员表 莱斯特城队服 久久小说下载网 河北20选5走势图一综合二版 杭州麻将规则 卡五星麻将怎么记牌 万人炸金花旧新版下载