要破解MCU,學校里不會有人講這個,大概很多老師們也不會。為什么要破解,為了興趣?研究?掙錢?還可能是太無聊了。不管怎樣,學習下MCU的防破解技術,就像了解你家的門鎖一樣有價值。
本文雖然來自于一篇老帖子,但是內容卻并不過時,下面就開始正傳。
微控制器的硬件安全措施與嵌入式系統同時開始發展。三十年前的系統是由分離的部件如CPU,ROM,RAM,I/O緩沖器,串口和其他通信與控制接口組成的。
在早期,除法律和經濟外,幾乎沒有保護措施來防止復制這些設備。例如,ROM是用低成本的掩模技術制造的,可用EPROM輕易復制,但后者通常要貴3-10倍或更多?;蚨ㄖ蒲谀OM,那就需要很長的時間和很大的投資。另一種是在游戲機中廣泛使用的簡易ASIC。這些ASIC主要用于I/O部分來取代數十個邏輯器件,在降低成本的同時防止競爭者的復制,使之不得不應用更大且更貴的解決方案。實際上ASIC不會更安全,用示波器來簡單分析信號或窮舉所有可能的引腳組合就可以在數小時內得知它的具體功能。
從七十年代后期開始,微控制器提供一種非常好的取代基于CPU的控制板的方法。它們不僅有內部存儲器和通用I/O接口,還有一些保護措施以防止未經授權訪問內部存儲器的內容。
不幸的是,早期的MCU沒有提供非易失存儲能力,重要的數據不得不存在MCU外部的分離芯片上,因此很容易被讀出數據。一些廉價USB狗也用此法來進行軟件保護。
圖1:Aladdin HASP4 USB狗
下一步進展就是把EEPROM芯片放在與MCU同一封裝的內部。破解這些芯片是不容易的。一種專業的方法是打開樣品的封裝,用微探針來獲得數據?;驅⑿酒匦潞冈谝粋€分開的封裝內。這兩種設備都不是低級破解者所能擁有的。這些破解者會嘗試用自制的微探針(舊芯片的焊線區域是相當大的)或利用軟件上的缺陷來讀出數據。
圖2:PIC12CE518微控制器打開封裝后的照片,可見非易失數據存儲器和MCU是分開封在同一封裝內部的。
圖3:某型32位MCU打開封裝后的SEM圖
一些MCU始終沒有任何特殊的硬件安全保護。它們僅僅是基于不公開編程算法來保護。這可能有偽裝回讀功能,或用校驗功能來代替。一般這些MCU不會提供非常好的保護能力。實際上,在一些智能卡中,適當使用校驗功能能夠起到很強的保護作用。
下一步增強安全保護的措施就是增加一個硬件安全熔絲(security fuse——安全熔絲就是寄存器)來禁止訪問數據。這很容易做到,不需要完全重新設計MCU架構,僅利用熔絲來控制編程接口的回讀功能。缺點是熔絲位很容易被定位并進行入侵攻擊。例如:熔絲的狀態可以通過直接把熔絲位的輸出連到電源或地線上來進行修改。有些例子中僅僅用激光或聚焦離子束來切斷熔絲的感應電路就可以了。用非侵入式攻擊也一樣可以成功。
因為一個分離的熔絲版圖異于正常的存儲陣列。可以用組合外部信號來使熔絲位處與不能被正確讀出的狀態,那樣就可以訪問存在內部芯片上的信息了。用半侵入式攻擊可以使破解者快速取得成功但需要打開芯片的封裝來接近晶粒。一個眾所周知的方法就是用紫外線來擦掉安全熔絲。
圖4:PIC12C508微控制器的安全熔絲位于程序存儲器陣列的外部。
再下一步就是將安全熔絲做成存儲器陣列的一部分,如果已設好熔絲,可禁止外部讀寫數據。一般的熔絲與主存儲器離得很近,或干脆與主存儲器共享一些控制線。因為晶圓廠使用與主存儲器相同的工藝來制造,熔絲很難被定位和復位。非侵入式攻擊仍然可用,但需要時間去尋找。同樣,半侵入式攻擊也可用。當然破解者需要更多的時間去尋找安全熔絲或控制電路負責安全監視的部分,但這些可以自動完成的。進行侵入式攻擊將是很困難的,需要手工操作,那將花費更多的成本來破解。
圖5:MC68HC705C9A微控制器在200倍顯微鏡下可見安全熔絲是存儲器讀寫控制邏輯的一部分
更進一步的是用主存儲器的一部分來控制外部對數據的訪問。這可以用上電時鎖定特定區域地址的信息,將它作為安全熔絲。或用密碼來控制對存儲器的訪問。例如德儀的MSP430F112,只有輸入正確的32字節密碼后才能進行回讀操作。如果沒輸入密碼,只有擦掉芯片后才能操作。盡管這個保護方法看上去比先前的更有效,它有一些缺點可以用低成本的非侵入式攻擊如時序分析和功耗分析來破解。如果安全熔絲的狀態是上電或復位后的存儲器的一部分,這就給破解者用電源噪聲來破解的機會,強制電路進入存儲器中的錯誤狀態。
圖6:PIC16F648A偽頂層金屬層圖案使得對芯片進行微探測攻擊更困難,200倍放大
別的一些使入侵攻擊開銷更多的措施包括使用頂層金屬網格。所有的網格都用來監控短路和開路,一旦觸發,會導致存儲器復位或清零。普通的MCU不會使用這種保護方法,因為設計較難,且在異常運行條件下也會觸發,如:高強度電磁場噪聲,低溫或高溫,異常的時鐘信號或供電不良。故有些普通的MCU使用更廉價的偽頂層金屬網格,但這也有非常高效的光學分析進行微探測攻擊的方法。在智能卡中,電源和地之間鋪了一些這樣的網格線。在這些方法中發現一些設計缺陷使得可以進行微探測攻擊。同樣,這些網格不能保護非侵入式攻擊。因為導線之間有電容,并且光線可以通過導線抵達電路的有效區域,半侵入式攻擊仍然可能。
可編程的智能卡制造商走得更遠,干脆砍掉標準的編程接口。取而代之的是啟動模塊,可以在代碼載入后擦掉或屏蔽掉自己。這些卡只能在初始化時被編程一次,之后只能響應使用者的嵌入軟件所支持的讀寫存在卡里的數據或程序。
圖7:ST16系列智能卡芯片表面金屬層的敏感網格
近期的一些智能卡使用存儲器總線編碼(Bus encryption)技術來防止微探測攻擊。即使破解者獲得數據總線的數據也不可能知道密碼或別的敏感信息。這種保護措施直指侵入式和半侵入式攻擊。但非侵入式攻擊仍然可以像正常的CPU一樣訪問控制非編碼信息。事實上,幾年前就發現廉價地破解編碼信息的方法。
圖8:100倍顯微鏡下的SLE66系列的智能卡芯片上的硬件總線編碼模塊,保護存儲器免受微探測攻擊。
另外一些需要提及的改進是將標準的模塊結構如解碼器,寄存器文件,ALU和I/O電路用類似ASIC邏輯來設計。這些設計稱為混合邏輯(Glue logic),廣泛用于智能卡?;旌线壿嬍沟脤嶋H上不可能通過手工尋找信號或節點來獲得卡的信息進行物理攻擊。這種技術廣泛用于盜版,并可提升常見CPU內核的性能和安全性。例如,SX28微控制器的引腳和程序都兼容于微芯的PIC16C57,但它使用了混合邏輯設計,閃存,大容量RAM使它的性能獲得大幅提升。在PIC微控制器中,破解者很容易跟蹤內存到CPU的數據總線,但在SX微控制器中,幾乎不可能知道總線的物理位置,反向工程和微探測攻擊將是非常困難且耗費時間。
圖9:SX28微控制器引入混合邏輯設計,提升了性能和安全性。
更常用的是芯片由不同模塊組成,但每個模塊使用混合邏輯設計。如CY7C63001A微控制器。在這種情況下,破解者更容易跟蹤模塊之間的總線和控制線,并對芯片進行侵入式和半侵入式攻擊。混合邏輯設計不能防止非侵入式攻擊,但需要更快更昂貴的設備。半侵入式攻擊面臨偽設計模塊的問題。當然破解者可以自動操作來進行窮舉搜索并嘗試攻擊所有可能區域。結果很可能是花了很長時間并沒有取得成功。另一方面,破解者可以直接攻擊存儲器器或它的控制電路。
圖10:的CY7C63001A微控制器使用部分混合邏輯設計,但內部總線很容易被訪問。
技術的進步增加了入侵攻擊的成本。十年前很容易使用激光切割器和簡單的探針臺就可以讀寫芯片表面的任何點,但對于現代的深亞微米半導體芯片就需要用到不一般的且昂貴的技術,這難倒了很多潛在的破解者。如PIC16F877很容易在顯微鏡下觀察并進行反向工程,藏在頂層金屬下的第二層金屬和多晶硅層仍然可見。但在PIC16F887A微控制器中使用了平坦化工藝,使得不會顯示更深的層。唯一的方法是用物理或化學的方法除去頂層金屬。
圖11:500倍顯微鏡下,通過PIC16F877的頂層看到第二層金屬和多晶硅層。
圖12:500倍顯微鏡下,看不到PIC16F877A的頂層金屬下有什么特別的。
安全保護的類型
通過編程接口對片上存儲器進行寫,校驗,讀和擦除操作,這可以用硬件(JTAG)或軟件(bootloader)來實現。在硬件接口方面,安全保護通常是使用安全熔絲來控制接口的操作,如,阻止存儲器中的數據發送到輸出緩沖器里。至于軟件接口,一般使用密碼保護,但通常軟件會檢測某個硬件安全熔絲的狀態。一些微控制器使用了這兩種方法,軟件啟動載入模塊控制系統的編程,另一個快速的硬件接口用來大批量生產的編程。每一種都有它的優勢和劣勢。通過軟件,有更好的靈活性和更好的編程控制能力,但會在時間延遲和功耗方面泄漏一些信息。硬件的執行速度更快,對噪聲攻擊不敏感,不會通過功耗泄漏信息。在硅芯片的資源上,兩者都占用類似大小的空間,對于現代的微控制器,與其它較大的部分如程序存儲器,處理器和模擬接口相比,這部分幾乎可以忽略不計。制造商就可以在同一個芯片上放置兩種或更多的編程接口。如通過異步接口進行在線串行編程,標準的并行編程,軟件啟動模塊通過異步接口編程。
一些制造商故意不提供它們的微控制器的編程規格。這對它本身并沒有提供很好的保護,只是給破解稍稍增加成本而已。這些信息可以通過在開發板上或通用編程器對芯片進行編程而獲得。
很明顯,對于最高等級的安全,系統沒有任何編程接口,并且不能讀寫所存儲的數據。這通常用于掩模ROM微控制器和智能卡。對這種保護,實用破解方法是用微探針接觸數據總線來恢復信息或使用功耗分析和噪聲攻擊來利用軟件的缺陷。當微控制器進行編程但不提供任何返回信息,只有校驗和寫檢查,這可以提供相對高的安全等級。當然,這需要完全執行以避免破解者強制系統一次只校驗一個字節。
大部分現代的微控制器有一個或多個安全熔絲來控制片上存儲器的讀寫。這些熔絲可以用軟件或硬件來實現。軟件的方法就是密碼存儲在存儲器中或一個特定的存儲器位置當作一個安全熔絲。例如,在MC68HC908系列,使用了密碼保護。
MC68HC705B系列的熔絲位于數據EEPROM存儲器的第一個字節。兩種方法的安全性都較高,因為很難從物理上找到熔絲和密碼的位置并復位它們。同時,破解者會嘗試使用噪聲攻擊來跳過安全檢查,或使用功耗分析來觀察猜測的密碼正確與否。
硬件執行方面,安全熔絲物理上位于芯片上。這可以是主存儲器陣列邊上的分離的單個單元,甚至更遠。所有的PIC和AVR微控制器都這樣。這兩者的安全性能并不高,熔絲很容易被找到并被屏蔽。
安全熔絲在主存儲器中可以提供提供更好的保護,這很難找到并屏蔽它們。主存儲器和熔絲可以通過位線(Bit line)接在一起。如Z86E33微控制器,或通過字線(Word line)接在一起,如意法的ST62T60。有趣的是MC68HC705C9A使用了多種安全措施。熔絲單元放在主存儲器單元之間,合用位線。如果熔絲被紫外線擦除了,主存儲器也會被擦掉。對存儲器進行反向工程,發現很難分辨哪部分屬于存儲器,哪部分屬于熔絲。但同時,半侵入式攻擊可以很好工作,因為熔絲有分開的控制電路,這很容易被破解而不影響主存儲器。
圖13:200倍顯微鏡下,Z86E33微控制器的熔絲沿位線緊挨著主存儲器
圖14:200倍顯微鏡下,ST62T60微控制器的熔絲沿字線緊挨著主存儲器
硬件安全保護方面的新進展是將熔絲區域嵌入到主存儲器陣列中,共享控制或數據線,這樣的安全性能更好,熔絲已經成為存儲器的一部分,很難進行定位。將某一部分存儲器作為安全熔絲可以達到更高的安全性能。這種情況下,不擾亂其它部分存儲器的內容,找到位置并復位是異常困難的。這并不意味著別的破解方法不能湊效。但可以減少成功的機會。
安全熔絲可以通過多種方法來監控。最簡單的方法就是在上電時;復位時;進入編程模式時檢查熔絲的狀態。使用電源噪聲或激光脈沖,可以用很短的時間就改變熔絲地狀態。熔絲狀態保存在觸發器或寄存器中并不好,因為觸發器的狀態可以通過缺陷注入攻擊來改變。
-
mcu
+關注
關注
146文章
17134瀏覽量
351017 -
破解
+關注
關注
2文章
23瀏覽量
14257
原文標題:怎樣防住那些想破解MCU的人
文章出處:【微信號:mcugeek,微信公眾號:MCU開發加油站】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論