編寫 PyKD 除錯指令碼,自動化地 Sniffer VMware 的 RPC 請求

Editor發表於2018-03-07


去年,我和同事在各種會議上討論了關於VMware的不同話題。因為我們曾經詳細編寫了與RPC介面互動的工具,所以談到了關於RPC工具的話題。其間,還簡要討論瞭如何嗅探RPC請求以幫助開發漏洞,除錯RPC請求,甚至模糊測試。由於我們僅僅在以前的簡報中簡要介紹過RPC,因此我決定在本篇文章中詳細介紹一下。


由於對VMware的相關方面的工具比較失望,從而促使我開始進行這方面的研究。當時,我正在學習如何利用VMware漏洞,並且需要了解我的RPC請求是如何傳送給主機的。由於沒有找到好用的工具,所以決定自己寫一個。


在本篇部落格中,我將討論如何編寫PyKD指令碼來嗅探RPC請求,弄清這個問題有助於利用VMware RPC的漏洞攻擊。


細節


RPC請求可以通過不同的方式從客戶端傳送到主機:後門通道,vsockets等等。這篇部落格介紹了通過後門通道方式傳送的GuestRPC請求,我並不打算深入瞭解後門通道的工作方式。目前需要知道的重點是backdoor 函式中負責傳送GuestRPC訊息的是BDOOR_CMD_MESSAGE,其操作碼為0x1E。後門通道函式的完整列表可以在open-vm-toolsgitrepo的backdoor_def.h中找到。


我的主要目標之一是找到正在解析RPC請求的位置。一種有效的方法是定位其中一個RPC函式的位置,然後通過傳送RPC請求除錯該函式被呼叫的位置。通過使用VMware工具附帶的rpctool.exe,就可以傳送測試RPC請求。


編寫 PyKD 除錯指令碼,自動化地 Sniffer VMware 的 RPC 請求


在IDA中,如果我們搜尋字串“vmx.capability.copypaste_version”,將在rdata段發現它:


編寫 PyKD 除錯指令碼,自動化地 Sniffer VMware 的 RPC 請求


如果通過xref交叉引用查詢呼叫位置,會發現下面的程式碼:


編寫 PyKD 除錯指令碼,自動化地 Sniffer VMware 的 RPC 請求


如果仔細檢視sub_140084230,我們就會注意到這就是vmx.capability.copypaste_version函式的實現:


編寫 PyKD 除錯指令碼,自動化地 Sniffer VMware 的 RPC 請求


下一步是在該函式中設定一個斷點來找出其呼叫位置,以確定最初解析請求的位置。


在這種情況下,應將斷點設定為vmware_vmx + 0x84230(適用於VMware Workstation 12.5.8)。


編寫 PyKD 除錯指令碼,自動化地 Sniffer VMware 的 RPC 請求


如果我們仔細觀察vmware_vmx + 0x69486處的函式,我們發現它實際上是在將請求分派到匹配的RPC函式之前解析請求的函式。在這種情況下,也就是vmx.capability.copypaste_version。


這個函式的邏輯非常簡單,簡而言之,RPC請求作為引數傳遞。該函式首先檢查RPC請求是否包含要呼叫的有效RPC函式。這是通過迴圈內建函式並strncmp(比較)請求中的函式來實現的。如果找到該函式,它會檢查是否有足夠的許可權執行。如果有足夠的許可權,它將執行RPC功能。

我們可以使用下面的斷點將RPC請求從Windbg中dump出來:

bp vmware_vmx+OFFSET“.echo; db r8 r8+r9; g;”


編寫 PyKD 除錯指令碼,自動化地 Sniffer VMware 的 RPC 請求


工具


根據目前所獲取到的所有資訊,我們可以進一步編寫一個PyKD指令碼來為我們自動完成所有的工作,指令碼的邏輯非常簡單:

1.附加到vmware_vmx.exe
2.在解析RPC請求的函式中設定一個斷點
3.斷點回撥函式應該從r8轉儲r9個位元組,因為r8儲存了請求,而r9是請求的大小
4.繼續


首先,我們必須初始化,然後使用initialize和attachProcess API來附加到程式:

編寫 PyKD 除錯指令碼,自動化地 Sniffer VMware 的 RPC 請求


使用setBp函式設定斷點,該函式採用應設定斷點的函式地址和回撥函式:

編寫 PyKD 除錯指令碼,自動化地 Sniffer VMware 的 RPC 請求


回撥函式使用loadBytes來讀取r8中的位元組:

編寫 PyKD 除錯指令碼,自動化地 Sniffer VMware 的 RPC 請求


結論


既然我們能夠實時到嗅探這些流量,我們就可以瞭解如何傳送某些請求以緩解exploit開發甚至模糊攻擊。 VMware以及其他虛擬化軟體中的bugs仍是一個有趣的研究領域,這些bug的影響可能非常深遠,因為這些程式通常被認為是資訊保安從業人員需要的工具。我們希望有更多的人可以發現這些產品中的漏洞,減少相關方面的攻擊,能夠嗅探這些通訊就是一個好的開始。如果你還沒有開始,請檢視其他近期釋出的有關VMware bug的文章,希望可以獲得靈感。


我的推特地址為AdbHariri,還可以關注我們的團隊以獲取最新的漏洞利用技術和安全補丁。


相關文章