前言
本文介紹一些實(shí)用的PCB級(jí)硬件逆向的基礎(chǔ)技術(shù),可用于研究者和白帽團(tuán)體分析未知的硬件。SEC Consult運(yùn)營(yíng)的硬件安全專用實(shí)驗(yàn)室是SEC Consult安全實(shí)驗(yàn)室的一部分。下面展示的研究只是硬件實(shí)驗(yàn)室眾多研究中的冰山一角。
今天,我們生活在一個(gè)被嵌入式設(shè)備統(tǒng)治的世界中。每個(gè)人都可能生活在各種各樣的窺探、監(jiān)控中。受安全漏洞影響的路由器、網(wǎng)絡(luò)攝像頭、智能手機(jī)和其他嵌入式設(shè)備,是極易被攻擊的。最近爆發(fā)的Mirai病毒事件和其他LoT惡意軟件更加說(shuō)明了這一點(diǎn)。無(wú)論是出于好奇還是應(yīng)顧客要求進(jìn)一步提高產(chǎn)品的安全性,想要深度審計(jì)該類設(shè)備的固件,我們都需要拆卸下來(lái),好找到調(diào)試接口。只有通過(guò)對(duì)系統(tǒng)進(jìn)行調(diào)試和運(yùn)行,才能揭示其中的隱秘之處。由于該過(guò)程具有一定的破壞性,故通常會(huì)對(duì)設(shè)備造成損壞。因此,要想進(jìn)行深入的分析,僅準(zhǔn)備一臺(tái)設(shè)備是不夠的!
如何從熟知的設(shè)備開(kāi)始?
為了節(jié)省昂貴的嵌入式分析費(fèi)用,一個(gè)簡(jiǎn)單快捷方法是替換固件。大型公司很容易在引進(jìn)大批IoT設(shè)備之前委托安全咨詢公司對(duì)該產(chǎn)品的內(nèi)置固件進(jìn)行測(cè)試,以此最大程度地降低系統(tǒng)的安全風(fēng)險(xiǎn)。不過(guò),對(duì)用戶和業(yè)余愛(ài)好者來(lái)說(shuō),選擇并不多,他們能安裝的固件多來(lái)源于第三方如OpenWRT。盡管這些固件的性能不見(jiàn)得一定比原生的(原生固件是針對(duì)該專有芯片指令集開(kāi)發(fā)的)更加出色,但在安全性方面,確實(shí)如此。當(dāng)我們?cè)谕瓿蓪?duì)已知設(shè)備的安全審計(jì)的任務(wù)時(shí),硬件分析的部分通常簡(jiǎn)化為在網(wǎng)上的相關(guān)論壇(通常是OpenWRT Wiki)尋找相關(guān)資料。
硬件黑客——識(shí)別無(wú)文檔設(shè)備的調(diào)試接口
要對(duì)一個(gè)完全未知的普通設(shè)備刷寫(xiě)固件,簡(jiǎn)直就是一個(gè)難以完成的任務(wù)。故而,我們需要逐步剖析硬件電路,以便檢查其所用的固件及檢測(cè)固件的安全漏洞。不過(guò),對(duì)硬件電路進(jìn)行逆向工程并不是一件簡(jiǎn)單的事,尤其是專有芯片集電路,好在一些基本的分析技術(shù)還是適用的。在我們的例子中,Broadcom(博通公司)的SoC作為Belkin F9 K1106as(Belkin:貝爾金公司)無(wú)線中繼器的核心部件。我們用該設(shè)備作為例子并不是我們對(duì)它別有興趣,而是它的芯片集也用在眾多社區(qū)支持的其他設(shè)備上。為了識(shí)別該SoC的引腳,我們將它接上專用電源。打開(kāi)設(shè)備的外殼,便是PCB板了。我們第一個(gè)目的是串行連接到設(shè)備,以獲得shell或至少訪問(wèn)到引導(dǎo)裝載程序。
圖:Belkin F9 K1106as PCB圖及其不同模塊
要識(shí)別金屬防護(hù)罩保護(hù)的模塊,最簡(jiǎn)單的辦法是拆掉防護(hù)罩。
圖:用鉗子打開(kāi)靜電防護(hù)罩
僅為了逆向分析出隱藏在PCB板上的調(diào)試引腳接口,我們不必將全部的防護(hù)罩拆除。借助暴露在PCB上的UART接口(譯者注:通用異步收發(fā)器,詳見(jiàn)百度百科)可以實(shí)現(xiàn)最初的調(diào)試,因?yàn)榘裊ART直接接到以11520 Baud 8n1為終端的FT2322H板上,可以獲取得root shell。相比于其他接口,很容易就可以辨認(rèn)出UART,它只有兩個(gè)針腳,接收端及發(fā)送端。進(jìn)行串行通信并非總是UART,但這能幫助我們縮小可能性。一組3-5針的引腳通常是UART接口,這是開(kāi)發(fā)PCB時(shí)預(yù)留的。
UART通常的引腳排布為(GND|RX|TX|VCC)或(GND|TX|RX|VCC)。
那JTAG(譯者注:聯(lián)合測(cè)試工作組,詳見(jiàn)百度百科)在哪呢?該標(biāo)準(zhǔn)允許開(kāi)發(fā)者或有經(jīng)驗(yàn)的黑客輕易地控制CPU、在運(yùn)行階段調(diào)試SoC和對(duì)flash進(jìn)行讀取和編程以及運(yùn)行自檢測(cè)試。這個(gè)問(wèn)題可以如此作答:用JTAG暴力工具。SEC Consult開(kāi)發(fā)的工具(包括硬件和軟件)附帶有該功能,當(dāng)然,網(wǎng)絡(luò)上也有許多用于該目的的工具。由于有效的調(diào)試針腳為4-5針,PCB板上部的10個(gè)針腳看起來(lái)像是JTAG。
圖:暴力檢測(cè)JTAG針腳
圖:SEC Consult安全實(shí)驗(yàn)室開(kāi)發(fā)的硬件分析工具“SEC Xtractor”
經(jīng)過(guò)暴力檢測(cè)后,終于找出了針腳!為了保持完整性,也標(biāo)記了UART接口。
圖:JTAG引腳
至于JTAG適配器,用的是廉價(jià)的迷你FT2322H模塊。
圖:通過(guò)迷你FT2232H模塊連接到JTAG
連接到OpenOCD的請(qǐng)求給出了如下結(jié)果:
圖:OpenOCD輸出
該芯片似乎有一個(gè)ID為0x2535717f的32位的指令寄存器。此前,我們所知的僅是該Broadcom SoC標(biāo)簽為BCM5358UB0KFBG?,F(xiàn)在,我們有更多的了解了——不過(guò)是針對(duì)該具體的設(shè)備;JTAG接口可以用來(lái)控制芯片及對(duì)系統(tǒng)底層的訪問(wèn)。
硬件黑客——抓取固件
提取固件,是完善該SoC信息池的最后一步。一個(gè)Macronix的串行flash芯片安裝在PCB背面?;◣追昼娪胒lashrom和FT2322H即可讀取出其中的內(nèi)容。從datasheet上可以快速找出其引腳定義:
圖:Macronix SPI flash芯片引腳
將flash芯片從PCB板上取下后,置于轉(zhuǎn)接器上并啟動(dòng)flashrom:
圖:用flashrom讀取SPI存儲(chǔ)器
轉(zhuǎn)儲(chǔ)文件包括整個(gè)程序存儲(chǔ)器和暫存數(shù)據(jù)(NVRAM)。用flashrom重寫(xiě)固件并芯片焊接回去是刷第三方固件的另一種方法。通過(guò)調(diào)用“binwalk-Adump.bin”,得到許多的“MIPSEL”(MIPS little endian)指令,這讓我們不禁假設(shè):該Broadcom SoC 是基于通用MIPSEL32 CPU的。SOP封裝的串行flash芯片是最容易讀取的flash,更具挑戰(zhàn)性的NAND和NOR flash芯片,由于其復(fù)雜的接口、狹小的封裝和數(shù)目眾多的引腳,操作起來(lái)甚是困難。
通過(guò)IoT Inspector對(duì)轉(zhuǎn)儲(chǔ)文件進(jìn)行初步分析顯示,該固件存在一些基本的安全風(fēng)險(xiǎn),同時(shí)也獲取到該設(shè)備使用的軟件信息。由于我們分析的是老舊設(shè)備,一些安全漏洞可以追溯到2007年:
圖:IoT Inspector報(bào)告摘錄
硬件黑客——逆向SoC引腳
正如先前所述,如果得到了SoC的引腳定義,那么我們將可以對(duì)任何使用BCM5358UB0KFBG的設(shè)備進(jìn)行逆向。為此,大多數(shù)情況下我們可以用熱風(fēng)槍將BGA封裝的芯片拆焊下來(lái)。
圖:熱風(fēng)槍返修臺(tái)
圖:拆下SoC后的Belkin PCB
根據(jù)SoC的引腳連接情況,結(jié)合datasheet的相關(guān)資料以及針腳對(duì)地/電源(GND/VCC)電壓的測(cè)定和邏輯推斷,我們得出該芯片部分重要引腳的功能定義。
圖:BCM5358U0KFBG芯片部分引腳功能定義
顯然,BCM535x系列芯片有著相似的引腳定義。https://wikidevi.com網(wǎng)站收集有計(jì)算機(jī)硬件的相關(guān)信息,當(dāng)然也包括Broadcom SoC系列。我們找到了下面的條目:
圖:來(lái)源: https://wikidevi.com
觀察包含該類芯片的其他路由器的圖片可以發(fā)現(xiàn),芯片的引腳功能都是大同小異。
Wikidei網(wǎng)站包含眾多硬件的相關(guān)信息,除此之外,制造商提供的相關(guān)文檔也非常詳盡。中國(guó)似乎是唯一一個(gè)各個(gè)品牌路由器的生產(chǎn)國(guó)。
硬件黑客——來(lái)自中國(guó)的供應(yīng)鏈
所有這些中國(guó)制造的電子產(chǎn)品,芯片、外圍設(shè)備、路由器等,經(jīng)常是由同一家工廠組裝完成的。結(jié)果很明顯,這些產(chǎn)品的質(zhì)量都在一個(gè)等級(jí),一些工廠也為相互競(jìng)爭(zhēng)的市場(chǎng)供應(yīng)商生產(chǎn)產(chǎn)品。我們來(lái)看看兩張華碩RT-N53路由器和Belkin F9 K1106無(wú)線中繼器的內(nèi)部圖片。這PCB板上的標(biāo)識(shí)簡(jiǎn)直就是一摸一樣,是不是?
圖:華碩PCB,來(lái)源:https://apps.fcc.gov/
圖:Belkin PCB
巧合嗎?并不像啊。這些標(biāo)識(shí)的字體是ELCAD(電腦輔助電子設(shè)計(jì))軟件默認(rèn)設(shè)置的,如果不是強(qiáng)制要求,開(kāi)發(fā)者是不會(huì)去改動(dòng)的。這意味著相同的模板重用于華碩PCB的開(kāi)發(fā),甚至更多其他供應(yīng)商。因此,同一家ODM(原設(shè)計(jì)制造商)負(fù)責(zé)設(shè)計(jì)制造包括Belkin在內(nèi)各品牌的產(chǎn)品。
在嵌入式設(shè)備生產(chǎn)中,這并不是什么不常見(jiàn)的生產(chǎn)形式,尤其是對(duì)于來(lái)自US的公司。其中的固件多半也是亞洲供應(yīng)商基于標(biāo)準(zhǔn)的亦或是定制的SDK開(kāi)發(fā)的。
-
pcb
+關(guān)注
關(guān)注
4327文章
23172瀏覽量
400215 -
嵌入式
+關(guān)注
關(guān)注
5095文章
19189瀏覽量
307960 -
接口
+關(guān)注
關(guān)注
33文章
8712瀏覽量
152014 -
uart
+關(guān)注
關(guān)注
22文章
1245瀏覽量
101813 -
嵌入式設(shè)備
+關(guān)注
關(guān)注
0文章
112瀏覽量
17054
原文標(biāo)題:嵌入式設(shè)備PCB級(jí)逆向基礎(chǔ)技術(shù)
文章出處:【微信號(hào):fcsde-sh,微信公眾號(hào):fcsde-sh】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論