x86架構進入你的iPhone

6 人贊了文章

來源:lcq2.github.io/x86_ipho

介紹

生活中,我是一名從事基帶開發的漏洞研究員。正如每個漏洞研究人員都知道的那樣,瞭解最新技術發展對於您的工作成功是至關重要的。當然,在Apple宣佈其新的,閃亮的,大的,更大的和最大的iPhone智能手機系列之後,我從ipsw.me下載了一些OTA固件並開始研究新的基帶固件。

我發現的東西在我的脊椎上發出一陣驚駭,那種只在夜間玩Doom的恐怖,獨自在你的房間,沒有燈光,可以產生。忍受我,我會告訴你我發現了什麼......

注意:這只是一些初步分析,我不打算描述與基帶恢復相關的任何內容,這不是本篇的範圍。

誰/什麼/在哪裡?

基帶cpu是一個獨立的核心,存在於手機中,負責處理2g / 3g / 4g / cdma / 5g無線通信。鑒於這些標準的荒謬複雜性,現在的基帶cpu必須非常強大且足夠通用,因此基於FPGA的定製IP的時代早已過去,至少對於主要部分而言。在現代智能手機上已經有很多關於基帶的說法和文章,所以我不再重複了。為了我們的目的,您只需要知道通常基帶是使用嵌入式低功耗CPU實現的(譯者註:通常使用簡單的嵌入式架構),例如ARM(Cortex-M,Cortex-R或其他內容),Qualcomm Hexagon(一種通用,VLIW dsp)或其他或多或少的已知架構。

Apple在這方面並不特別,直到iPhone8 / iPhoneX(譯者註:原文有誤,iPhone7/7P開始使用不同的基帶),它們曾經擁有兩個不同的基帶,一個用於CDMA市場,另一個用於其他所有基帶。CDMA市場區域基於Qualcomm Hexagon dsp,而其他基於Intel XMMxxxx架構。對於那些喜歡玩iPhone固件的人來說,您可能已經在ipsw中看到了MAVxxx和ICExxx文件,這兩個文件分別包含基於Qualcomm的設備(MAV)和基於Intel的設備(ICE)的固件。

您可能知道,Apple決定放棄高通,現在他們只使用基於英特爾的基帶,因此本篇將專註討論。

老款的英特爾基帶

讓我們來看看上一代的英特爾基帶,一個用於iPhoneX的基帶。如果你下載了

一個ipsw GSM固件並解壓縮它(ipsw文件只是zip文件),除了其他之外,還有一個「固件」文件夾。在這個文件夾中你會看到幾個文件:「ICE17-1.04.52.Release.bbfw」和「Mav17-1.91.00.Release.bbfw」。版本當然會改變,這些版本適用於帶有iOS 11.4beta3的iPhone8。這些文件再次是zip文件,我們對ICE17-xxx感興趣,讓我們解壓縮並查看內容:

這裡值得考慮。熟悉嵌入式固件反彙編的人,當然會把目光投向「psi_ram.bin」和「ebl.bin」。對其內容進行快速十六進位轉儲,將立即顯示它們包含ARM代碼。事實上,「psi_ram.bin」是stage0引導載入程序,它將在某個地址載入「ebl.bin」並跳轉到其入口點。然後,ebl.bin將載入所有其他文件並跳轉到SYS_SW.elf中包含的主固件。為了確定,讓我們使用IDA並打開psi_ram.bin,載入地址無關緊要,只需將其設置為0:

這裡沒什麼奇怪的,它是你的標準嵌入式ARM啟動代碼,有一些與這個特定SoC相關的自定義設置。繼續前進,psi_ram將載入ebl並跳轉到它,你可以自己找到代碼,並不複雜。重要的是,這是ARM代碼。

新的英特爾基帶......恐怖......恐怖......

今天早上醒來,我想分析新版本的基帶固件,以瞭解改變了什麼以及在哪裡。所以我從ipsw.me下載了一個新的iPhone的隨機OTA,特別是:https://ipsw.me/otas/iPhone11,2,應該是新的iPhone Xs。我經歷了通常的階段(下載,解壓縮,解壓縮,解壓縮,複製等等),我將psi_ram.bin載入到IDA中,我選擇ARM little endian,以及...大量未定義數據。我按「C」就像一個白癡大約200次,我重新載入文件多次,我嘗試另一個IDA版本,我嘗試用Capstone反彙編位元組,我手動拆卸它們,什麼都沒有......我得到的只是無效代碼。所以我回去睡覺,因為顯然這不是一個美好的一天。

