首页
社区
课程
招聘
[翻译]编写 PyKD 调试脚本,自动化地 Sniffer VMware 的 RPC 请求
发表于: 2018-3-2 15:01 6481

[翻译]编写 PyKD 调试脚本,自动化地 Sniffer VMware 的 RPC 请求

2018-3-2 15:01
6481

去年,我和同事在各种会议上讨论了关于VMware的不同话题。因为我们曾经详细编写了与RPC接口交互的工具,所以谈到了关于RPC工具的话题。其间,还简要讨论了如何嗅探RPC请求以帮助开发漏洞,调试RPC请求,甚至模糊测试。由于我们仅仅在以前的演示文稿中简要介绍过RPC,因此我决定在本篇文章中详细介绍一下。

由于对VMware的相关方面的工具比较失望,从而促使我开始进行这方面的研究。当时,我正在学习如何利用VMware漏洞,并且需要了解我的RPC请求是如何发送给主机的。由于没有找到好用的工具,所以决定自己写一个。

在本篇博客中,我将讨论如何编写PyKD脚本来嗅探RPC请求,弄清这个问题有助于利用VMware RPC的漏洞攻击。

RPC请求可以通过不同的方式从客户端发送到主机:后门通道,vsockets等等。这篇博客介绍了通过后门通道方式发送的GuestRPC请求,我并不打算深入了解后门通道的工作方式。目前需要知道的重点是backdoor 函数中负责发送GuestRPC消息的是BDOOR_CMD_MESSAGE,其操作码为0x1E。后门通道函数的完整列表可以在open-vm-tools git repo的backdoor_def.h中找到。

我的主要目标之一是找到正在解析RPC请求的位置。一种有效的方法是定位其中一个RPC函数的位置,然后通过发送RPC请求调试该函数被调用的位置。通过使用VMware工具附带的rpctool.exe,就可以发送测试RPC请求。

图片描述

在IDA中,如果我们搜索字符串“vmx.capability.copypaste_version”,将在rdata段发现它:

图片描述

如果通过xref交叉引用查找调用位置,会发现下面的代码:

图片描述

如果仔细查看sub_140084230,我们就会注意到这就是vmx.capability.copypaste_version函数的实现:

图片描述

下一步是在该函数中设置一个断点来找出其调用位置,以确定最初解析请求的位置。

在这种情况下,应将断点设置为vmware_vmx + 0x84230(适用于VMware Workstation 12.5.8)。

图片描述

如果我们仔细观察vmware_vmx + 0x69486处的函数,我们发现它实际上是在将请求分派到匹配的RPC函数之前解析请求的函数。在这种情况下,也就是vmx.capability.copypaste_version。

这个函数的逻辑非常简单,简而言之,RPC请求作为参数传递。该函数首先检查RPC请求是否包含要调用的有效RPC函数。这是通过循环内置函数并strncmp(比较)请求中的函数来实现的。如果找到该函数,它会检查是否有足够的权限执行。如果有足够的权限,它将执行RPC功能。

我们可以使用下面的断点将RPC请求从Windbg中dump出来:

图片描述

根据目前所获取到的所有信息,我们可以进一步编写一个PyKD脚本来为我们自动完成所有的工作,脚本的逻辑非常简单:

1.附加到vmware_vmx.exe
2.在解析RPC请求的函数中设置一个断点
3.断点回调函数应该从r8转储r9个字节,因为r8保存了请求,而r9是请求的大小
4.继续

首先,我们必须初始化,然后使用initialize和attachProcess API来附加到进程:

图片描述

使用setBp函数设置断点,该函数采用应设置断点的函数地址和回调函数:

图片描述

回调函数使用loadBytes来读取r8中的字节:

既然我们能够实时到嗅探这些流量,我们就可以了解如何发送某些请求以缓解exploit开发甚至模糊攻击。 VMware以及其他虚拟化软件中的bugs仍是一个有趣的研究领域,这些bug的影响可能非常深远,因为这些程序通常被认为是信息安全从业人员需要的工具。我们希望有更多的人可以发现这些产品中的漏洞,减少相关方面的攻击,能够嗅探这些通信就是一个好的开始。如果你还没有开始,请查看其他近期发布的有关VMware bug的文章,希望可以获得灵感。

我的推特地址为AdbHariri,还可以关注我们的团队以获取最新的漏洞利用技术和安全补丁。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2019-2-1 18:28 被admin编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (3)
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我之前写了个用Frida  hook  vmware的脚本,打印出vmware的rpc协议
2018-3-9 12:12
0
雪    币: 231
活跃值: (2631)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
好文章  顶一下
2018-3-12 02:18
0
雪    币: 6
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
好文章,如果是从Esxi上分析的话,分析哪个进程?
2018-3-17 21:42
0
游客
登录 | 注册 方可回帖
返回
//