歡迎來到 黑吧安全網 聚焦網絡安全前沿資訊,精華內容,交流技術心得!

iPhone BootROM 漏洞說明及威脅評估

來源:本站整理 作者:佚名 時間:2019-10-06 TAG: 我要投稿

0x00 相關詞匯
AP:應用處理器。
SEP:安全協處理器。
SecureROM:又稱 BootROM 是固化在 iPhone 只讀區域中的一段代碼,該區域中的代碼是啟動鏈及啟動信任鏈的起點,主要負責加載后續的啟動鏈,該區域中的代碼無法通過系統更新來更新,所以該區域中的代碼一旦出現安全問題,影響是非常大,并且這種影響是持久的,只能通過召回設備修復問題。關于 SecureROM 的具體功能,可以參考筆者之前寫的一篇文章 《SecureROM 分析筆記》。
GID:GID 是固化在 iPhone 加密引擎中的 AES 密鑰,所有相同型號的設備具有相同的密鑰,比如:所有 iPhone X 都具有相同的密鑰。該密鑰主要用來解密系統更新固件。SEP 有獨立的 GID,與 AP 的不同。
UID:UID 也是固化在 iPhone 加密引擎中的 AES 密鑰,但每臺手機都有不同的 UID,UID 主要用來加解密用戶相關的數據。SEP 有獨立的 UID,與 AP 的不同。
 
0x01 事件起因
北京時間9月 28 日凌晨,國外安全人員 @axi0mX 通過 Twitter 公開了一個 iPhone BootROM 的漏洞[1],同時公開了相關的利用代碼[2]。
就像 @axi0mX 在推文中所說[3],這是從 2010 開始,9 年間,第一個公開的針對 64 位蘋果設備的可以利用的 BootROM 的漏洞。我們知道越獄社區一直在跟蘋果設備的安全性做著“斗爭”,隨著蘋果不斷地提高 iPhone 的安全性,越獄變得越來越難,而 BootROM 漏洞不僅可以用來越獄當前最新的 iOS 版本,還可以用來越獄將來的 iOS 版本(因為硬件漏洞無法通過系統更新進行修補),所以該漏洞在越獄社區中引起了巨大的轟動。
 
0x02 受影響的設備
影響從 iPhone 4s 到 iPhone X 的所有設備,同時影響這段時間內生產的 iPad 設備。
 
