溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何通過macOS的磁盤管理工具實(shí)現(xiàn)系統(tǒng)提權(quán)

發(fā)布時(shí)間:2021-12-18 14:58:10 來源:億速云 閱讀:203 作者:柒染 欄目:安全技術(shù)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)如何通過macOS的磁盤管理工具實(shí)現(xiàn)系統(tǒng)提權(quán),文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

    ZDI的研究人員“ccpwd”在一個(gè)名叫“diskmanagementd”的macOS守護(hù)進(jìn)程中,發(fā)現(xiàn)了一個(gè)基于堆的緩沖區(qū)溢出漏洞。diskmanagementd這個(gè)服務(wù)主要負(fù)責(zé)對(duì)磁盤驅(qū)動(dòng)器進(jìn)行管理和分區(qū),用戶可以通過磁盤實(shí)用工具(Disk Utility)來與該服務(wù)進(jìn)行交互。該服務(wù)將會(huì)運(yùn)行一個(gè)Mach服務(wù)器,并允許客戶端使用Mach IPC接口來與服務(wù)器端通信(發(fā)送和接收信息)。通過這種RPC機(jī)制,客戶端可以在Mach服務(wù)器中執(zhí)行各種通過MIG(Mach接口生成器)生成的功能函數(shù)。

漏洞分析

所有的通信數(shù)據(jù)都需要經(jīng)過launchd,即macOS的init初始化實(shí)現(xiàn)。關(guān)于該進(jìn)程的更多細(xì)節(jié)可以通過查看其信息屬性列表文件來了解,文件路徑如下:

/System/Library/LaunchDaemons/com.apple.diskmanagementd.plist

一開始,守護(hù)進(jìn)程會(huì)分配一個(gè)調(diào)用函數(shù),在之后發(fā)送和接收Mach消息時(shí),內(nèi)部進(jìn)程通信將需要調(diào)用這個(gè)函數(shù)。

如何通過macOS的磁盤管理工具實(shí)現(xiàn)系統(tǒng)提權(quán)

在這里,CFMachPortCreateWithPort會(huì)分配一個(gè)函數(shù)sub_10000C241來作為負(fù)責(zé)處理Mach消息的回調(diào)函數(shù),接收Mach消息的地址為0x10000BE1F。根據(jù)msgh_id,Mach消息中的某個(gè)值會(huì)傳送一條操作指令或函數(shù)ID,sub_10000C241會(huì)間接使用這個(gè)ID來作為兩個(gè)遠(yuǎn)程函數(shù)的調(diào)度表索引。sub_100001DA2和sub_100002005分別負(fù)責(zé)啟動(dòng)和移除后續(xù)的通信會(huì)話。

如何通過macOS的磁盤管理工具實(shí)現(xiàn)系統(tǒng)提權(quán)

Mach端口是單向通信的,這也就意味著每個(gè)發(fā)送、接收請(qǐng)求都需要使用單獨(dú)的端口,蘋果稱之為:

“端口是請(qǐng)求服務(wù)的客戶端和提供服務(wù)的服務(wù)器之間單向通信通道的端點(diǎn)。如果要對(duì)此類服務(wù)請(qǐng)求提供答復(fù),則必須使用第二個(gè)端口,這與Unix中的(單向)管道類似?!?/p>

如何通過macOS的磁盤管理工具實(shí)現(xiàn)系統(tǒng)提權(quán)

函數(shù)sub_10000CCA9是可以通過sub_100001DA2訪問到的,另一個(gè)Mach端口通過回調(diào)函數(shù)sub_10000DACC來創(chuàng)建,端口會(huì)保存在一個(gè)字典里,鍵名為“Comms-F2TPort”。緩沖區(qū)0x1000字節(jié)處用于處理Mach消息的響應(yīng),并且信息保存在字典中鍵名為“?Comms-F2T-replyarea”的位置。

如何通過macOS的磁盤管理工具實(shí)現(xiàn)系統(tǒng)提權(quán)

其中,setObject:forKey用于向字典中添加鍵值對(duì):

如何通過macOS的磁盤管理工具實(shí)現(xiàn)系統(tǒng)提權(quán)

當(dāng)客戶端發(fā)送一條消息時(shí),sub_10000DACC將會(huì)被觸發(fā),然后根據(jù)msgh_id來訪問MIG遠(yuǎn)程程序調(diào)用。接下來,我們將注意力主要放在函數(shù)sub_1000087C9的身上:

如何通過macOS的磁盤管理工具實(shí)現(xiàn)系統(tǒng)提權(quán)

緩沖區(qū)溢出發(fā)生在sub_1000087C9函數(shù)中,當(dāng)用戶輸入數(shù)據(jù)長(zhǎng)度經(jīng)過計(jì)算后偏移量超過0x1000時(shí),便會(huì)發(fā)生緩沖區(qū)溢出。

如何通過macOS的磁盤管理工具實(shí)現(xiàn)系統(tǒng)提權(quán)

0x1000響應(yīng)緩沖區(qū)基本上為r14,用戶輸入從偏移量0x38處開始,所以剩下的0xfc8

字節(jié)即為用戶輸入?yún)^(qū)域,當(dāng)輸入數(shù)據(jù)填充至0xfc8處時(shí),strlen將會(huì)返回相同的值。經(jīng)過計(jì)算之后,最終的值為 0xfcc [ ((0xfc8 + 1) + 3) & 0xfffffffc]。在地址0x100008ABD處,偏移量將會(huì)變成0x1004 [0xfcc+0x38],這里允許泄露4個(gè)字節(jié),并寫入4個(gè)字節(jié)數(shù)據(jù),因此攻擊者就可以利用這種特性來實(shí)現(xiàn)攻擊了。但是這里的數(shù)據(jù)泄露效果不是很顯著,因?yàn)榇笮H為0x1000,而寫入操作需要在0x1004處完成,這也就意味著程序只能從后續(xù)數(shù)據(jù)塊中讀取4個(gè)字節(jié)的數(shù)據(jù)。

這里有幾個(gè)限制,首先是輸入數(shù)據(jù)中不能包含空字符,因?yàn)檫@將導(dǎo)致strlen在空字符處停止。另一個(gè)限制是在緩沖區(qū)結(jié)束后寫入的數(shù)據(jù)將始終是var_dc的內(nèi)容,這部分內(nèi)容就是sub b30返回的錯(cuò)誤代碼。

如何通過macOS的磁盤管理工具實(shí)現(xiàn)系統(tǒng)提權(quán)

上述就是小編為大家分享的如何通過macOS的磁盤管理工具實(shí)現(xiàn)系統(tǒng)提權(quán)了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI