王詩琹,陳祥東
(中國電子科技集團公司第三十研究所,四川 成都 610041)
電子設備上的單片機執行程序通常是運用仿真器下載到芯片內的。以常見的由單片機和DSP芯片組合設計的模塊級設備為例,單片機可與仿真器相連接,通過JTAG接口直接讀取并保存執行代碼。這種設計方法存在一定風險,雖然通過仿真器讀取的只是執行代碼,但隨著單片機破解技術的飛速發展,應當對單片機本身采取防御措施。
對于設計人員而言,設備的安全性設計是極其重要的一環。網絡信息安全設備是信息系統基礎設施的護盾,保障信息傳輸過程中數據的安全性。本文主要介紹幾種常見的單片機攻防技術,希望對提高網絡信息安全產品的安全性設計有所啟示。
信息安全電子產品的攻擊手段與防御措施永遠是一個相互影響、制約的矛盾共同體。為了更好地保護設備的設計原理和設備自身的安全性,在采取相應的防范措施前,必須了解一些常見的攻擊技術,做到知己知彼,百戰不殆。
攻擊者一般會利用CPU的I/O接口、通用接口協議、公開的保護算法或軟件自身的安全漏洞來實施軟件破譯操作。關于對ATMEL公司的AT89C系列單片機的攻擊,便是一個經典的案例。軟件攻擊操作員使用串行芯片,擦除操作序列的設計缺陷,并在加密鎖復位后使用自編程序。芯片中的源代碼是在運行擦除操作函數對程序的內存數據進行清除的過程中,被反向輸出并竊取。
該攻擊方式是經由對設備的各種接口信號的電磁輻射特征進行監控來獲取具有高時間分辨率和攻擊能力的所有功率端口的模擬特性[1]。由于單片機是一種有源電子器件,當執行不同的指令時,相應的功耗也會相應改變。通過使用一些特制的測量分析儀和數理統計,對測試結果進行監測、分析和處理,即可獲得所需的關鍵數據或信息。
該技術利用某種異常的工作條件,觸發處理器出現軟件故障,并提供額外的可訪問性攻擊。電壓攻擊和時鐘信號攻擊是兩種常見的攻擊方式。低電壓或高電壓攻擊可使電路或誘導功率處理器的自啟動保護程序被禁止運行,以達到執行錯誤操作的目的。時鐘瞬態跳頻可以在不損壞需要保護的信息情況下,重置保護電路。功率和時鐘的瞬時跳動會影響某些處理器中單個指令的解碼和運行。
探針技術是通過破壞元器件塑封層使內部的布線顯現出來,再通過觀察、操作和干擾單片機內部信號而達到攻擊的目的。
為了方便,上述四種攻擊技術一般分為兩種類型:一種是入侵攻擊(物理攻擊),需要在一個特殊的工作環境中通過使用半導體測試設備、顯微鏡和定位器來破壞芯片的塑封外殼;其他三種方法屬于非侵入式攻擊,單片機不會遭受物理損毀。在特定環境下,非侵入性攻擊是相當危險的,因為非侵入性攻擊所使用的設備一般都是自制的,并可方便進行升級,且價格便宜。
非侵入式攻擊的操作過程對攻擊者的處理器基礎知識和軟件編程能力有較高要求。相反,入侵探測攻擊則不需要操作者擁有太多的專業知識,通常使用一套模式化的軟件或工具就能進行操作。因此,對MCU的攻擊往往從入侵的逆向模式開始,而操作者積累的經驗又能促進更廉價和快速的非侵入式攻擊技術的發展。
任何一款單片機芯片,從理論上講,反向研究只要有足夠的費用和時間即可將其破解。因此,在單片機安全設計中,要增加攻擊者的成本和時間,這是開發設計人員必須牢記的基本原則。
此外,還應注意以下幾點:
(1)在芯片選型的策劃階段,應該進行充分的調研分析和對比,了解MCU破譯技術的新進展,包括MCU的正向設計思路和破譯,盡量不要使用普及率高或同一系列的芯片。
(2)盡量不要選擇在中國很受歡迎的芯片,因為芯片破解技術也能輕易獲取。可適當選用較生僻、偏冷門的單片機來加大破譯者的攻擊難度和破解時間。
(3)選擇采用新工藝、新結構、上市時間較短的單片機,如ATMEL、TI、ARM等新產品。
(4)項目研發成本預算中,在針對硬件成本預算資金許可的范圍內,應當選擇具有硬件自毀功能的智能卡芯片,以有效應對物理攻擊。
(5)打磨掉芯片型號等信息,或重新印上其他型號。
SCM防御手段可分為硬件防護和軟件防護兩種范例。軟件防護不能防止他人復制,只會增加破解分析的難度,但對于行家來說是不夠的。因此,將著重介紹和分析以下三種硬件防護方法。
2.2.1 總線置亂法
關于總線加擾的操作方式,一般是破壞MCU和EPROM之間的數據總線和地址總線順序,包括以下幾種方法[2]:
(1)將數據或地址總線的某些線位交換或求反。
(2)將數據或地址總線的某些線位進行異或。
(3)把(1)(2)結合起來構成較復雜的電路。
(4)在調用EPROM時,地址總線(或數據總線)與系統程序的存儲地址(或數據)之間的對應關系根據密鑰進行交換,如密鑰被存儲在一片AT64 73芯片中,且將高8位地址的密鑰重新編碼,也就是說,破壞原始程序的頁碼。
(5)通過增加GAL器件,利用其中的加密模塊對硬件電路進行保護處理。
2.2.2 RAM替代法
電池用來保護RAM,使其避免發生掉電故障。也就是說,首先將一系列數據寫入RAM,并將其連接到電池,然后接入剩余的芯片。此時,當SdCM系統運行時,CPU首先從RAM讀取數據。這既可以作為判斷CPU執行程序正常運行的基本條件,也可以是CPU將運行的程序。將數據進行十六進制的數據比對檢測。若比對的結果相同,則系統將繼續正常運行;反之,系統不能運行。
2.2.3 利用MCU本身的加密位進行加密
MCU大都設置有加密位,最成功的防御方法就是對總線進行燒毀操作。在AT89系列芯片設計開發過程中的運用最為典型。原理是將MCU數據總線中特定I/O數據進行破壞或重置,就算加密位被擦除,譯碼器也不能讀取出芯片程序的正確源代碼。
上述方式也存在缺陷:一是可利用仿真器把RAM接上電池,取下來放在仿真器上讀取源程序;二是這些操作方式在加密小程序方面是有效的,但是因為總線已經被破壞,接口芯片和存儲器不能再通過總線進行擴展;同時,芯片內部的存儲模塊也不會再擁有可反復進行編譯、讀寫的功能特征。
在討論傳統防御技術的基礎上,為了更好地適應新技術的快速發展,提出了一種實用、有效的動態防御技術實現方案。
動態防御技術的核心理念:在程序中看到的地址其實是虛擬地址,當FPGA運行時,CPU程序給出與虛擬地址對應的內存實際地址[3]。原理圖如圖1所示。

