安全圈 | 专注于最新网络信息安全讯息新闻

首页

物聯網硬體安全分析基礎

作者 galluppi 时间 2020-03-04
all

作者:獨抒@伏宸安全實驗室

前言

上篇初步介紹一些硬體基礎知識和分析硬體所需要的基本工具,本篇將講述利用程式設計器直接讀取晶片固件的方法。

程式設計器讀取

通過夾具夾住晶片引脚,然後連接程式設計器讀取晶片內容,通過程式設計器連接晶片需要注意引脚的順序,在IC晶片上都會有一個小點,大多數情况下,小點對應的引脚即為晶片的第一脚,而連接程式設計器的導線也需要插入程式設計器上相應的引脚。

案例一:讀取中控F7門禁固件

拆掉門禁外殼,通過電路圖和晶片印字分析,在主機板上有一顆FM25F04A存儲晶片,通過夾具連接晶片到程式設計器,在通過專用程式設計器軟件,對該晶片進行讀取。

連接完成,確定引脚接線正確後,打開程式設計器對應軟件,通過智慧識別晶片ID,即可開始讀取固件工作。

如無法識別,可根據印字說明,嘗試類似的型號,一般情况下相容。

點擊讀取,即可開始固件選取,成功之後會保存為BIN格式檔案,打開即可看到16進制的內容,為下一步分析提供基礎。

案例二:讀取某智慧監視器固件

拆掉監視器外殼,通過分析PCB上的各個IC,找到Flash存儲晶片。

在顯微鏡下,可以看到是一顆25L64型號的Flash晶片。

用夾具連接各引脚,並和程式設計器連接,進行固件讀取。

識別到晶片型號為GD25Q64,點擊讀取,讀取完畢後按照提示保存到檔案。

打開保存的BIN檔案或者查看緩衝區,即可看到固件內容。

在Ubuntu中,用binwalk解包固件,做進一步分析。

案例三:讀取某智慧監視器固件

打開外殼,在PCB背面發現一顆FLASH存儲晶片

通過顯微鏡發現晶片型號為25L128。

連接程式設計器讀取固件並保存。

案例四:讀取某路由器固件

打開外殼,發現PCB上有一顆Flash記憶體,但廠商出於安全考慮,把晶片印字塗抹掉了。

在不知道晶片型號的情况下,我們連接該晶片,讓程式設計器去嘗試讀取。

通過智慧識別,發現程式設計器無法識別出具體型號,而因為Flash存儲晶片的種類多樣,通過查找又無法獲得該路由器的具體參數,這時我們通過UART串口,讀取出UBOOT啟動資訊,串口輸出裡面發現了該晶片型號為W25Q128BV。(下一篇將會重點介紹關於串口調試的方法)

在程式設計器中選擇該型號,成功選取出固件。

用binwalk解包固件。

案例五:讀取某智慧電鍋固件

拆掉外殼,背面嵌有一塊PCB,反面是WIFI處理晶片,正面為記憶體,連接程式設計器。

通過印字分析為25晶片,存儲大小為2M位元組,嘗試該型號晶片,成功讀取固件。

案例六:讀取某網路監控攝像機固件

在PCB上找到一塊25L128型號的Flash存儲晶片。

通過夾具連接程式設計器。

識別到晶片為MX25L128,選擇其中一種,成功選取固件。

用binwalk解包固件內容。

拆焊晶片讀取固件

對於某些機器,晶片引脚採用點錫絲網焊接在背面,引脚太小或沒有暴露出引脚,就需要通過拆焊晶片來讀取固件了。

通過熱風槍和錫焊配合,很容易從PCB上把晶片拆焊出來,但在拆焊過程中,可能存在晶片因為過熱被損壞,PCB上其他元器件被損壞,電路無法接通等風險,需要酌情考慮。

熱風槍和錫焊拆焊晶片讀取固件

設定熱風槍溫度為400度,拆焊掉的晶片,通過轉接座與程式設計器連接,同樣需要注意晶片的引脚方向。

讀取晶片固件並匯出。

本文由Seebug Paper發佈,如需轉載請注明來源。本文地址:https://paper.seebug.org/468/