請勿將主文件夾共享給不受信任的訪問者
這篇文章是Pwn2Own比賽期間,研究人員發現的Parallels Desktop漏洞,Parallels Desktop 被稱為 macOS 上最強大的虛擬機軟件。可以在 Mac 下同時模擬運行 Win、Linux、Android 等多種操作系統及軟件而不必重啟電腦,并能在不同系統間隨意切換。
最新版的 Parallels Desktop 16 (PD16) 完美支持最新的 macOS Big Sur 并對 Windows 10 特別優化!可不重啟直接在 Mac 系統上運行 Win10 UWP 通用應用、運行游戲、使用 Windows 版軟件如 Office 辦公軟件、IE 瀏覽器、VisualStudio、AutoCAD 等。新版 PD16 支持 DirectX 11,大幅提升了啟動速度以及 3D 游戲圖形性能!!絕對是 Mac 用戶必備神器。
在Pwn2Own比賽期間,搜索有關安全性問題時,我注意到我的研究目標很奇怪:Parallels Desktop在主機操作系統(MacOS)上將用戶的主目錄作為Parallels 共享文件夾共享到Guest OS *,這也是默認的,除非你選擇退出并容忍虛擬化可用性問題。對于任何稍微了解基于unix的操作系統(MacOS就是其中的一個實例)并熟悉管理程序的標準安全性期望的人來說,這樣的設計決策會立即引起懷疑,也就是說,評判任何軟件供應商的設計決策不是我的工作。讓我們看看它是如何工作的?
在所有以MacOS為實例的基于Unix的操作系統上,從攻擊者的角度來看,對用戶主文件夾的寫入訪問本質上沒有任何理論上的可能性。雖然經典的操作系統長期以來一直接受這個事實,并在必要時按著要求確保特權不被使用,但虛擬機管理程序必須以前所未有的新方式來考慮其主機操作系統設計細節。
這里的第一個攻擊媒介是一個基本腳本,它通常被稱為“bash Profile”:
Profile是針對每個帳戶的數據存儲,比如一個電子商務網站的用戶購物車數據。Profile是HttpContext類的一個屬性,是ProfileBase類,繼承自SettingsBase類。所謂Provider,是你可以定義Profile如何存儲,默認是存儲在LocalServer數據庫中,需要網站重啟動不丟失數據,所以不能存在內存中。
當bash作為交互式登錄shell或具有——login選項的非交互式shell調用時,它首先從/etc/profile文件中讀取并執行命令(如果該文件存在的話)。讀取該文件后,它將按此順序查找~/.bash_profile, ~/.bash_login,和~/.profile,并從第一個存在且可讀的命令中讀取和執行命令。當shell開始禁止此行為時,可以使用——noprofile選項,MacOS Big Sur的man page(全稱為Manual page,是linux /unix 環境下命令與函數的幫助文檔)詳細介紹了'bash'。
顯然,在Linux上它提供了登錄shell,但是MacOS呢?這里沒有什么特別的:注冊的交互式shell二進制文件在每次你啟動終端應用程序時被執行或者其他一些進程在不可見的情況下為你執行。從MacOS Big Sur的摘錄中可以看到,Mac上的交互式shell行為在配置文件讀數方面完全符合Unix標準。
我們還知道MacOS在一段時間以前已經從bash切換到zsh作為默認的交互式shell,這毫不奇怪,因為它符合了類似的方式:
然后從$ZDOTDIR/.zshenv中讀取命令,如果shell是登錄shell,則從/etc/zprofile讀取命令,然后從$ZDOTDIR/.zprofile讀取命令。然后,如果shell是交互式的,則從/etc/zshrc讀取命令,然后從$ZDOTDIR/.zshrc讀取命令。最后,如果shell是一個登錄shell,則讀取/ etc / zlogin和$ ZDOTDIR / .zlogin,MacOS Big Sur的man page詳細介紹了'zsh'。
合并來看就是,在共享的主文件夾中放置一個惡意二進制文件,并從.zprofile或任何其他交互式shell配置文件調用它。每次啟動終端時,二進制文件將在主機操作系統上執行。這構成了一個用戶交互的RCE *plus*持久性,并且在虛擬化上下文中,是一個完整的訪問到主機的虛擬機轉義。切記,不要忘記使用.dot文件名模式隱藏ls的惡意內容。
是否必須與用戶互動?不一定。從基于Unix的操作系統的經典和默認設置出發,Mac有了一個位于用戶主目錄下的目錄LaunchAgents,該目錄本質上是一個啟動文件夾。用戶的應用程序可以通過在此處放置名為“ .plist”的特殊格式的配置文件來進行自我注冊,以在啟動時(或更具體地說,在用戶登錄時)運行。更多詳細信息,請參閱Apple的官方文檔。
需要注意的是,交互式shell配置文件和LaunchAgents不會耗盡攻擊者對用戶主文件夾的選項。另一件事是,我注意到一些軟件進程(如谷歌Chrome的ksfetch updater二進制)可以直接從~/Library/ cache運行,這也可能被劫持為一個完全自動化的任意代碼執行。這里的一般原則是,對用戶主文件夾的編寫訪問本質上等同于以潛在的方式在用戶權限下執行二進制文件。
概念驗證
這在Parallels Desktop 16.5.0 (M1和Intel)上演示了一個完整的客戶端到主機的虛擬機持久化,安裝了Parallels Tools的Ubuntu 20.04客戶操作系統:
- cp mybinary /media/psf/Home/.hello
- chmod +x /media/psf/Home/.hello
- echo "~/.hello" >> /media/psf/Home/.zprofile
帶有示例“惡意載荷”的概念驗證代碼也鏡像在我的github上。注意,它只包含M1的預構建有效載荷,如果你想在Intel Mac上對其進行測試,則需要對其進行重新構建。
總結
到目前為止,通常認為虛擬機管理程序至少強制執行虛擬機和主機操作系統之間的一些基本安全邊界和特權隔離。如果某個特定的管理程序產品或部署包含違反這一假設的設計原則,則必須在啟動虛擬機時明確警告用戶,而不需要找出一些特殊的隱藏選項或文檔說明。
在用戶方面,重要的是至少要知道危害系統的最簡單的方法,最容易受到攻擊的媒介通常會被最具破壞性的惡意軟件利用。
本文翻譯自:https://zerodayengineering.com/blog/dont-share-your-home.html如若轉載,請注明原文地址。