設備固件的安全是構建物聯網設備安全的基礎環節,它的安全問題將影響到整個系統。在真實的Hacking場景中,我們常常需要提取固件,將其解壓縮,以便對操作系統和應用程序進行逆向和安全審計。本文將介紹設備固件的存儲位置和存儲方式。未來的博客將關注固件的提取和解壓方法(包括較經濟的,也包括昂貴的方案)。
識別元器件
在介紹哪些元器件可用于存儲固件之前,我們首先來討論一下,如何識別PCB(Printed Circuit Board,印刷電路板)上的元器件。最明顯的信息是芯片上的標簽,標簽中可能包含了制造商名稱、型號和芯片描述。下面幾節將介紹不同種類芯片的典型封裝,了解封裝的特征可以幫助我們猜測芯片的功能。
如果你無法直接查看芯片標簽的內容,觀察電路的設計方式可以給你提供一些線索。例如,下圖展示了西門子PLC(Programmable Logic Controller,可編程邏輯控制器)的PCB。
在查看芯片手冊之前,我們可以進行一下猜測,片上系統(SoC)是右側這塊最大的芯片,中間的芯片是RAM(與SOC之間的接線是彎曲的,這是為了保證所有連線有相同的長度,因為高速RAM需要準確的定時信號),最左邊這片是flash(大量平行的連線用于傳輸并行的數據信號)。
這是一個很好的例子,說明了通過觀察芯片的連線和外設,來識別芯片的可能。這種方法,可以幫助我們識別沒有標簽的未知芯片。當然事實上,上圖展示的情形,顯然可以直接查看芯片標簽的信息,所以它僅僅是一個用于教學的例子J。
上圖中,右側這塊芯片可以通過西門子的logo和芯片的零件號來識別,其它兩篇芯片上的logo表示它們均由Micron生產。由于空間限制,Micron沒有標注芯片的零件號,而使用了空間占用較小的FBGA標記。幸運的是,Micron提供了一個在線解碼器來獲得完整的零件號,它顯示左邊的芯片是ECC NAND Flash(MT29F1G16ABBDAHC),中間的芯片是512MB SDRAM(MT46H16M32LFB5-6)。
固件的存儲位置
一塊PCB上,可能有很多地方可以用于存儲固件,事實上,在某些設備中,固件確實被存儲在多個位置。假如我們有能力找出并識別電路板上的存儲芯片,那么下一步,我們需要了解這些存儲芯片可以被分為哪些不同類型,以及它們各自常見的用途。
NOR Flash/EEPROM
我們討論低密度存儲設備時,術語NOR Flash和EEPROM通??梢曰Q使用,它們可以單獨封裝也可以集成在片上系統中。有許多介紹不同類型Flash存儲器之間區別的資料,這里不做過多的介紹,只強調一下,NOR Flash/EEPROM最重要的優點在于它們是字節可尋址的(譯者注:原文還提到字節可擦除,似乎有誤)。這意味著,你可以直接從NOR Flash/EEPROM執行代碼,一次一條指令(eXecute in Place or XiP)。這使得NORE Flash非常適合存儲低級別的程序,例如啟動代碼。因為,它不需要任何驅動程序或Flash控制器來讀取它存儲的內容。
NOR Flash通常有串行和并行兩種類型。串行NOR Flash通常采用小型封裝,例如SOIC-8,看起來如上圖所示。
其它常見的封裝格式還有WSON(芯片的封裝類型常常使用首字母縮寫,這里指:Very Very thin Small Outline No lead package)、DIP-8、SOIC-16和BGA-24(譯者注:關于芯片封裝,可以參考維基百科,https://en.wikipedia.org/wik/List_of_integrated_circuit_packaging_types)。這些小型芯片可以通過SPI或I2C等串行協議進行訪問,通常用于存儲少量數據,例如SoHo路由器上的系統設置。
大容量NOR通常采用更大的、具有并行數據線(用于提速)的封裝。 這些器件更有可能采用48或56引腳的薄型小外形封裝(TSOP,Thin Small Outline Package),比如下圖所示的Spansion芯片。
這種大型的芯片,沿用我們之前舉得例子,可以用于存儲SoHo路由器的整個文件系統。
NAND Flash
盡管NOR Flash非常適合少量數據的存儲,然而較大數據量的存儲通常會使用NAND Flash。NAND Flash是塊尋址(你每次以塊為單位讀取數據)的,并且寫入速度比NOR Flash快得多,但讀取速度比NOR Flash慢。由于NAND不是字節尋址的,因此不能直接執行代碼,在程序運行前,需要將程序代碼拷貝到其它地方(通常是RAM)。
NAND Flash的接口比NOR Flash更復雜,并且通常通過并行接口訪問。因此,當你想從NAND Flash訪問固件時,你可能需要使用獨立的芯片讀取器讀取或寫入內容。
NAND Flash通常使用TSOP(Thin Small-Outline Package ,一般為48或56引腳)或球柵陣列(BGA,Ball Grid Array)封裝。當我們為了提取固件,想將NAND Flash從PCB上取下來時,這些封裝形式比具有引線的封裝更具挑戰性。有時為了減少PCB的大小,NAND Flash可以與RAM一起包含在多芯片封裝(MCP,Multi-Chip Package)中。
Managed NAND
對NOR Flash和NAND Flash的操作有一些限制(比如Flash的擦寫有使用壽命,反復擦寫同一位置將很快將使用壽命耗盡),因此對它們的操作需要額外的管理,來實現糾錯、擦寫均衡、性能優化以及物理存儲到邏輯存儲的轉換。從理論上講,這種管理功能可以通過硬件實現,比如使用Flash控制器,也可以通過軟件,比如在文件系統驅動中實現,或者通過兩者的某種結合。需要指出的是,不同制造商生產的Flash芯片通常不能互相替換,因為它們往往有各自的芯片尺寸和引腳規范。
為了解決上述問題,eMMC作為一種解決方案被提出了。eMMC是一種管理NAND存儲器的方案,它由同一物理封裝內的多媒體卡(MMC,Multi Media Card)控制器和NAND Flash組成。事實上,它們就是封裝在芯片中的SD卡。由于eMMC芯片符合JEDEC標準的引腳規范和封裝尺寸,因此不同廠商的eMMC芯片可以互換。因此eMMC在工業界大受歡迎,設備制造商們可以靈活的改變芯片供應商,而無需重新設計任何東西。
上文展示的那張NAND Flash照片是來自金士頓(Kingston)的,采用BGA芯片封裝的eMMC芯片KE4CN3H5A。這張照片是我們在研究一臺基于Android的電話會議設備時拍攝的。
對于IoT Hacker而言,eMMC最贊的一點是,你只需要三個連接就可以與eMMC芯片的接口進行通信:data0、clock和command。另外,eMMC芯片一般都有符合JEDEC標準的引腳。正如最近的Blackhat演講者展示的那樣,如果你可以在PCB上找到這三個信號,那么你就無需把Flash芯片取下來,直接在電路中提取存儲在芯片中的內容。
更多關于固件提取這個主題的內容,我們將在后續的博客中介紹。
Universal Flash Storage(UFS)
我們最近試圖修復一臺三星Galaxy S6(GT-i920F),在服務手冊中找到了一些信息,提到它使用了三星KLUBG4G1BD閃存芯片。事實證明,這種芯片是一塊通用閃存(UFS 2.0)芯片。UFS是eMMC的繼任者。它設計了新的物理接口,提供比eMMC更快的速度。
Mix Storage Types
上文介紹了Flash存儲介質的不同類型和它們各自的特點。通常,一臺設備會使用一種或多種類型的存儲器,用于存儲不同類型的數據。我們繼續SoHo路由器的示例,下圖顯示了如何在單個設備上使用多個不同的存儲位置,以及它們在通用的啟動引導過程中各自的加載順序。在這個例子中,有三個不同的存儲位置用于存儲主引導加載程序(PBL,Primary Boot Loader),包括輔助引導加載程序(the Secondary Bootloader),程序代碼(Program Code)和系統設置(the System Setting)。
責任編輯:韓希宇
免責聲明:
中國電子銀行網發布的專欄、投稿以及征文相關文章,其文字、圖片、視頻均來源于作者投稿或轉載自相關作品方;如涉及未經許可使用作品的問題,請您優先聯系我們(聯系郵箱:cebnet@cfca.com.cn,電話:400-880-9888),我們會第一時間核實,謝謝配合。