天天看點

「嵌入式」嵌入式裝置硬體PCB級逆向

作者:架構思考

本文介紹一些實用的PCB級硬體逆向的基礎技術,可用于研究者和白帽團體分析未知的硬體。SEC Consult營運的硬體安全專用實驗室是SEC Consult安全實驗室的一部分。下面展示的研究隻是硬體實驗室衆多研究中的冰山一角。

今天,我們生活在一個被嵌入式裝置統治的世界中。每個人都可能生活在各種各樣的窺探、監控中。受安全漏洞影響的路由器、網絡攝像頭、智能手機和其他嵌入式裝置,是極易被攻擊的。最近爆發的Mirai病毒事件和其他LoT惡意軟體更加說明了這一點。無論是出于好奇還是應顧客要求進一步提高産品的安全性,想要深度審計該類裝置的固件,我們都需要拆卸下來,好找到調試接口。隻有通過對系統進行調試和運作,才能揭示其中的隐秘之處。由于該過程具有一定的破壞性,故通常會對裝置造成損壞。是以,要想進行深入的分析,僅準備一台裝置是不夠的!

如何從熟知的裝置開始?

為了節省昂貴的嵌入式分析費用,一個簡單快捷方法是替換固件。大型公司很容易在引進大批IoT裝置之前委托安全咨詢公司對該産品的内置固件進行測試,以此最大程度地降低系統的安全風險。不過,對使用者和業餘愛好者來說,選擇并不多,他們能安裝的固件多來源于第三方如OpenWRT。盡管這些固件的性能不見得一定比原生的(原生固件是針對該專有晶片指令集開發的)更加出色,但在安全性方面,确實如此。當我們在完成對已知裝置的安全審計的任務時,硬體分析的部分通常簡化為在網上的相關論壇(通常是OpenWRT Wiki)尋找相關資料。

硬體黑客——識别無文檔裝置的調試接口

要對一個完全未知的普通裝置刷寫固件,簡直就是一個難以完成的任務。故而,我們需要逐漸剖析硬體電路,以便檢查其所用的固件及檢測固件的安全漏洞。不過,對硬體電路進行逆向工程并不是一件簡單的事,尤其是專有晶片集電路,好在一些基本的分析技術還是适用的。在我們的例子中,Broadcom(博通公司)的SoC作為Belkin F9 K1106as(Belkin:貝爾金公司)無線中繼器的核心部件。我們用該裝置作為例子并不是我們對它别有興趣,而是它的晶片集也用在衆多社群支援的其他裝置上。為了識别該SoC的引腳,我們将它接上專用電源。打開裝置的外殼,便是PCB闆了。我們第一個目的是串行連接配接到裝置,以獲得shell或至少通路到引導裝載程式。

「嵌入式」嵌入式裝置硬體PCB級逆向

Belkin F9 K1106as PCB圖及其不同子產品

要識别金屬防護罩保護的子產品,最簡單的辦法是拆掉防護罩。

「嵌入式」嵌入式裝置硬體PCB級逆向

用鉗子打開靜電防護罩

僅為了逆向分析出隐藏在PCB闆上的調試引腳接口,我們不必将全部的防護罩拆除。借助暴露在PCB上的UART接口(譯者注:通用異步收發器,詳見百度百科)可以實作最初的調試,因為把UART直接接到以11520

Baud 8n1為終端的FT2322H闆上,可以擷取得root

shell。相比于其他接口,很容易就可以辨認出UART,它隻有兩個針腳,接收端及發送端。進行串行通信并非總是UART,但這能幫助我們縮小可能性。一組3-5針的引腳通常是UART接口,這是開發PCB時預留的。

UART通常的引腳排布為(GND|RX|TX|VCC)或(GND|TX|RX|VCC)。

那JTAG(譯者注:聯合測試工作組,詳見百度百科)在哪呢?該标準允許開發者或有經驗的黑客輕易地控制CPU、在運作階段調試SoC和對flash進行讀取和程式設計以及運作自檢測試。這個問題可以如此作答:用JTAG暴力工具。SEC Consult開發的工具(包括硬體和軟體)附帶有該功能,當然,網絡上也有許多用于該目的的工具。由于有效的調試針腳為4-5針,PCB闆上部的10個針腳看起來像是JTAG。

「嵌入式」嵌入式裝置硬體PCB級逆向

暴力檢測JTAG針腳

「嵌入式」嵌入式裝置硬體PCB級逆向

SEC Consult安全實驗室開發的硬體分析工具“SEC Xtractor”

經過暴力檢測後,終于找出了針腳!為了保持完整性,也标記了UART接口。

「嵌入式」嵌入式裝置硬體PCB級逆向

JTAG引腳

至于JTAG擴充卡,用的是廉價的迷你FT2322H子產品。

「嵌入式」嵌入式裝置硬體PCB級逆向

通過迷你FT2232H子產品連接配接到JTAG

連接配接到OpenOCD的請求給出了如下結果:

「嵌入式」嵌入式裝置硬體PCB級逆向

OpenOCD輸出

