您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關如何通過macOS的磁盤管理工具實現系統提權,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
ZDI的研究人員“ccpwd”在一個名叫“diskmanagementd”的macOS守護進程中,發現了一個基于堆的緩沖區溢出漏洞。diskmanagementd這個服務主要負責對磁盤驅動器進行管理和分區,用戶可以通過磁盤實用工具(Disk Utility)來與該服務進行交互。該服務將會運行一個Mach服務器,并允許客戶端使用Mach IPC接口來與服務器端通信(發送和接收信息)。通過這種RPC機制,客戶端可以在Mach服務器中執行各種通過MIG(Mach接口生成器)生成的功能函數。
所有的通信數據都需要經過launchd,即macOS的init初始化實現。關于該進程的更多細節可以通過查看其信息屬性列表文件來了解,文件路徑如下:
/System/Library/LaunchDaemons/com.apple.diskmanagementd.plist
一開始,守護進程會分配一個調用函數,在之后發送和接收Mach消息時,內部進程通信將需要調用這個函數。
在這里,CFMachPortCreateWithPort會分配一個函數sub_10000C241來作為負責處理Mach消息的回調函數,接收Mach消息的地址為0x10000BE1F。根據msgh_id,Mach消息中的某個值會傳送一條操作指令或函數ID,sub_10000C241會間接使用這個ID來作為兩個遠程函數的調度表索引。sub_100001DA2和sub_100002005分別負責啟動和移除后續的通信會話。
Mach端口是單向通信的,這也就意味著每個發送、接收請求都需要使用單獨的端口,蘋果稱之為:
“端口是請求服務的客戶端和提供服務的服務器之間單向通信通道的端點。如果要對此類服務請求提供答復,則必須使用第二個端口,這與Unix中的(單向)管道類似。”
函數sub_10000CCA9是可以通過sub_100001DA2訪問到的,另一個Mach端口通過回調函數sub_10000DACC來創建,端口會保存在一個字典里,鍵名為“Comms-F2TPort”。緩沖區0x1000字節處用于處理Mach消息的響應,并且信息保存在字典中鍵名為“?Comms-F2T-replyarea”的位置。
其中,setObject:forKey用于向字典中添加鍵值對:
當客戶端發送一條消息時,sub_10000DACC將會被觸發,然后根據msgh_id來訪問MIG遠程程序調用。接下來,我們將注意力主要放在函數sub_1000087C9的身上:
緩沖區溢出發生在sub_1000087C9函數中,當用戶輸入數據長度經過計算后偏移量超過0x1000時,便會發生緩沖區溢出。
0x1000響應緩沖區基本上為r14,用戶輸入從偏移量0x38處開始,所以剩下的0xfc8
字節即為用戶輸入區域,當輸入數據填充至0xfc8處時,strlen將會返回相同的值。經過計算之后,最終的值為 0xfcc [ ((0xfc8 + 1) + 3) & 0xfffffffc]。在地址0x100008ABD處,偏移量將會變成0x1004 [0xfcc+0x38],這里允許泄露4個字節,并寫入4個字節數據,因此攻擊者就可以利用這種特性來實現攻擊了。但是這里的數據泄露效果不是很顯著,因為大小僅為0x1000,而寫入操作需要在0x1004處完成,這也就意味著程序只能從后續數據塊中讀取4個字節的數據。
這里有幾個限制,首先是輸入數據中不能包含空字符,因為這將導致strlen在空字符處停止。另一個限制是在緩沖區結束后寫入的數據將始終是var_dc的內容,這部分內容就是sub b30返回的錯誤代碼。
上述就是小編為大家分享的如何通過macOS的磁盤管理工具實現系統提權了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。