圖1 動態防御技術原理
子程序中的調用函數,則在同一子程序中第一次調用的實際函數的絕對地址可以是135H。當調用第二個函數時,實際地址可能就是375H,它的子程序功能可能與相對地址的函數功能根本不同,調用前需通過軟件插入真實地址。因此,可以通過連續調用相對地址相同的子程序函數,從而調用多個不同的子程序來實現防御。虛擬地址映射到真實地址的地方,可以由程序員自己安排,只需在調用前輸出真實地址的對應關系列表即可。硬件和軟件的結合,虛擬地址和真實地址的組合,使得對方即使獲得了源程序,也難以解析對應關系,實例見圖2。

圖2 實例
但是,這種動態防御技術方案也存在一定漏洞,如很難應對使用仿真器進行的單步跟蹤分析操作方式。因此,需做進一步改進。
改進方法一:在FPGA中插入計數器函數,清除CPU,一旦時間超過限制,FPGA就將啟動具有停止操作功能的函數。這時CPU將不能繼續正常運轉,模擬仿真的過程也就無法操作。
改進方法二:在FPGA內運行數據加密處理函數,并由CPU運行特定時間范圍后再去訪問FPGA,讀取密碼數據流進行數據比較,若比較結果不一致,則由CPU破壞主內存RAM中的數據,使所有運行結果出錯。用這種方法可有效應對邏輯分析儀的跟蹤分析。
在執行數據加密運算函數時,可使用與密碼參數進行邏輯XOR的方式。但是,當使用這種方法時,實現動態防御的密碼參數和邏輯運算函數必須放置在難以解碼的同一芯片上。
針對目前的芯片攻擊技術,建議采用ActEL公司生產的42MX系列FPGA進行一次編程開發。這種芯片不能讀取包含代碼點的文件,不能進行代碼分析和破譯。同時,此類型的芯片資源十分豐富,并擁有完整的、成套的設計工具,運用簡潔、方便的VHDL語言就可實現各種功能。
隨著單片機系統產品越來越廣泛地應用于電子產品設計,對其設備中的軟件安全防護問題需引起高度重視。性能優良的硬件是實現外部攻擊的物質基礎,再加上安全可靠的軟件保護措施,二者缺一不可。本文概括性描述了相關技術,在實際設計中還應考慮結合不同設備的具體情況合理進行防御設計,從而提高網絡信息安全設備自身的安全性。