大約一個小時後我再次醒來,我再次下載同一型號的ipsw,我會像往常一樣完成所有相同的步驟。代碼仍然無效。我的第一個猜測是代碼是加密的,所以我使用一些隨機工具來分析被加密文件,沒有,它非常低。好吧,這些天你不能相信工具,所以我編寫了自己的腳本來計算,再次,太低而不能加密,無論如何,通過快速的「肉眼」分析也很清楚,即使你不應該過度相信你的眼睛。

我盯著屏幕看幾分鐘,想著發生了什麼。但是當然,作為一個逆轉器,你永遠不應該放棄,所以我嘗試了我所知道的每一個可能的RISC架構,並且相信我,它們中有很多(不是我的意思,很多,我把所有從Dreamcast SH4轉移到富士通/西門子在我的尼康D90內跑,並...沒什麼,我得到的只是垃圾。我的下一個猜測是:好的,它是用一些熵保留演算法加密的。我嘗試了一些我知道的加密方法,即使我不是專業用戶,仍然沒有。

我又喝了一杯咖啡,在我看來,我開始認為這是一個笑話:fuck it,這是x86,因為英特爾已經瘋了。我開始瘋狂地對這個想法大笑,但是你知道,我已經嘗試了所有東西,所以我重新打開「psi_ram.bin」並在IDA中保留默認的「MetaPC」架構,並且......

我無法相信自己的眼睛......我正在尋找基帶CPU內運行的嵌入式x86代碼。我認為這只是偶然的機會,不知為何,我最終得到了有效的x86代碼,所以我看了另一個函數(注意:IDA自動解析了大部分代碼)和.......

holy shit ...

lgdt ... mov ds,eax ... jmp far ptr 8:xxx,你不能得到比這個更像x86的代碼了。這絕不是巧合,這必須是有效的x86代碼......我完全無言以及有些敬畏,因為這讓我想起了我在386保護模式下運行的引導載入程序和操作系統時的年輕時光。

但我理性的部分告訴我「嘿,可能他們只是決定使用嵌入式x86 mcu啟動系統,顯然主要固件仍然在ARM上運行」,所以我把注意力轉向主要固件「SYS_SW.elf」。我看看ELF標題,它說ARM ......很好。我把它載入到IDA中,然後我得到垃圾......再次!我想.....

what.the.fuck,我嘗試再次使用MetaPC載入它...... BOOM,有效的x86代碼!隨機片段:

This is awesome…

結論

這並沒有什麼,我發現這是很有趣的並想分享。如果你覺得自己錯過了生活中的x86核心,那麼現在有一個或數個與你在一起,所以你不會再感到孤單。我沒有時間分析其他模型,但我的猜測是它們也在x86機構上運行。

接下來會發生什麼?我們打算在手機中使用z80嗎?為什麼不是6502?天啊,我很想在我的手機裏本地運行C64基本解釋器....

不是真的,我不批評蘋果或英特爾使用x86架構,我真的不在乎,但是......我的個人觀點認為,在這個世界上出現了一些問題。

參考

你可能在以下內容中發現有用的信息,無特別順序:

  • Baseband Attacks: Remote Exploitation of Memory Corruptions in CellularProtocol Stacks by Ralf-Philipp Weinmann
  • Reverse engineering a Qualcomm baseband by Guillaume Delugré
  • All Your Baseband Are Belong To Us by Ralf-Philipp Weinmann
  • Breaking Band - reverse engineering and exploiting the shannon baseband by Nico Golde, Daniel Komaromy
  • Path of Least Resistance: Cellular Baseband to Application Processor Escalation on Mediatek Devices by Gy?rgy Miru
  • There』s Life in the Old Dog Yet: Tearing New Holes into Intel/iPhone Cellular Modems by Nico Golde

推薦閱讀:

查看原文 >>
相關文章