該晶片似乎有一個ID為0x2535717f的32位的指令寄存器。此前,我們所知的僅是該Broadcom SoC标簽為BCM5358UB0KFBG。現在,我們有更多的了解了——不過是針對該具體的裝置;JTAG接口可以用來控制晶片及對系統底層的通路。

硬體黑客——抓取固件

提取固件,是完善該SoC資訊池的最後一步。一個Macronix的串行flash晶片安裝在PCB背面。花幾分鐘用flashrom和FT2322H即可讀取出其中的内容。從datasheet上可以快速找出其引腳定義:

「嵌入式」嵌入式裝置硬體PCB級逆向

Macronix SPI flash晶片引腳

将flash晶片從PCB闆上取下後,置于轉接器上并啟動flashrom:

「嵌入式」嵌入式裝置硬體PCB級逆向

用flashrom讀取SPI存儲器

轉儲檔案包括整個程式存儲器和暫存資料(NVRAM)。用flashrom重寫固件并晶片焊接回去是刷第三方固件的另一種方法。通過調用“binwalk-Adump.bin”,得到許多的“MIPSEL”(MIPSlittle endian)指令,這讓我們不禁假設:該Broadcom SoC 是基于通用MIPSEL32

CPU的。SOP封裝的串行flash晶片是最容易讀取的flash,更具挑戰性的NAND和NOR

flash晶片,由于其複雜的接口、狹小的封裝和數目衆多的引腳,操作起來甚是困難。

通過IoT Inspector對轉儲檔案進行初步分析顯示,該固件存在一些基本的安全風險,同時也擷取到該裝置使用的軟體資訊。由于我們分析的是老舊裝置,一些安全漏洞可以追溯到2007年:

「嵌入式」嵌入式裝置硬體PCB級逆向

IoT Inspector報告摘錄

硬體黑客——逆向SoC引腳

正如先前所述,如果得到了SoC的引腳定義,那麼我們将可以對任何使用BCM5358UB0KFBG的裝置進行逆向。為此,大多數情況下我們可以用熱風槍将BGA封裝的晶片拆焊下來。

「嵌入式」嵌入式裝置硬體PCB級逆向

熱風槍返修台

「嵌入式」嵌入式裝置硬體PCB級逆向

拆下SoC後的Belkin PCB

根據SoC的引腳連接配接情況,結合datasheet的相關資料以及針腳對地/電源(GND/VCC)電壓的測定和邏輯推斷,我們得出該晶片部分重要引腳的功能定義。

「嵌入式」嵌入式裝置硬體PCB級逆向

BCM5358U0KFBG晶片部分引腳功能定義

顯然,BCM535x系列晶片有着相似的引腳定義。https://wikidevi.com網站收集有計算機硬體的相關資訊,當然也包括Broadcom SoC系列。我們找到了下面的條目:

「嵌入式」嵌入式裝置硬體PCB級逆向

來源: https://wikidevi.com

觀察包含該類晶片的其他路由器的圖檔可以發現,晶片的引腳功能都是大同小異。

Wikidei網站包含衆多硬體的相關資訊,除此之外,制造商提供的相關文檔也非常詳盡。中國似乎是唯一一個各個品牌路由器的生産國。

硬體黑客——來自中國的供應鍊

所有這些中國制造的電子産品,晶片、外圍裝置、路由器等,經常是由同一家工廠組裝完成的。結果很明顯,這些産品的品質都在一個等級,一些工廠也為互相競争的市場供應商生産産品。我們來看看兩張華碩RT-N53路由器和Belkin F9 K1106無線中繼器的内部圖檔。這PCB闆上的辨別簡直就是一摸一樣,是不是?

「嵌入式」嵌入式裝置硬體PCB級逆向

華碩PCB,來源:https://apps.fcc.gov/

「嵌入式」嵌入式裝置硬體PCB級逆向

Belkin PCB

巧合嗎?并不像啊。這些辨別的字型是ELCAD(電腦輔助電子設計)軟體預設設定的,如果不是強制要求,開發者是不會去改動的。這意味着相同的模闆重用于華碩PCB的開發,甚至更多其他供應商。是以,同一家ODM(原設計制造商)負責設計制造包括Belkin在内各品牌的産品。

在嵌入式裝置生産中,這并不是什麼不常見的生産形式,尤其是對于來自US的公司。其中的固件多半也是亞洲供應商基于标準的亦或是定制的SDK開發的。

愈演愈烈的後門事件大都是邏輯上的缺陷——正如我們之前看到過的:

  • http://blog.sec-consult.com/2017/06/ghosts-from-past-authentication-bypass.html
  • http://blog.sec-consult.com/2016/12/backdoor-in-sony-ipela-engine-ip-cameras.html
  • http://blog.trendmicro.com/trendlabs-security-intelligence/netis-routers-leave-wide-open-backdoor/
  • http://www.devttys0.com/2013/10/from-china-with-love/

文章來源:看雪翻譯小組 StrokMitream 編譯,來源SecConsult@Thomas Weber

繼續閱讀