首页 >> 网络安全 >>漏洞利用 >> 反向RDP攻击:Hyper-V连接
详细内容

反向RDP攻击:Hyper-V连接

概观

今年早些时候,我们发表了有关反向RDP攻击的研究。在我们之前的博客文章中,我们描述了如何在流行的远程桌面协议(RDP)客户端中发现许多关键漏洞。但是,我们的研究并不仅限于此。在此博客文章中,我们讨论了新的发展,包括一个新的目标:Microsoft的Hyper-V。


TL; DR –我们在Microsoft的RDP客户端中发现的Path-Traversal漏洞也可用作Hyper-V Manager中从客户机到主机的VM转义。在此启示之后,Microsoft发布了CVE(CVE-2019-0887),并发布了该漏洞的补丁程序。


Hyper-V的?它不是RDP客户端

发布之后,我们收到了许多评论,询问Microsoft的RDP客户端中的漏洞是否会影响Microsoft的Hyper-V产品。这是Reddit讨论中的一个这样的问题:

1.png

图1: Reddit评论,询问该漏洞对Hyper-V的影响。

背景知识:Microsoft的Hyper-V是一种虚拟化技术,用于Microsoft的Azure云中,并作为Windows 10操作系统之上的虚拟化产品提供。与其他虚拟化技术类似,Hyper-V带有图形用户界面,使用户可以管理本地/远程虚拟机(VM)。


在有关Hyper-V的简短课程之后,问题仍然存在:Hyper-V与RDP有什么关系?答案可在术语“增强的会话”中找到,这与Microsoft等同于VMWare的VM工具。增强的会话为用户提供了扩展功能,其中包括来宾和主机之间的剪贴板同步。您可能还记得,我们已经在Microsoft的RDP客户端实现的剪贴板同步中发现了一个路径遍历漏洞。现在是时候检查相同的漏洞是否也可以在Hyper-V情况下使用。


为了执行测试,我们在计算机上安装了Hyper-V,然后将初始虚拟机转换为Hyper-V计算机。然后,我们使用Hyper-V Manager程序并连接到我们的虚拟机。很快,我们遇到了熟悉的“设置”窗口,如图2所示。

2.png

图2: Hyper-V VM的“设置”窗口,与中的窗口相同mstsc.exe。


如我们所见,这与使用时的RDP连接设置完全相同mstsc.exe。这看起来很有希望。最重要的是,默认情况下共享剪贴板资源,这是增强的会话。


出于动机,我们运行了该mstsc.exe案例中最初提交给Microsoft的脚本,并且该脚本有效。我们刚刚发现,使用RDP漏洞通过控制界面可以从Hyper-V来宾到主机VM!


RDP和Hyper-V –解释

事实证明,RDP在后台用作Hyper-V的控制平面。微软没有重新实现屏幕共享,远程键盘和同步剪贴板,而是决定所有这些功能已经作为RDP的一部分实现了,那么为什么在这种情况下也不要使用它呢?在与Microsoft的Dana Baril的联合BlackHat演示中,我们详细介绍了另一种基于虚拟化的安全隔离技术以及它所依赖的RDP的自定义版本。


尽管任何安全研究人员都很难错过微软为测试和改进其Hyper-V技术的安全性所做的努力,但我们可以从这项研究中学到重要的教训。俗话说:您的系统只有最薄弱的一环。换句话说,通过依赖于其他软件库,Hyper-V Manager继承了RDP及其使用的任何其他软件库中发现的所有安全漏洞。


尽管这一课听起来很琐碎,但是众所周知,更新版本和跟踪外部软件依赖项中的漏洞是一个非常困难的问题。


微软的补丁

在我们以前的出版物中,我们引用了Microsoft的官方回复。最重要的是,没有针对Path-Traversal漏洞的补丁,甚至没有获得官方的CVE。但是,这一次,微软似乎决定修复此漏洞。在向MSRC披露该漏洞对Hyper-V的影响后,我们立即得到答复,他们将再次对其进行研究。几周后,为此打开了一张新的MSRC票证,随后产生了正式的CVE,CVE-2019-0887和一个补丁。


在开始分析补丁之前,让我们回顾一下该漏洞。恶意的RDP服务器可以发送精心设计的文件传输剪贴板内容,这将导致客户端计算机上的路径遍历。因此,我们希望看到mstscax.dll它将检查收到的FileGroupDescriptorW剪贴板格式,并清理其中包含的每个文件路径。


我们决定使用BinDiff分析Microsoft的修复程序,但不幸的是,它发现了数十种修改后的功能。为了清除混乱,我们查看了import部分,并看到了一个以前没有的新条目,如图3所示。

3.png

图3: PathCchCanonicalize()已修补的.dll文件现在使用该图。

根据MSDN,函数PathCchCanonicalize“将路径字符串转换为规范形式。”这恰恰是最初所缺少的。下一个问题是谁调用此功能?很快,我们看到了引入修复程序的函数:

4.png

图4:CFormatDataPacket::DecodeFormatData()已更改,如BinDiff所示。

更改本身可以在图5中看到:

5.png

图5:CFormatDataPacker::ValidateFilePaths()对流程的调用已添加。

当处理传入的FileGroupDescriptorW文件格式时,客户端将格式传递给新功能,以验证Blob的结构。这个新函数检查数据的结构是否正确,然后为每个文件名计算规范化形式:

figure6.png

图6:计算每个文件名的规范化形式。

如果成功,则将规范化的输出与原始文件名进行比较,两者之间的任何不匹配都会导致错误。这意味着,如果我们的文件名包含格式为“。”或“ ..”的字符串,则在转换为规范化格式时将被更改,从而导致有效性检查失败。


似乎该修复程序符合我们的最初期望,并且我们的Path-Traversal漏洞现已修复。


结论

现在有一个针对Path-Traversal漏洞的补丁程序,我们强烈建议所有用户安装该补丁程序,以保护其RDP连接和Hyper-V环境。

我们的研究表明,研究人员永远无法知道给定的研究项目是否已经结束。在“完成” RDP研究(充满喜怒无常)之后,我们从研究社区收到的反馈帮助我们发现了所发现漏洞的全部含义,这超出了我们研究的初始RDP范围。

技术支持: 建站ABC | 管理登录