0x03 漏洞成因說明
@axi0mX 是通過二進制對比發現的這個漏洞[4],同時 @littlelailo 獨立的通過代碼審計的方式也發現了這個漏洞[5]。@littlelailo 對這個漏洞的成因及利用思路做了說明[6][7]。
由于 @littlelailo 對漏洞的成因已經說得非常清楚了,這里就不再畫蛇添足,下面是@littlelailo 說明的直接機器翻譯結果。下文中的圖像并不是指圖片,而是指 img4 固件文件。
這個錯誤一開始也被稱為Moonshine基本上,我查看過的所有bootrom中都存在以下錯誤:1.當usb開始通過dfu獲取圖像時,dfu注冊一個接口來處理所有命令,并為輸入和輸出分配一個緩沖區2.如果您將數據發送到dfu,則設置包由主代碼處理,然后調出接口代碼3.接口代碼驗證wLength短于輸入輸出緩沖區的長度,如果是這種情況,它將使用指向輸入輸出緩沖區的指針更新作為參數傳遞的指針4.然后返回wLength,這是它要接收到緩沖區的長度5. USB主代碼然后使用長度更新全局變量,并準備接收數據包6.如果接收到數據包,則通過作為參數傳遞的指針將其寫入輸入輸出緩沖區,并使用另一個全局變量來跟蹤已經接收了多少字節7.如果接收到所有數據,則再次調用dfu特定代碼,然后繼續將輸入輸出緩沖區的內容復制到以后從中引導映像的存儲位置8.之后,usb代碼將重置所有變量并繼續處理新軟件包9.如果dfu退出,則釋放輸入輸出緩沖區,并且如果映像解析失敗,則bootrom重新輸入dfu
退出dfu可以通過發送dfu中止包或通過觸發USB重置觸發解析來完成
問題:在第5步,將更新全局變量,并且Bootrom準備接收數據,但是使用便宜的控制器,您可以違反USB規范并且不發送任何信息(arduino主機控制器或類似的東西)。然后,您可以觸發USB重置以觸發圖像解析。如果解析失敗,bootrom將再次輸入dfu,但未執行步驟8,因此全局變量仍包含所有值。但是,執行了步驟9,因此釋放了輸入輸出緩沖區,而在步驟3中作為參數傳遞的指針仍然指向它。因此,您可以通過將數據發送到設備來輕松觸發對已釋放緩沖區的寫入。
對A8的利用:1.將0x40的隨機數據發送到dfu,必須發送此數據,否則您將無法使用USB重置ctrlReq(bmRequestType = 0x21,bRequest = 1,wLength = 0x40)退出dfu2.通過發送ctrlReq(0x21,1,0)ctrlReq(0xa1,3,1)ctrlReq(0xa1,3,1)ctrlReq(0xa1,3,1)ctrlReq(0xa1,3,1)使dfu處于等待USB重置的狀態ipwndfu dfu.py)3.僅發送了帶有bmRequestType 0x21和bRequest 1以及有效載荷大小的wLength的設置數據包(此數據包將更新全局變量)4.發送一個狀態包以標記控制傳輸的結束(即使將wLength設置為一個值,我們也會跳過數據階段)5.觸發總線復位6.等待設備重新輸入dfu(現在將釋放輸入輸出緩沖區,并且將在釋放的緩沖區下分配usb任務)7.發送設置的配置請求ctrlReq(bmREQ_SET,USB_REQUEST_SET_CONFIGURATION,wLength = Payloadsize),但將有效載荷與數據階段一起發送(bootrom中的設置配置處理程序忽略wLength)
有效負載將覆蓋usb任務結構,并且將成為usb堆棧之后的下一個分配。通過定位USB任務結構中的鏈接列表,您可以插入偽造的任務。而且您可以將usb任務堆棧用作暫存空間,因為看起來它永遠都不會寫到那么高。當dfu退出并且usb任務停止時,將生成該代碼。因此,您可以在第7步之后發送dfu中止數據包,并在該代碼執行exec的情況下控制所有較高的寄存器,因為您的虛假任務將添加到列表中并在以后的某個時刻運行。
〜31.05.19萊洛
 
0x04 能力及威脅評估
限制條件
漏洞利用的限制條件:需要將設備置入 DFU (Device Firmware Upgrade)模式。
漏洞及利用目前所具有的能力
1、BootROM 中的任意代碼執行能力。
2、開啟 CPU 的硬件調試能力(JTag)。
3、使用 AP 的 GID 進行加解密。
4、使用 AP 的 UID 進行加解密。
任意代碼執行能力及 CPU 級調試能力
BootROM 是 iPhone 啟動信任鏈的基礎,在 BootROM 中具有了任意代碼執行能力,意味著 iPhone 的整個啟動信任鏈被打破了,最終可以用來加載修改過的 iOS 內核,從而破壞 iOS 的基礎安全特性。這部分能力主要會被用來做越獄(這里的越獄是指越獄所帶來的能力,而不僅僅指越獄行為)。
CPU 級調試能力,這個能力主要會被用來分析 iPhone 的安全啟動鏈及調試相關的漏洞及利用。
使用AP 的 GID 進行加解密的能力
使用 AP 的 GID 進行加解密的能力主要會被用來解密 iPhone 的固件,破壞了蘋果對相關組件的封閉性保護,進而可以用來評估相關模塊的安全性,下面是利用該能力解密出來的固件密碼:

[1] [2]  下一頁

【聲明】:黑吧安全網(http://www.gkrbnd.live)登載此文出于傳遞更多信息之目的,并不代表本站贊同其觀點和對其真實性負責,僅適于網絡安全技術愛好者學習研究使用,學習中請遵循國家相關法律法規。如有問題請聯系我們,聯系郵箱[email protected],我們會在最短的時間內進行處理。
  • 最新更新
    • 相關閱讀
      • 本類熱門
        • 最近下載
        福彩原副主任