was successfully added to your cart.

在iPhone 6s上進行物理提取Secure boot

 

這張照片顯示,Apple對安全引導固件組件漏洞給予最高回報。

 

這是關於什麼?

安全ROM也稱為bootrom,是CPU為了初始化而運行的第一個程式。在可信的環境中,可以驗證它加載的下一個階段的簽名,以檢查其完整性。
在iPhone,Secure ROM加載iBoot並檢查其簽名。它只會在簽名有效的情況下運行。iBoot會加載內核並檢查它的簽名,內核會加載應用程序並檢查它們的簽名。
如果您可以在內核中找到漏洞並繞過應用程序簽名,則會發生越獄,直到Apple修復內核(iOS)。如果您可以在iBoot中找到漏洞並繞過內核簽名檢查,你可以加載你想要的任何內核,然後加載你想要的任何應用程序,直到Apple修復iBoot。
如果在llb中發現漏洞,則可以加載所需的任何iBoot,直到Apple修復llb。
如果你在SecureROM中發現了一個漏洞,你可以加載你想要的任何llb,這會加載你想要的任何iBoot,這會讓你加載任何你想要的內核,並且無法修正
這是因為bootrom引導程序是主控IC本身的一部分,它不能被修復或修改。
神奇小子 Geohot發現的bootloader 等級漏洞  limera1n  就是這樣,可以加載任何你想要的llb,這會加載你想要的任何iBoot,這將允許你加載你想要的任何內核.

本文轉翻譯自
http://ramtin-amin.fr/#nvmedma

如何進行 ?

吸毒強姦的麥咖啡在新聞上瞎掰如何提取iphone flash. 

對iphone硬件做線路分析!

iPhone上的PCIe

自iPhone 6後,蘋果已經在其SoC上引入了PCIe匯流排。如另一篇關於NVMe的文章所述,iPhone可以在NVMe設備上啟動。
那些NVMe Storage沒有RAM,需要主機RAM才能工作。他們必須實現這一目標的唯一方法就是在匯流排上做DMA Master。

如何界面?

正如之前所示,一旦通過JTAG連接到NVMe就可能啟動DMA傳輸,將其轉換為BFH模式並修改其內存以使其轉儲到主機的內存。下一步將是在iPhone上工作並轉儲一些內存區域。問題是,我們需要控制其一些引腳,以避免重置或者將其切換到我們想要的模式。為了做到這一點,我們需要走得更遠。為了訪問PCIe,我的第一個嘗試是創建一個“T形”電路板,它可以連接引腳所在的位置。這將允許我進一步將NVMe芯片和JTAG芯片集成在一起。

如前所述,Serial訊號必須要有抗干擾。因此使用簡短的SATA電線連接的原因。該設置由幾個部分組成。一方面,我們有一個T型電路板,它有一個小型適配器,與被移除的NVMe芯片周圍的電容和電阻處於同一水平。

 

另一方面,我們需要為NVMe供電,給它定時鐘,並且有一個插座以連接它。

如前所示,整個設置看起來像這樣。


現在可以通過JTAG控制NVMe,同時連接到手機。

夾具適配器

問題在於,每當T板被拆焊時,它就會打破手機,最終價格非常昂貴。然後,我決定設計一個JIG,以便通過彈簧針直接連接到PCIe

現在可以安全地訪問電路板的PCIe引腳,而不會破壞任何東西。

FPGA做的仿真 PCI-E 與訊號sniffer

為了發送仲裁TLP,需要能夠控制PCIe核心。例如,在這里和那裡都有使用usb3380的解決方案,但是這些解決方案將實現2個連續的橋接,這不是我們想要的。我們希望完全能夠模擬NVMe,以便讓手機在我們的控制寄存器中設置DMA位。

該電路板的工作原理如下:我們有一個支持ARTIX 7 PCIe的FPGA,連接到用於USB 3.0的FT601Q FTDI芯片。它具有DDR3內存

你需要一名軟件工程師!

 

該板給我們直接控制所有TLP的可能性。事實上,在FTDI上,我們創建了一些虛擬頻道。一個用於設置PCIe核心配置並控制其狀態,一個用於發送/接收TLP。一個用於中斷線。被選中的設計是運行一個守護進程,負責USB 3.0事務並與FPGA進行複用。它為我們提供了3個UDP端口,用於發送/接收每個服務的數據包。由於數據包是RAW格式,我們可以完全控制我們發送的內容。這裡的目標是將內核配置為Apple NVMe芯片。具有完全相同的參數。所以iPhone邏輯板為我們設置了一點。然後可以(用一些技巧)以書面形式做一些DMA

最後的結果是這樣的。

 

對於那些想知道PCIe如何工作的人來說,這裡有一個很好的教程http://xillybus.com/tutorials/pci-express-tlp-pcie-primer-tutorial-guide-1

 

為了簡化這些複雜的事情,下面是一個用Python編寫的頭域的例子

為了發送TLP,我們將使用read函數以這種方式填充它

這種方法的優點是,不僅可以使用Wireshark解剖器或任何其他捕獲和顯示方法,但發送/接收TLP很簡單。當然,需要了解PCIe的工作原理。請注意,在另一個UDP端口上,我們可以管理與PCIe內核本身相關的所有內容。

fpga中的PCIe內核支持64位配置地址。以下是使用FPGA卡對SecureROM進行轉儲(有點棘手)的預覽

(“還要想辦法拆裝pci-e 封包”)

 

由於使用PCIe並不容易,所以沒有進行大量的測試,即使是IOMMU可以從理論上阻止攻擊者從上下文中訪問存儲器,人們可以看到這些並不總是很好地實現。根據不同的興趣,我可以用PCIe fingeredge發布此板,例如可用於在PC上訓練。

可以使用Qemu硬件驅動程序進行修改,以便輕鬆模擬現有設備,而不需要付出很大的努力。可能值得在培訓上進行教學……

Thx Chang

Author Thx Chang

More posts by Thx Chang

Leave a Reply