大家可能都知道破解 51 單片機(jī)是很容易的,但為什么容易,又是如何來破解的,可能很多人就不大清楚了。其實對于MCU的破解從簡單來講,它并不像我們開發(fā)項目那樣復(fù)雜,有時候一個漏洞被發(fā)現(xiàn),可能一個小技巧就可以獲取或者篡改用戶程序,行業(yè)里解密的方法有很多,每個人破解的思路也不一樣。但大致也就是以下幾種。
軟件破解
利用軟件破解目標(biāo)單片機(jī)的方法,并且利用這種方法,不會對目標(biāo) MCU 元器件造成物理損傷。
這種破解方法最早的時候主要是對 WINBONGD,SYNCMOS 單片機(jī)和 GAL 門陣列,這種利用軟件解密設(shè)備,按照一定的步驟操作,執(zhí)行片內(nèi)的程序送到片外的指令,然后用解密的設(shè)備進(jìn)行截獲,這樣芯片內(nèi)部的程序就被解密完成了(GAL 采用邏輯猜測),就可以得到加密單片機(jī)中的程序。
另外對于我們現(xiàn)在市場上比較普遍的ARM系列芯片也同樣適用,比如我們在發(fā)布產(chǎn)品的時候沒有把相關(guān)的調(diào)試接口關(guān)閉掉,如SWD接口,那么破譯者完全可以利用這個調(diào)試接口,將自己編寫的一段代碼燒錄到MCU的ram中,并將執(zhí)行這一端代碼,而這一段代碼就可以把我們存放在flash中的固件程序一個字節(jié)一個字節(jié)的從芯片中讀取出來。
除了這種調(diào)試作用的SWD接口外,對于具備OTA功能的產(chǎn)品也要注意保護(hù)自己的OTA通道,一旦OTA過程被識破,黑客完全有機(jī)會利用這個接口去運(yùn)行自己的程序,從而將Flash中的信息獲取到。
芯片的唯一ID
以上所講的都是利用芯片本身或者軟件漏洞來獲取用戶固件的案例,那么會有人說,我利用芯片的唯一ID在程序運(yùn)行過程中對ID做校驗,這樣即便把固件拷貝出來也沒辦法批量生產(chǎn)。
好的,芯片設(shè)計中增加了唯一ID確實給芯片的破解增加了一些難度,但黑客往往都是不走尋常路的。
首先這種唯一ID在硬件上就存在漏洞,是有機(jī)會被篡改的,ID或者讀取ID的地址。那么我們從軟件上來破解也是可以的。
破解方法:
1. 首先按照上面提到獲取固件的破解方法,獲取到 MCU 的 HEX 文件。2. 使用軟件進(jìn)行 HEX 反編譯,反編譯軟件目前有很多。3. 在反編譯的程序中,找到對比點,比如圖 3 所示,CJNE 語句可能就是這個對比點。因此只要把箭頭 2 那行語句刪除,然后重新把匯編語言下載到 MCU 中,破解工作就完成了。此時即使沒有加密芯片,MCU 也能正常運(yùn)行了。
加密芯片是否安全?
關(guān)于加密芯片,我想說的是,加密芯片本身還是非常安全的,它內(nèi)部都設(shè)計了相關(guān)的防硬件破解的措施,一但對芯片進(jìn)行硬件探測和破解就會觸發(fā)其內(nèi)部保護(hù)電路,將自身數(shù)據(jù)全部擦除。
但是我們的產(chǎn)品是一個系統(tǒng),他不是單獨(dú)的一個加密芯片,一旦我們的功能的主要部分暴露在非安全區(qū),就給黑客帶來了可乘之機(jī),比如一般的智能硬件產(chǎn)品的功能實現(xiàn)都是在系統(tǒng)的主MCU中,在主MCU之外往往通過SPI或者IIC接口來連接加密芯片對系統(tǒng)進(jìn)行保護(hù)。
加密原理:
MCU 和加密芯片各存儲一條認(rèn)證秘鑰,存儲同樣的加密算法;
MCU 產(chǎn)生隨機(jī)數(shù)發(fā)給加密芯片,后者用秘鑰加密后將密文返回,此時 MCU 解密后,比對明文是否和生成的隨機(jī)數(shù)相等。如果相等,程序正常運(yùn)行; 如果不相等,出錯處理。
因為盜版商沒有這條秘鑰,加密芯片與 MCU 交互的數(shù)據(jù)又是隨機(jī)變化的,無法找到規(guī)律,所以只能把加密芯片的程序破解了,再復(fù)制一片加密芯片才能讓 MCU 的程序跑起來。而加密芯片不同于通用 MCU,它內(nèi)部有很多安全機(jī)制,破解難度非常大。
這種加密方案看似非常安全,但其實主MCU存在安全漏洞,依然會被拷貝出固件,執(zhí)行類似破解唯一ID加密的方法即可,因此這種加密芯片只能保護(hù)個別數(shù)據(jù),無法對整個系統(tǒng)進(jìn)行全面的保護(hù)。
硬件破解
前面所講的都有一個前提,那就是用戶忘記關(guān)閉調(diào)試接口,或者用的OTA程序被破解利用,使得黑客獲取到了芯片內(nèi)部的固件程序。
接下來我們聊一下另一個情況,工程師認(rèn)真,沒有留下調(diào)試接口,同時OTA邏輯也設(shè)計的非??煽?,具備了各種保護(hù)邏輯和防重放措施,保證不被黑客檢測到重復(fù)的命令信息。
難道這樣就沒辦法破解了嗎?很遺憾,這才是真正研究芯片破解技術(shù)的專業(yè)人員的起步環(huán)境。
全球有很多做芯片破解的公司和研究機(jī)構(gòu),他們有的甚至在一些院校實驗室和研究所里面,他們往往會為芯片設(shè)計公司服務(wù),來幫助設(shè)計公司提高自己的芯片安全指標(biāo),當(dāng)然也可以提供芯片破譯服務(wù)給有利可圖者提供服務(wù)。
芯片的安全就是攻防對決,不斷提高技術(shù)水平的過程,接下來我們看一下硬件上是怎么破解一顆芯片的。
流程如下:
1、測試使用高檔編程器等設(shè)備測試芯片是否正常,并把配置字保存。
2、開蓋采用手工或?qū)S瞄_蓋設(shè)備進(jìn)行開蓋處理,這里說的開蓋并不是說單片機(jī)或者其他 MCU 真有一個蓋。MCU 其實是一個大規(guī)模集成電路,它是由 N 個電路組合而成的,而晶圓就是搭載集成電路的載體。將晶圓進(jìn)行封裝后,就形成了我們?nèi)粘K玫?IC 芯片,封裝形式可以有多種,比如 TSSOP28、QFN28 等,大家可以自己去百度搜索,這里不再復(fù)述。
3、做電路修改對不同芯片,提供對應(yīng)的圖紙,讓廠家做電路修改,目的是讓 MCU 的存儲區(qū)變得可讀。有些 MCU 默認(rèn)不允許讀出 Flash 或者 E2PROM 中的數(shù)據(jù),因為有硬件電路做保護(hù),而一旦切斷加密連線,程序就暴露可讀了。如圖 2 所示
(切割掉加密熔絲,這樣就可以直接讀出芯片內(nèi)部程序)
4、讀程序取回修改過的 MCU,直接用編程器讀出程序,可以是 HEX 文件,或者 BIN 文件。
5、燒寫樣片給客戶按照讀出的程序和配置,燒寫到目標(biāo) MCU 中,這樣就完成了 MCU 的破解。至此,硬件破解法成功完成。
其他硬件破解
開蓋修改電路破除芯片設(shè)置的讀保護(hù)來對芯片進(jìn)行破譯,這其實還是最一般的手段,對于很多具備熔絲位以及更高保護(hù)措施的芯片,依然有各種破譯辦法,接下來簡單列舉一下:
**電子探測攻擊**
該技術(shù)通常以高時間分辨率來監(jiān)控處理器在正常操作時所有電源和接口連接的模擬特性,并通過監(jiān)控它的電磁輻射特性來實施攻擊。因為單片機(jī)是一個活動的電子器件,當(dāng)它執(zhí)行不同的指令時,對應(yīng)的電源功率消耗也相應(yīng)變化。這樣通過使用特殊的電子測量儀器和數(shù)學(xué)統(tǒng)計方法分析和檢測這些變化,即可獲取單片機(jī)中的特定關(guān)鍵信息。
**過錯產(chǎn)生技術(shù)**
該技術(shù)使用異常工作條件來使處理器出錯,然后提供額外的訪問來進(jìn)行攻擊。使用最廣泛的過錯產(chǎn)生攻擊手段包括電壓沖擊和時鐘沖擊。處理器執(zhí)行錯誤操作。電源和時鐘瞬態(tài)跳變可以在某些處理器中影響單條指令的解碼和執(zhí)行。
**探針技術(shù)**
該技術(shù)是直接暴露芯片內(nèi)部連線,然后觀察,阻止,干擾單片機(jī)以達(dá)到攻擊目的。
**紫外線攻擊方法**
紫外線攻擊也稱為紫外線攻擊方法,就是利用紫外線照射芯片,讓加密的芯片變成了不加密的芯片,然后用編程器直接轉(zhuǎn)換程序。這種方法適合OTP的芯片,做單片機(jī)的工程師都知道OTP OTP芯片的封裝有陶瓷封裝的一半都有石英玻璃,這種是可以直接用紫外線照射的,如果是用塑料封裝的,就需要先將芯片開蓋,將晶圓暴露以后才可以通過這種芯片的加密性比較差,解密基本不需要任何成本,所以市場上這種芯片解密的價格非常便宜,SONIX的SN8P2511解密,飛凌單片機(jī)解密等價格就非常便宜。
**FIB恢復(fù)加密熔絲方法**
這種方法適用于很多的具有熔絲加密的芯片,最有特色的芯片就是TI的MSP430解密的方法,因為MSP430加密的時候要燒熔絲,那么只要能將熔絲恢復(fù)上,那就變一般解密公司利用探針來實現(xiàn),將熔絲位連上,也有的人因為自己沒有太多的解密設(shè)備,需要交由其他半導(dǎo)體線路修改的公司來修改線路,一般可以使用FIB(聚焦離子束)設(shè)備這些設(shè)備目前在國內(nèi)的二手設(shè)備很多,也價格很便宜,一些有實力的解密公司都配置了自己的設(shè)備。這種方法依據(jù)需要設(shè)備和耗材,不是好的方法,但是很多芯片如果沒有更好的方法的時候,就需要這種方法來實現(xiàn)。
**修改加密線路的方法**
目前市場上的CPLD和DSP芯片設(shè)計復(fù)雜,加密性能要高,采用上述方法是很難做到解密的,那么就需要對芯片結(jié)構(gòu)作前面的分析,然后找到加密電路,然后利用芯片線路修改的設(shè)備將芯片的線路做一些修改,讓加密電路失效,讓加密的DSP或CPLD變成了不加密的芯片從而可以讀出代碼。如TMS320LF2407A解密,TMS320F28335解密,TMS320F2812解密就是采用這種方法。
評論