0
本文作者: 李勤 | 2019-10-01 10:51 |
雷鋒網(wǎng)注:該報(bào)告轉(zhuǎn)載自360信息安全部涅槃團(tuán)隊(duì)博文,原文標(biāo)題為《iPhone BootROM 漏洞說明及威脅評(píng)估》。
AP:應(yīng)用處理器。
SEP:安全協(xié)處理器。
SecureROM:又稱 BootROM 是固化在 iPhone 只讀區(qū)域中的一段代碼,該區(qū)域中的代碼是啟動(dòng)鏈及啟動(dòng)信任鏈的起點(diǎn),主要負(fù)責(zé)加載后續(xù)的啟動(dòng)鏈,該區(qū)域中的代碼無(wú)法通過系統(tǒng)更新來更新,所以該區(qū)域中的代碼一旦出現(xiàn)安全問題,影響是非常大,并且這種影響是持久的,只能通過召回設(shè)備修復(fù)問題。關(guān)于 SecureROM 的具體功能,可以參考筆者之前寫的一篇文章 《SecureROM 分析筆記》。
GID:GID 是固化在 iPhone 加密引擎中的 AES 密鑰,所有相同型號(hào)的設(shè)備具有相同的密鑰,比如:所有 iPhone X 都具有相同的密鑰。該密鑰主要用來解密系統(tǒng)更新固件。SEP 有獨(dú)立的 GID,與 AP 的不同。
UID:UID 也是固化在 iPhone 加密引擎中的 AES 密鑰,但每臺(tái)手機(jī)都有不同的 UID,UID 主要用來加解密用戶相關(guān)的數(shù)據(jù)。SEP 有獨(dú)立的 UID,與 AP 的不同。
北京時(shí)間9月 28 日凌晨,國(guó)外安全人員 @axi0mX 通過 Twitter 公開了一個(gè) iPhone BootROM 的漏洞[1],同時(shí)公開了相關(guān)的利用代碼[2]。
就像 @axi0mX 在推文中所說[3],這是從 2010 開始,9 年間,第一個(gè)公開的針對(duì) 64 位蘋果設(shè)備的可以利用的 BootROM 的漏洞。我們知道越獄社區(qū)一直在跟蘋果設(shè)備的安全性做著“斗爭(zhēng)”,隨著蘋果不斷地提高 iPhone 的安全性,越獄變得越來越難,而 BootROM 漏洞不僅可以用來越獄當(dāng)前最新的 iOS 版本,還可以用來越獄將來的 iOS 版本(因?yàn)橛布┒礋o(wú)法通過系統(tǒng)更新進(jìn)行修補(bǔ)),所以該漏洞在越獄社區(qū)中引起了巨大的轟動(dòng)。
影響從 iPhone 4s 到 iPhone X 的所有設(shè)備,同時(shí)影響這段時(shí)間內(nèi)生產(chǎn)的 iPad 設(shè)備。
@axi0mX 是通過二進(jìn)制對(duì)比發(fā)現(xiàn)的這個(gè)漏洞[4],同時(shí) @littlelailo 獨(dú)立的通過代碼審計(jì)的方式也發(fā)現(xiàn)了這個(gè)漏洞[5]。@littlelailo 對(duì)這個(gè)漏洞的成因及利用思路做了說明[6][7]。
由于 @littlelailo 對(duì)漏洞的成因已經(jīng)說得非常清楚了,這里就不再畫蛇添足,下面是@littlelailo 說明的直接機(jī)器翻譯結(jié)果。下文中的圖像并不是指圖片,而是指 img4 固件文件。
這個(gè)錯(cuò)誤一開始也被稱為Moonshine
基本上,我查看過的所有bootrom中都存在以下錯(cuò)誤:
1.當(dāng)usb開始通過dfu獲取圖像時(shí),dfu注冊(cè)一個(gè)接口來處理所有命令,并為輸入和輸出分配一個(gè)緩沖區(qū)
2.如果您將數(shù)據(jù)發(fā)送到dfu,則設(shè)置包由主代碼處理,然后調(diào)出接口代碼
3.接口代碼驗(yàn)證wLength短于輸入輸出緩沖區(qū)的長(zhǎng)度,如果是這種情況,它將使用指向輸入輸出緩沖區(qū)的指針更新作為參數(shù)傳遞的指針
4.然后返回wLength,這是它要接收到緩沖區(qū)的長(zhǎng)度
5. USB主代碼然后使用長(zhǎng)度更新全局變量,并準(zhǔn)備接收數(shù)據(jù)包
6.如果接收到數(shù)據(jù)包,則通過作為參數(shù)傳遞的指針將其寫入輸入輸出緩沖區(qū),并使用另一個(gè)全局變量來跟蹤已經(jīng)接收了多少字節(jié)
7.如果接收到所有數(shù)據(jù),則再次調(diào)用dfu特定代碼,然后繼續(xù)將輸入輸出緩沖區(qū)的內(nèi)容復(fù)制到以后從中引導(dǎo)映像的存儲(chǔ)位置
8.之后,usb代碼將重置所有變量并繼續(xù)處理新軟件包
9.如果dfu退出,則釋放輸入輸出緩沖區(qū),并且如果映像解析失敗,則bootrom重新輸入dfu
退出dfu可以通過發(fā)送dfu中止包或通過觸發(fā)USB重置觸發(fā)解析來完成
問題:
在第5步,將更新全局變量,并且Bootrom準(zhǔn)備接收數(shù)據(jù),但是使用便宜的控制器,您可以違反USB規(guī)范并且不發(fā)送任何信息(arduino主機(jī)控制器或類似的東西)。
然后,您可以觸發(fā)USB重置以觸發(fā)圖像解析。如果解析失敗,bootrom將再次輸入dfu,但未執(zhí)行步驟8,因此全局變量仍包含所有值。
但是,執(zhí)行了步驟9,因此釋放了輸入輸出緩沖區(qū),而在步驟3中作為參數(shù)傳遞的指針仍然指向它。
因此,您可以通過將數(shù)據(jù)發(fā)送到設(shè)備來輕松觸發(fā)對(duì)已釋放緩沖區(qū)的寫入。
對(duì)A8的利用:
1.將0x40的隨機(jī)數(shù)據(jù)發(fā)送到dfu,必須發(fā)送此數(shù)據(jù),否則您將無(wú)法使用USB重置ctrlReq(bmRequestType = 0x21,bRequest = 1,wLength = 0x40)退出dfu
2.通過發(fā)送ctrlReq(0x21,1,0)ctrlReq(0xa1,3,1)ctrlReq(0xa1,3,1)ctrlReq(0xa1,3,1)ctrlReq(0xa1,3,1)使dfu處于等待USB重置的狀態(tài)ipwndfu dfu.py)
3.僅發(fā)送了帶有bmRequestType 0x21和bRequest 1以及有效載荷大小的wLength的設(shè)置數(shù)據(jù)包(此數(shù)據(jù)包將更新全局變量)
4.發(fā)送一個(gè)狀態(tài)包以標(biāo)記控制傳輸?shù)慕Y(jié)束(即使將wLength設(shè)置為一個(gè)值,我們也會(huì)跳過數(shù)據(jù)階段)
5.觸發(fā)總線復(fù)位
6.等待設(shè)備重新輸入dfu(現(xiàn)在將釋放輸入輸出緩沖區(qū),并且將在釋放的緩沖區(qū)下分配usb任務(wù))
7.發(fā)送設(shè)置的配置請(qǐng)求ctrlReq(bmREQ_SET,USB_REQUEST_SET_CONFIGURATION,wLength = Payloadsize),但將有效載荷與數(shù)據(jù)階段一起發(fā)送(bootrom中的設(shè)置配置處理程序忽略wLength)
有效負(fù)載將覆蓋usb任務(wù)結(jié)構(gòu),并且將成為usb堆棧之后的下一個(gè)分配。通過定位USB任務(wù)結(jié)構(gòu)中的鏈接列表,您可以插入偽造的任務(wù)。
而且您可以將usb任務(wù)堆棧用作暫存空間,因?yàn)榭雌饋硭肋h(yuǎn)都不會(huì)寫到那么高。
當(dāng)dfu退出并且usb任務(wù)停止時(shí),將生成該代碼。因此,您可以在第7步之后發(fā)送dfu中止數(shù)據(jù)包,并在該代碼執(zhí)行exec的情況下控制所有較高的寄存器,因?yàn)槟奶摷偃蝿?wù)將添加到列表中并在以后的某個(gè)時(shí)刻運(yùn)行。
限制條件
漏洞利用的限制條件:需要將設(shè)備置入 DFU (Device Firmware Upgrade)模式。
漏洞及利用目前所具有的能力
1、BootROM 中的任意代碼執(zhí)行能力。
2、開啟 CPU 的硬件調(diào)試能力(JTag)。
3、使用 AP 的 GID 進(jìn)行加解密。
4、使用 AP 的 UID 進(jìn)行加解密。
任意代碼執(zhí)行能力及 CPU 級(jí)調(diào)試能力
BootROM 是 iPhone 啟動(dòng)信任鏈的基礎(chǔ),在 BootROM 中具有了任意代碼執(zhí)行能力,意味著 iPhone 的整個(gè)啟動(dòng)信任鏈被打破了,最終可以用來加載修改過的 iOS 內(nèi)核,從而破壞 iOS 的基礎(chǔ)安全特性。這部分能力主要會(huì)被用來做越獄(這里的越獄是指越獄所帶來的能力,而不僅僅指越獄行為)。
CPU 級(jí)調(diào)試能力,這個(gè)能力主要會(huì)被用來分析 iPhone 的安全啟動(dòng)鏈及調(diào)試相關(guān)的漏洞及利用。
使用AP 的 GID 進(jìn)行加解密的能力
使用 AP 的 GID 進(jìn)行加解密的能力主要會(huì)被用來解密 iPhone 的固件,破壞了蘋果對(duì)相關(guān)組件的封閉性保護(hù),進(jìn)而可以用來評(píng)估相關(guān)模塊的安全性,下面是利用該能力解密出來的固件密碼:
; iOS-v13.1.1-17A854, iPhone X
; iBoot.d22.RELEASE.im4p
IV: 1ef67798a0c53116a47145dfff0aac60
KEY: 9a6ddfb9f432a971be8ae360c6ce0a8e3170f372d4e3158bb04e61d81798929f
使用 AP 的 UID 進(jìn)行加解密的能力
根據(jù)筆者目前所掌握的知識(shí),用戶相關(guān)數(shù)據(jù)的密鑰主要是使用 SEP 的 UID 進(jìn)行的加解密,因此尚不清楚使用 AP 的 UID 進(jìn)行加解密的能力是否會(huì)對(duì)用戶數(shù)據(jù)造成直接的威脅。
對(duì)用戶數(shù)據(jù)的威脅評(píng)估
對(duì)用戶數(shù)據(jù)威脅的評(píng)估結(jié)論:筆者認(rèn)為這個(gè)漏洞對(duì)用戶數(shù)據(jù)僅構(gòu)成間接威脅,沒有構(gòu)成直接威脅。
對(duì)用戶數(shù)據(jù)威脅評(píng)估基于的前提:用戶設(shè)置了鎖屏密碼。
一些離散的、iPhone 數(shù)據(jù)安全相關(guān)的知識(shí):
1、 iPhone 的磁盤是加密的(SEP UID 相關(guān))。
2、 設(shè)備中保存密碼是加密的(SEP UID 相關(guān),且與鎖屏密碼相關(guān))。
3、 iPhone 中的用戶文件是加密的(SEP UID 相關(guān),且間接地與鎖屏密碼相關(guān))。
4、 用戶相關(guān)的數(shù)據(jù),只有在設(shè)備重啟后,第一次解鎖屏幕后,才有可能被解密,即:繞過鎖屏不會(huì)造成用戶數(shù)據(jù)解密。
5、 破解鎖屏密碼主要在 SEP 上進(jìn)行,根據(jù)蘋果的文檔[8],蘋果做了相關(guān)的防暴力破解的防護(hù)。
通過上面的一些知識(shí)點(diǎn),以及我們前面提到的漏洞限制條件:需要將設(shè)備置入 DFU 模式(DFU 模式意味著需要將設(shè)備重啟)筆者可以得到如下 2 個(gè)結(jié)論:
1、 利用該漏洞,攻擊者雖然無(wú)法直接解密用戶數(shù)據(jù),但是可以解密 iPhone 磁盤的數(shù)據(jù)分區(qū),該分區(qū)中包含一些系統(tǒng)日志及程序行為的日志。
2、 利用該漏洞,從取證的角度,攻擊者可以暴力破解鎖屏密碼,但仍會(huì)面臨一些限制。
但事情沒有絕對(duì)的,做過應(yīng)用防護(hù)的應(yīng)該清楚:如果端被攻破,那么端上產(chǎn)生的數(shù)據(jù)會(huì)變得不安全;端上使用的數(shù)據(jù)也會(huì)變得不安全。前面我們說過,利用這個(gè)漏洞攻擊者可以破壞內(nèi)核完整性,進(jìn)而破壞內(nèi)核的安全特性,獲得內(nèi)核空間的任意代碼執(zhí)行能力,獲得用戶空間的任意代碼執(zhí)行能力,因此:雖然攻擊者無(wú)法利用該漏洞直接獲取用戶數(shù)據(jù),但是配合一些其它的攻擊手段,攻擊者還是可以獲取用戶數(shù)據(jù)。
1、不要將自己的受此漏洞影響的蘋果設(shè)備交給他人。
2、將鎖屏密碼設(shè)置為 6 位數(shù)字,或者設(shè)置為更復(fù)雜的由字母+數(shù)字構(gòu)成的密碼。
3、定期重啟設(shè)備。
1、https://twitter.com/axi0mX/status/1177542201670168576
2、https://github.com/axi0mX/ipwndfu
3、https://twitter.com/axi0mX/status/1177542362853040129
4、https://twitter.com/axi0mX/status/1177544539046703104
5、https://twitter.com/littlelailo/status/1177554568626024448
6、https://twitter.com/littlelailo/status/1177555154549313537
7、https://gist.github.com/littlelailo/42c6a11d31877f98531f6d30444f59c4
8、《iOS Security Guide》,iOS 12.3
2019-09-28 安全人員 @axi0mX 通過 Twitter 公開漏洞
2019-09-30 360信息安全部 涅槃團(tuán)隊(duì) 完成本次報(bào)告
2019-09-30 360CERT發(fā)布本次報(bào)告
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。