皇冠体育寻求亚洲战略合作伙伴,皇冠代理招募中,皇冠平台开放会员注册、充值、提现、电脑版下载、APP下载。

首页科技正文

usdt手机钱包(www.caibao.it):使用Refresh Rect PDU和RDPDR客户端名称请求PDU获取具有系统特权的RCE

admin2021-02-0143技术

USDT第三方支付

菜宝钱包(caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。

2019年5月,Microsoft公布了针对远程代码执行(RCE)破绽CVE-2019-0708的带外修复程序更新,该破绽也称为“BlueKeep”,位于远程桌面服务(RDS)的代码中。在已往的一年中,研究人员证实了BlueKeep的可行使性,并提出了检测和预防它的对策。然则,RDP仍然是当今攻击者使用的最受迎接的攻击前言之一。为了使RDP攻击更难乐成并更好地珍爱Windows用户,研究人员将在此文中公然有关攻击者若何在Windows RDP终端上行使BlueKeep的详细信息。

在2019年8月,Unit 42的研究人员就对CVE-2019-0708做了详细研究,内容涉及若何使用位图缓存协议数据单元(PDU),Refresh Rect PDU和RDPDR客户端名称请求PDU将数据写入Windows内核内存。此外,2019年10月,Unit 42的研究人员在Microsoft的BlueHat Seattle 2019平安集会上先容了三种带有RDP PDU新的Windows内核池风水手艺和BlueKeep的两种差别行使手艺。本文讨论了若何连系使用Refresh Rect PDU和RDPDR客户端名称请求PDU来获得具有系统特权的远程代码执行RCE。

快速查看Refresh Rect PDU和RDPDR客户端名称请求PDU

关于Windows RDP协议中的Refresh Rect PDU和RDPDR客户端名称请求PDU,请点此链接。

通过多次发送PDU,Refresh Rect PDU可用于喷洒许多0x828巨细的内核池。那些0x828巨细的内核池将按0x1000偏移量对齐,在每个0x828巨细的内核池中,RDP客户端在偏移0x2c处控制8个字节的数据。八个字节控制数据的起始地址看起来像0x8xxxx02c,在测试历程中,将0x828巨细的内核池从地址0x86000000延续整理到0x8a000000,并将0x1000巨细的内核池在研究人员的VMware虚拟机上对齐。在观点开发证实(PoC)中,研究人员使用0x86c1002c作为牢固地址来存储函数指针,而且在多次重复使用和重新启动系统时获得了很高的乐成率。地址0x88xxx02c和0x89xxx02c也是很好的候选工具,它们在高内存消耗目的中表现出色,例如同时运行许多应用程序的RDP服务器。

RDPDR客户端名称请求PDU可通过多次发送PDU来接纳具有受控数据的释放通道工具。 RDP服务器剖析客户端名称请求PDU时分配的内核池的巨细和数据都是可控的。研究人员可以使RDP服务器分配巨细为0xd0的内核池,以声明释放的MS_T120通道工具。通过向内核池中注入特制的数据,研究人员可以控制重用路由以使用可控函数指针执行函数挪用,从而控制扩展指令指针(EIP)。研究人员也可以使用客户端名称请求PDU将Shellcode写入内核池,由于客户端名称请求PDU的巨细和数据都可以由RDP客户端控制。在以下各节中我们将讨论有关在攻击中若何使用这两个PDU的所有详细信息。

破绽概述

为了明确说明破绽行使,研究人员将简要先容CVE-2019-0708发生的根本原因。 CVE-2019-0708是与悬空工具MS_T120虚拟通道相关的Use After Free(UAF)破绽。 MS_T120虚拟通道是RDP服务器内部使用的两个默认通道(MS_T120和CTXTW)之一,该默认通道在确立RDP毗邻时初始化。然则,RDP客户端也可以通过将“MS_T120”项添加到客户端MCS Connect初始PDU中的channelDefArray来建立名为“MS_T120”的自定义虚拟通道,如图1所示。

channelDefArray中的自定义MS_T120通道

RDP服务器吸收该请求,并在ChannelPointerTable工具中为MS_T120工具建立引用。图2显示ChannelPointerTable工具中有两个“MS_T120”通道工具引用。第一个为客户端MCS Connect初始PDU请求建立,第二个为RDP服务器内部使用而建立。

建立自定义的MS_T120通道工具

使用MCS通道加入请求加入自定义的MS_T120通道后,RDP客户端可以乐成打开MS_T120通道。若是RDP客户端将制作的数据发送到MS_T120通道(如图3所示),则将挪用rdpwx.dll模块中的MCSPortData函数。

用于释放MS_T120通道工具的PDU

在函数MCSPortData中,从第一个参数lpAddend的0x74偏移最先的数据由RDP客户端控制,而且当变量“v2”即是值“2”时,将挪用MCSChannelClose以释放MS_T120通道工具,如图4所示。

关闭MCSPortData中的通道

在MS_T120通道工具被释放之后,仍然有一个悬空指针在ChannelPointerTable工具的slot 0x1f中指向被释放的MS_T120通道工具,如图5所示。

释放了自定义的MS_T120通道工具

当RDP客户端断开毗邻时,将挪用函数RDPWD!SignalBrokenConnection,然后将挪用函数termdd!IcaChannelInput来访问slot 0x1f中释放的MS_T120工具,如图6所示。

重用释放的MS_T120工具挪用客栈

释放后重用(Reuse After Free)

如上所述,研究人员已经讨论了若何释放MS_T120通道工具,并在ChannelPointerTable工具中留下了指向MS_T120通道工具的悬空指针。现在,研究人员将先容若何重用释放的工具。在termdd!IcaChannelInput函数中,将挪用函数IcaFindChannel查找通道工具。当RDP客户端终止毗邻时,第二个参数slot_base将为0x05,第三个参数slot_index将为0x1f,因此函数IcaFindChannel将释放的MS_T120通道工具设置为返回值。若是使用伪造的MS_T120通道工具接纳释放的MS_T120通道工具,则可以通过从伪造的MS_T120通道内部获取函数指针(寄存器eax)的函数挪用(call [eax])来控制以下函数执行路径工具,如图7所示。

在IcaChannelInputInternal中重用路由

使用RDPDR客户端名称请求PDU和控制EIP接纳释放的MS_T120通道工具

在本节中,我们将讨论若何接纳释放的MS_T120通道工具以控制EIP。释放的MS_T120通道的巨细为0xc8(包罗8个字节的池头的0xd0),如图5所示。termdd!IcaChannelInputInternal函数将分配channel_data_size + 0x20巨细的内核池。若是研究人员希望函数termdd!IcaChannelInputInternal函数分配巨细为0xc8的内核池,则将客户端名称请求PDU的巨细设置为0xa8(0xc8-0x20),并将ComputerNameLen字段响应地设置为0x98。考虑到乐成分配池后存在内存复制操作,通过多次发送这些客户端名称请求PDU,研究人员确保释放的MS_T120池slot已被客户端名称请求PDU数据占用。此外,巨细为0xc8的内核池的前0x20字节是供termdd模块内部使用的,这意味着前0x20字节是不能控制的,而用于客户端名称请求PDU标头的以下0x10字节也不能控制可控制的,因此可控制的数据巨细总计为0x98(0xc8-0x20-0x10)。图8显示了RDP客户端若何组织RDPDR客户端名称请求PDU。

 RDPDR客户端名称请求接纳释放的MS_T120通道工具

图9显示了通过发送RDPDR客户端名称请求PDU建立的虚伪MS_T120通道工具的内存转储。伪造的MS_T120通道工具中的几个主要字段以差别的颜色符号。设置为绿色的4字节(DWORD)值0x00000000可以防止服务在hal!KeAcquireInStackQueuedSpinLockRaiseToSynch中溃逃,这由ExEnterCriticalRegionAndAcquireResourceExclusive挪用。设置浅蓝色的DWORD值0x00000000以确保条件检查,并使函数路由通过受控的函数指针eax到达函数挪用(call [eax])),如图7所示。

伪造的MS_T120通道工具

,

usdt支付接口

菜宝钱包(caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。

,

紫色的DWORD值0x86c10030设置在伪造的MS_T120通道工具的偏移量0x8c处,如图9所示。图10中的调试日志显示了若何在偏移量0x8c处获取伪造的工具地址并举行函数挪用(call [eax])来控制EIP。

在IcaChannelInputInternal中具有受控函数指针的函数挪用

现在,若何控制EIP已经注释清晰了,接下来就要讨论为什么将eax设置为地址0x86c10030,而将EIP设置为地址0x86c1002c。使用上一部门中先容的手艺,可以获得从地址0x86xxxxxx到0x8axxxxxx稳固的喷洒。在每个对齐的0x1000地址中,在偏移0x002c处有8个字节的数据是可以控制的,如图11所示。

带有Refresh Rect PDU的稳固喷洒

图12中的代码片断显示了RDP客户端若何组织Refresh Rect PDU以及将其发送到RDP服务器需要的次数。

若何组织Refresh Rect PDU以在RDP客户端中举行喷洒

在每个对齐的0x1000巨细的内核池中的8个字节的可控数据中,将偏移量0x0030(0x86c10030)的4个字节设置为0x86c1002c,这是阶段0 shellcode的硬编码地址。偏移量为0x002c(0x86c1002c)的其他4个字节用于存储阶段0的shellcode。下一节将先容有关Shellcode几个阶段的更多详细信息。

Shellcode

由于只有4个字节可用于阶段0 shellcode,因此研究人员使用了一个4字节shellcode的技巧“add bl,al; jmp ebx”,而不是“call/jmp ebx+30h” 跳转到shellcode中的一个阶段。当termdd!IcaChannelInputInternal执行 “call dword ptr [eax]” 汇编指令时,al为0x30,ebx指向伪造的MS_T120通道工具,RDP客户端可以在其中填充受控数据。第一阶段的shellcode从地址faked_MS_T120_channel_object + 0x30(0x867b3590)进入内核池,整个历程如图13所示。

阶段 0 Shellcode

值得一提的是,使用2字节的汇编代码 “add bl, al”,由于只能使用4字节的shellcode来实现“jmp ebx+0x30”。 这并不完善,由于当“bl”大于0xd0时,“add bl, al”中会泛起溢出,使“jmp ebx”能够跳转到错误的地址,从而导致行使失败。然则,这已经足够好了,由于理论上乐成率为81.25% (0xd/0x10)。

在讨论阶段一shellcode之前,研究人员将讨论阶段二或最终的shellcode。研究人员注意到,RDPDR客户端名称请求PDU也可以用于将随便巨细的最终内核shellcode发送到RDP服务器中的内核池。例如,研究人员组织了一个RDPDR客户端名称请求PDU,其数据长度为0x5c8,而且嵌入了有效载荷,如图14所示。

RDPDR客户端名称请求PDU发送的最终shellcode

当将带有Shellcode嵌入的RDPDR客户端名称请求PDU发送到RDP服务器时,PDMCS – Hydra MCS协议驱动程序会将数据存储在内核池中。有趣的是,该内核池在客栈上维护了一个引用,阶段一shellcode可以使用该引用来定位最终的shellcode。具体来说,此处的ECX寄存器指向客栈,地址ECX+0x28存储内核池地址。最终的shellcode位于内核池的0x434偏移处,如图15所示。

阶段一shellcode

偏移量0x434在差别的Windows版本中可能会有所差别,然则,通过在内核池中搜索最终的shellcode,很容易将阶段一shellcode编写为egg hunter ,使其具有通用性。

修复内核以制止溃逃

下面的事情是内核开发的一个例程,最终的shellcode首先修复返回值并修复内核,以免在shellcode完成后溃逃。然后,它执行内核shellcode,以将APC插入lsass.exe或spoolsv.exe并执行用户模式shellcode。图16显示了最终的shellcode若何修复ChannelPointerTable工具,修改返回地址并模拟ExReleaseResourceAndLeaveCriticalRegion函数的执行,以在KTHREAD中包罗WORD值。

最终的shellcode修复内核

修复内核后,将执行内核shellcode的函数部门。为了说明此破绽行使,研究人员使用了Sleepya公布的内核shellcode模板举行eternalblue破绽行使。用于演示的WinExec(' calc ')用户shellcode如图17所示。

最终的shellcode usermode  shellcode

总结

整个攻击链可以形貌如下:

1.与受害者确立联系;

2.用Refresh Rect PDU喷洒;

3.发送精心设计的PDU,强制释放MS_T120通道工具;

4.使用多个RDPDR客户端名称请求PDU占用释放的MS_T120通道工具;

5.发送带有RDPDR客户端名称请求PDU的最终shellcode;

6.终止毗邻以重新使用释放的MS_T120通道工具、控制EIP并执行各个阶段的Shellcode。

本文翻译自:https://unit42.paloaltonetworks.com/cve-2019-0708-bluekeep/:

网友评论