概览
2019年2月,checkpoint研究人员发布了Reverse RDP Attack攻击(https://research.checkpoint.com/reverse-rdp-attack-code-execution-on-rdp-clients/ )的文章,介绍了RDP协议客户端中的多个关键漏洞。研究人员进一步分析发现该攻击还可以针对Hyper-V发起攻击。
研究人员在RDP客户端中发现的路径遍历漏洞也适用于Hyper-V管理器的guest-to-host VM逃逸,该漏洞CVE编号为CVE-2019-0887,微软也已发布了针对该漏洞的补丁。
Hyper-V
研究人员发布该漏洞的相关情况后,有很多用户评论说RDP客户端的漏洞是否影响微软的Hyper-V产品。
图1: Reddit上关于Hyper-V漏洞的回复
众所周知,微软的Hyper-V是Azure 云中使用的一种虚拟化技术,也作为Windows 10操作系统中的虚拟化产品。与其他虚拟化技术类似,Hyper-V提供图形化接口来管理本地和远程虚拟机。
为了进行测试,研究人员安装了Hyper-V,并把之前的虚拟机也转换成Hyper-V机器。然后使用Hyper-V Manager程序连接到虚拟机。然后研究人员就看到了如图2所示的熟悉的设置窗口。
图2: Hyper-V VM的设置窗口,与mstsc.exe相同
可以看到,Hyper-V VM的GUI设置窗口与使用mstsc.exe进行RDP连接的GUI设置相同。而且,剪贴板资源默认是共享的。研究人员运行之前提交给微软的mstsc.exe的POC脚本,发现仍然有效。这样研究人员就发现了一个通过控制接口的Hyper-V guest-to-host VM逃逸,这个过程利用的是RDP漏洞。
下面是Hyper-V paste-only攻击场景:
https://www.youtube.com/embed/nSGlMJqQEh0
RDP & Hyper-V
实际上RDP被用作Hyper-V的控制面板,除了实现屏幕共享、远程键盘、同步键盘,微软决定将所有的特征都应用于RDP中。系统安全依赖于其中最弱的一环。换句话说,因为依赖软件库,Hyper-V Manager继承了RDP中的所有安全漏洞,以及使用的其他软件库中的漏洞。
补丁
研究人员在将漏洞提交给MSRC后,当天就得到了回复。几周后,该漏洞获得CVE编号CVE-2019-0887,并发布了补丁。
在分析补丁前,再回顾下该漏洞。恶意RDP服务器可以发送伪造的文件传输剪贴板内容,该内容会导致客户端机器进行文件遍历。研究人员希望mstscax.dll检查接收到的FileGroupDescriptorW剪贴板格式,并对其中包含的每个文件路径进行处理。
研究人员使用BinDiff对补丁进行分析,发现了大量修改的函数。研究人员查看import部分,发现了一个之前没有出现过的记录,如图3所示。
图3: 补丁DLL文件使用的PathCchCanonicalize()
函数PathCchCanonicalize可以将路径字符串转换成规范形式。那是如何调用该函数的呢?研究人员分析了引入补丁的函数:
图4: CFormatDataPacket::DecodeFormatData()被修改了
变化部分如图5所示:
图5: 在流中加入了对CFormatDataPacker::ValidateFilePaths()的调用
在处理FileGroupDescriptorW文件格式时,客户端将格式传递给验证blob结构的新函数。该新函数会检查数据的结构是否正确,然后计算每个文件名的规范格式:
图6: 计算每个文件名的规范格式
如果成功的话,规范输出会与原始文件名进行比较,如果不匹配就会产生错误。也就是说如果文件名中含有.或..形式的字符串,在转换成规范格式时会发送变化,导致有效性检查失败。
该补丁与最初的预期是一致的,路径遍历漏洞也修复了。
建议
目前已经发布了关于路径遍历漏洞的补丁,研究人员强烈建议所有用户安装补丁来保护RDP连接和Hyper-V环境。