本譯文原著為俄國人Sergei P.Skorobogatov
就讀英吉利劍橋大學(xué)之博士論文,電子文檔的鏈接如下:
http://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-630.pdf
原作者的個人主頁:http://www.cl.cam.ac.uk/~sps32/
摘要
現(xiàn)今的半導(dǎo)體芯片不僅僅用于控制系統(tǒng),而且還用于保護它們免于入侵的威脅。那些認(rèn)識到當(dāng)前失誤而引入新的安防方案的制造商和堅持不懈地嘗試突破保護機制的破解團體之間的斗爭是沒有盡頭的。有些芯片制造商沒有足夠重視設(shè)計和測試保護原理的重要性,即使它們聲稱自己的產(chǎn)品是有高的安全等級的。在這種情形下,設(shè)計工程師擁有方便和可靠的測試安全芯片的方法是至關(guān)重要的。
本文介紹了眾多的破解微控制器(MCU:Micro Control Unit)和智能卡(Smartcard)的方法:包括已知的非侵入式攻擊(Non-invasive attacks),如功耗分析(Power analysis)和噪聲干擾(Glitching);以及侵入式攻擊(Invasive attacks),如反向工程(Reverse engineering)和微探測分析(Microprobing)。現(xiàn)在已經(jīng)有一種新的破解方法---半侵入式攻(Semi-invasiveattacks).和侵入式一樣,它需要打開芯片的封裝以接近芯片表面。但是鈍化層(Passivation)還是完好的,因為這種方法不需要與內(nèi)部連線進(jìn)行電接觸。半侵入式攻擊介于非侵入式與侵入式之間,對硬件的安全是個巨大的威脅。它像侵入式一樣高效,又像非侵入式一樣廉價。
本文還介紹了實用的缺陷注入攻擊法(Fault injection attacks)修改SRAM和EEPROM的內(nèi)容,或改變芯片上任意單個MOS管的狀態(tài)。這幾乎可以不受限制地控制芯片的運行和外圍保護部分。另一點是進(jìn)行了數(shù)據(jù)保存期的實驗,揭示了從已斷電的SRAM和已擦除過的EPROM,EEPROM和閃存芯片中讀出數(shù)據(jù)的可行性。給出了MCU防復(fù)制保護的簡單介紹。也介紹了用半侵入式攻擊來評估硬件安全性的方法.它們有助于依所需的安全等級來適當(dāng)選擇部件。討論了多種防護技術(shù),包括低成本的隱匿方法到新的集成電路設(shè)計方法。
除外責(zé)任
我不接受任何責(zé)任或義務(wù)承擔(dān)任何人或物使用本文提到的材料,說明,方法或主意而受到的損失或傷害。讀者必須意識到有關(guān)部分的一些操作是危險的,并參考所用的每一種物料的健康和安全警告。如有疑問請咨詢專業(yè)人士。
潛在的傷害包括:
1 用于打開封裝和逆向處理的化學(xué)材料。包括會導(dǎo)致嚴(yán)重?zé)齻劬推つw的強酸和強堿,必須戴適當(dāng)?shù)姆雷o眼鏡和手套。
2 3B級的激光用來除去鈍化層,3R級的激光用來進(jìn)行掃描和失效注入(有可見和不可見的激光輻射)。避免眼睛和皮膚受到直接或反射的輻射。激光會導(dǎo)致眼睛的永久傷害和皮膚的嚴(yán)重灼傷。必須戴適當(dāng)?shù)姆雷o用品。
3 擦除芯片的時候用到紫外線。要避免眼睛和皮膚暴露,它也會傷害眼睛和皮膚。 必須戴適當(dāng)?shù)姆雷o用品。
第一章
簡介
(譯者注:介紹作者讀碩讀博的歷史及其它雞毛蒜皮,哎!我的最高學(xué)歷是大專!)
第二章
背景知識
2.1 硅芯片安全措施的演變
工業(yè)控制器的硬件安全措施與嵌入式系統(tǒng)同時開始發(fā)展。三十年前的系統(tǒng)是由分離的部件如CPU,ROM,RAM,I/O緩沖器,串口和其他通信與控制接口組成的。如圖2-1所示:
2-1通用的嵌入式控制器。PCB上的每個部件很容易辨別且極易被復(fù)制。
在早期,除法律和經(jīng)濟外,幾乎沒有保護措施來防止復(fù)制這些設(shè)備。例如:ROM是用低成本的掩模技術(shù)制造的,可用EPROM輕易復(fù)制,但后者通常要貴3-10倍或更多。或定制掩模ROM,那就需要很長的時間和很大的投資。另一種是在游戲機中廣泛使用的簡易ASIC,如圖2-2。這些ASIC主要用于I/O部分來取代數(shù)十個邏輯器件,在降低成本的同時防止競爭者的復(fù)制,使之不得不應(yīng)用更大且更貴的解決方案。實際上ASIC不會更安全,用示波器來簡單分析信號或窮舉所有可能的引腳組合就可以在數(shù)小時內(nèi)得知它的具體功能。
圖2-2 游戲機中的專用集成電路(ASIC)
從七十年代后期開始,微控制器提供一種非常好的取代基于CPU的控制板的方法。它們不僅有內(nèi)部存儲器和通用I/O接口,還有一些保護措施以防止未經(jīng)授權(quán)訪問內(nèi)部存儲器的內(nèi)容。不幸的是,早期的MCU沒有提供非易失存儲能力,重要的數(shù)據(jù)不得不存在MCU外部的分離芯片上,因此很容易被讀出數(shù)據(jù)。最近銷售的一些廉價USB狗也用此法來進(jìn)行軟件保護,如圖2-3所示。
圖2-3 Aladdin HASP4 USB狗
安全領(lǐng)域的下一步進(jìn)展就是把EEPROM芯片放在與MCU同一封裝的內(nèi)部。如圖2-4。破解這些芯片是不容易的。一種專業(yè)的方法是打開樣品的封裝,用微探針來獲得數(shù)據(jù)。或?qū)⑿酒匦潞冈谝粋€分開的封裝內(nèi)。這兩種設(shè)備都不是低級破解者所能擁有的。這些破解者會嘗試用自制的微探針(舊芯片的焊線區(qū)域是相當(dāng)大的)或利用軟件上的缺陷來讀出數(shù)據(jù)。
圖2-4 微芯Microchip的PIC12CE518微控制器打開封裝后的照片,可見非易失數(shù)據(jù)存儲器和MCU是分開封在同一封裝內(nèi)部的。
(譯者注:近來的堆疊芯片,如手機中用的Flash+SRAM的combo存儲器,結(jié)構(gòu)與之類似,不同的是在垂直方向疊加。破解方法亦類似。結(jié)構(gòu)見圖2-5。
圖2-5 意法ST 某型32位MCU打開封裝后的SEM圖片 )
一些MCU始終沒有任何特殊的硬件安全保護。它們僅僅是基于不公開編程算法來保護。這可能有偽裝回讀功能,或用校驗功能來代替。一般這些MCU不會提供非常好的保護能力。實際上,在一些智能卡中,適當(dāng)使用校驗功能能夠起到很強的保護作用。
下一步增強安全保護的措施就是增加一個硬件安全熔絲(security fuse譯者注:安全熔絲就是寄存器)來禁止訪問數(shù)據(jù)。這很容易做到,不需要完全重新設(shè)計MCU架構(gòu),僅利用熔絲來控制編程接口的回讀功能,如圖2-6所示。缺點是熔絲位很容易被定位并進(jìn)行入侵攻擊。例如:熔絲的狀態(tài)可以通過直接把熔絲位的輸出連到電源或地線上來進(jìn)行修改。有些例子中僅僅用激光或聚焦離子束來切斷熔絲的感應(yīng)電路就可以了。用非侵入式攻擊也一樣可以成功。因為一個分離的熔絲版圖異于正常的存儲陣列。可以用組合外部信號來使熔絲位處與不能被正確讀出的狀態(tài),那樣就可以訪問存在內(nèi)部芯片上的信息了。用半侵入式攻擊可以使破解者快速取得成功但需要打開芯片的封裝來接近晶粒。一個眾所周知的方法就是用紫外線來擦掉安全熔絲。
圖2-6 微芯PIC12C508微控制器的安全熔絲位于程序存儲器陣列的外部。
再下一步就是將安全熔絲做成存儲器陣列的一部分,如果已設(shè)好熔絲,可禁止外部讀寫數(shù)據(jù)。一般的熔絲與主存儲器離得很近,或干脆與主存儲器共享一些控制線。因為晶圓廠使用與主存儲器相同的工藝來制造,熔絲很難被定位和復(fù)位。非侵入式攻擊仍然可用,但需要時間去尋找。同樣,半侵入式攻擊也可用。當(dāng)然破解者需要更多的時間去尋找安全熔絲或控制電路負(fù)責(zé)安全監(jiān)視的部分,但這些可以自動完成的。進(jìn)行侵入式攻擊將是很困難的,需要手工操作,那將花費更多的成本來破解。
圖2-7 飛思卡爾Freescale的MC68HC705C9A微控制器在200倍顯微鏡下可見安全熔絲是存儲器讀寫控制邏輯的一部分
更進(jìn)一步的是用主存儲器的一部分來控制外部對數(shù)據(jù)的訪問。這可以用上電時鎖定特定區(qū)域地址的信息,將它作為安全熔絲。或用密碼來控制對存儲器的訪問。例如德儀的MSP430F112,只有輸入正確的32字節(jié)密碼后才能進(jìn)行回讀操作。如果沒輸入密碼,只有擦掉芯片后才能操作。盡管這個保護方法看上去比先前的更有效,它有一些缺點可以用低成本的非侵入式攻擊如時序分析和功耗分析來破解。如果安全熔絲的狀態(tài)是上電或復(fù)位后的存儲器的一部分,這就給破解者用電源噪聲來破解的機會,強制電路進(jìn)入存儲器中的錯誤狀態(tài)。
圖2-8 PIC16F648A偽頂層金屬層圖案使得對芯片進(jìn)行微探測攻擊更困難,200X
別的一些使入侵攻擊開銷更多的措施包括使用頂層金屬網(wǎng)格。所有的網(wǎng)格都用來監(jiān)控短路和開路,一旦觸發(fā),會導(dǎo)致存儲器復(fù)位或清零。普通的MCU不會使用這種保護方法,因為設(shè)計較難,且在異常運行條件下也會觸發(fā),如:高強度電磁場噪聲,低溫或高溫,異常的時鐘信號或供電不良。故有些普通的MCU使用更廉價的偽頂層金屬網(wǎng)格,但這也有非常高效的光學(xué)分析進(jìn)行微探測攻擊的方法。在智能卡中,電源和地之間鋪了一些這樣的網(wǎng)格線。在這些方法中發(fā)現(xiàn)一些設(shè)計缺陷使得可以進(jìn)行微探測攻擊。同樣,這些網(wǎng)格不能保護非侵入式攻擊。因為導(dǎo)線之間有電容,并且光線可以通過導(dǎo)線抵達(dá)電路的有效區(qū)域,半侵入式攻擊仍然可能。
可編程的智能卡制造商走得更遠(yuǎn),干脆砍掉標(biāo)準(zhǔn)的編程接口。取而代之的是啟動模塊,可以在代碼載入后擦掉或屏蔽掉自己。這些卡只能在初始化時被編程一次,之后只能響應(yīng)使用者的嵌入軟件所支持的讀寫存在卡里的數(shù)據(jù)或程序。
圖2-9 意法ST的ST16系列智能卡芯片表面金屬層的敏感網(wǎng)格。
近期的一些智能卡使用存儲器總線編碼(Bus encryption)技術(shù)來防止微探測攻擊。即使破解者獲得數(shù)據(jù)總線的數(shù)據(jù)也不可能知道密碼或別的敏感信息。這種保護措施直指侵入式和半侵入式攻擊。但非侵入式攻擊仍然可以像正常的CPU一樣訪問控制非編碼信息。事實上,幾年前就發(fā)現(xiàn)廉價地破解編碼信息的方法。
圖2-10 100倍顯微鏡下的英飛凌Infineon SLE66系列的智能卡芯片上的硬件總線編碼模塊,保護存儲器免受微探測攻擊。
另外一些需要提及的改進(jìn)是將標(biāo)準(zhǔn)的模塊結(jié)構(gòu)如解碼器,寄存器文件,ALU和I/O電路用似ASIC邏輯來設(shè)計。這些設(shè)計稱為混合邏輯(Glue logic),廣泛用于智能卡。混合邏輯使得實際上不可能通過手工尋找信號或節(jié)點來獲得卡的信息進(jìn)行物理攻擊。這種技術(shù)廣泛用于盜版,并可提升常見CPU內(nèi)核的性能和安全性。例如Ubicom的SX28微控制器的引腳和程序都兼容于微芯的PIC16C57,但它使用了混合邏輯設(shè)計,閃存,大容量RAM使它的性能獲得大幅提升。在PIC微控制器中,破解者很容易跟蹤內(nèi)存到CPU的數(shù)據(jù)總線,但在SX微控制器中,幾乎不可能知道總線的物理位置,反向工程和微探測攻擊將是非常困難且耗費時間。
圖2-11 Ubicom的SX28微控制器引入混合邏輯設(shè)計,提升了性能和安全性。
更常用的是芯片由不同模塊組成,但每個模塊使用混合邏輯設(shè)計。如賽普拉斯的CY7C63001A微控制器。在這種情況下,破解者更容易跟蹤模塊之間的總線和控制線,并對芯片進(jìn)行侵入式和半侵入式攻擊。混合邏輯設(shè)計不能防止非侵入式攻擊,但需要更快更昂貴的設(shè)備。半侵入式攻擊面臨偽設(shè)計模塊的問題。當(dāng)然破解者可以自動操作來進(jìn)行窮舉搜索并嘗試攻擊所有可能區(qū)域。結(jié)果很可能是花了很長時間并沒有取得成功。另一方面,破解者可以直接攻擊存儲器器或它的控制電路。
圖2-12賽普拉斯Cypress的CY7C63001A微控制器使用部分混合邏輯設(shè)計,但內(nèi)部總線很容易被訪問。
技術(shù)的進(jìn)步增加了入侵攻擊的成本。十年前很容易使用激光切割器和簡單的探針臺就可以讀寫芯片表面的任何點,但對于現(xiàn)代的深亞微米半導(dǎo)體芯片就需要用到不一般的且昂貴的技術(shù),這難倒了很多潛在的破解者。如PIC16F877很容易在顯微鏡下觀察并進(jìn)行反向工程,藏在頂層金屬下的第二層金屬和多晶硅層仍然可見。但在PIC16F887A微控制器中使用了平坦化工藝,使得不會顯示更深的層。唯一的方法是用物理或化學(xué)的方法除去頂層金屬。
圖2-13 500倍顯微鏡下,通過PIC16F877的頂層看到第二層金屬和多晶硅層。
圖2-14 500倍顯微鏡下,看不到PIC16F877A的頂層金屬下有什么特別的。
另外一個需要注意的是大量二手的半導(dǎo)體制造和測試設(shè)備出現(xiàn)在市場上,雖不能用于攻擊高端產(chǎn)品,但用于破解舊技術(shù)制造的芯片已經(jīng)夠了。
2.2 存儲器的種類
一個微控制器依照位于存儲器內(nèi)的程序進(jìn)行操作。有多種不同的存儲器類型,大部份曾被用于微控制器。多數(shù)的現(xiàn)代微控制器是以互補型金屬氧化半導(dǎo)體技術(shù)制造。 芯片上的存儲器可能是CMOS型的(SRAM 和一些 EEPROM)或MOS型的。 后者有比較好的性能和小的尺寸。
早期的微控制器使用掩模ROM和紫外線擦除的編程儲存器來儲存程序,使用SRAM來儲存數(shù)據(jù)在大批量且低成本需求的場合,掩模ROM仍然被大量使用。通常這些微控制器的封裝上沒有具體型號的印字,僅有廠商的商標(biāo)。內(nèi)部工廠預(yù)編程的ROM里有軟件版本號。
圖2-15 使用掩模ROM的MCU,通常封裝上只有工廠的內(nèi)部編碼。
掩模ROM有極好的性能,但它不能被再編程,也就是說不能升級程序。帶UV EPROM的MCU通常有兩種方式:一種是帶石英窗的陶瓷封裝,可重新擦除后再編程。另一種是大量生產(chǎn)的標(biāo)準(zhǔn)塑料封裝,也稱為OTP(One-Time Programmable只能編程一次)UV EPROM不方便的地方是:編程的時候需要高壓;一次只能寫入一個字或一個字節(jié),導(dǎo)致整個芯片的編程需要很長時間。即使是可擦除的版本也只能被編程百來次,進(jìn)行擦除操作時,需要在非常強的紫外線下放置20-30分鐘。
SRAM也在一些需要快速讀寫或頻繁升級的微控制器中作程序存儲器。如賽普拉斯的USB 2.0微控制器C7Y68013。SRAM也被達(dá)拉斯半導(dǎo)體的加密型微控制器所用,因為在防破解場合需要更短的擦除時間。
更先進(jìn)的EEPROM比UV EPROM有一些進(jìn)步:可在數(shù)百或數(shù)千個周期內(nèi)再次編程;通常用芯片上的充電泵電路產(chǎn)生高壓;很快可以編程完畢。對EEPROM的更進(jìn)一步的發(fā)展是閃存(flash EEPROM),它在現(xiàn)代的微控制器和智能卡中是主流的存儲器。它提供了更快的編程時間,且可以按塊來擦除,節(jié)省了很多時間;并且可以被擦寫數(shù)萬次。大部分的現(xiàn)代微控制器將閃存作為程序存儲器,這就可以現(xiàn)場升級代碼而無須昂貴的燒錄器。
有種方法是把SRAM和EPROM整合在一起,那就可以達(dá)到快速的讀寫時間,且非易失。但它太貴,只在小部分的智能卡和ASIC中有應(yīng)用。
每種存儲器都有優(yōu)勢和不足,硬件設(shè)計師根據(jù)需求來取舍。普通的微控制器在同一晶粒上有不同的存儲器,如SRAM和EPROM用在OTP PIC微控制器中。SRAM,掩模ROM和EEPROM用在飛思卡爾MC68H05微控制器中。
CPLD中,主要用EPROM,EEPROM和閃存。FPGA大多是基于SRAM的,也有公司提供反熔絲和閃存的非易失FPGA。反熔絲是一種特殊的OTP存儲器,用于將芯片內(nèi)金屬線之間的互聯(lián)進(jìn)行編程。這些互聯(lián)很小,約100納米寬,很難確定它們的狀態(tài)。基于反熔絲的技術(shù),提供了很高的安全性。
2.3 安全保護的類型
通過編程接口對片上存儲器進(jìn)行寫,校驗,讀和擦除操作,這可以用硬件(JTAG)或軟件(bootloader)來實現(xiàn)。在硬件接口方面,安全保護通常是使用安全熔絲來控制接口的操作,如,阻止存儲器中的數(shù)據(jù)發(fā)送到輸出緩沖器里。至于軟件接口,一般使用密碼保護,但通常軟件會檢測某個硬件安全熔絲的狀態(tài)。一些微控制器使用了這兩種方法,軟件啟動載入模塊控制系統(tǒng)的編程,另一個快速的硬件接口用來大批量生產(chǎn)的編程。每一種都有它的優(yōu)勢和劣勢。通過軟件,有更好的靈活性和更好的編程控制能力,但會在時間延遲和功耗方面泄漏一些信息。硬件的執(zhí)行速度更快,對噪聲攻擊不敏感,不會通過功耗泄漏信息。在硅芯片的資源上,兩者都占用類似大小的空間,對于現(xiàn)代的微控制器,與其它較大的部分如程序存儲器,處理器和模擬接口相比,這部分幾乎可以忽略不計。制造商就可以在同一個芯片上放置兩種或更多的編程接口。如通過異步接口進(jìn)行在線串行編程,標(biāo)準(zhǔn)的并行編程,軟件啟動模塊通過異步接口編程。
一些制造商故意不提供它們的微控制器的編程規(guī)格。這對它本身并沒有提供很好的保護,只是給破解稍稍增加成本而已。這些信息可以通過在開發(fā)板上或通用編程器對芯片進(jìn)行編程而獲得。
很明顯,對于最高等級的安全,系統(tǒng)沒有任何編程接口,并且不能讀寫所存儲的數(shù)據(jù)。這通常用于掩模ROM微控制器和智能卡。對這種保護,實用破解方法是用微探針接觸數(shù)據(jù)總線來恢復(fù)信息或使用功耗分析和噪聲攻擊來利用軟件的缺陷。當(dāng)微控制器進(jìn)行編程但不提供任何返回信息,只有校驗和寫檢查,這可以提供相對高的安全等級。當(dāng)然,這需要完全執(zhí)行以避免破解者強制系統(tǒng)一次只校驗一個字節(jié)。
大部分現(xiàn)代的微控制器有一個或多個安全熔絲來控制片上存儲器的讀寫。這些熔絲可以用軟件或硬件來實現(xiàn)。軟件的方法就是密碼存儲在存儲器中或一個特定的存儲器位置當(dāng)作一個安全熔絲。例如,在MC68HC908系列,使用了密碼保護。MC68HC705B系列的熔絲位于數(shù)據(jù)EEPROM存儲器的第一個字節(jié)。兩種方法的安全性都較高,因為很難從物理上找到熔絲和密碼的位置并復(fù)位它們。同時,破解者會嘗試使用噪聲攻擊來跳過安全檢查,或使用功耗分析來觀察猜測的密碼正確與否。
硬件執(zhí)行方面,安全熔絲物理上位于芯片上。這可以是主存儲器陣列邊上的分離的單個單元,甚至更遠(yuǎn)。所有的PIC和AVR微控制器都這樣。這兩者的安全性能并不高,熔絲很容易被找到并被屏蔽。
安全熔絲在主存儲器中可以提供提供更好的保護,這很難找到并屏蔽它們。主存儲器和熔絲可以通過位線(Bit line)接在一起。如zilog的Z86E33微控制器,或通過字線(Word line)
接在一起,如意法的ST62T60。有趣的是MC68HC705C9A使用了多種安全措施。熔絲單元放在主存儲器單元之間,合用位線。如果熔絲被紫外線擦除了,主存儲器也會被擦掉。對存儲器進(jìn)行反向工程,發(fā)現(xiàn)很難分辨哪部分屬于存儲器,哪部分屬于熔絲。但同時,半侵入式攻擊可以很好工作,因為熔絲有分開的控制電路,這很容易被破解而不影響主存儲器。
圖2-16 200倍顯微鏡下,Z86E33微控制器的熔絲沿位線緊挨著主存儲器
圖2-17 200倍顯微鏡下,ST62T60微控制器的熔絲沿字線緊挨著主存儲器
下一個硬件安全保護方面的進(jìn)展是將熔絲區(qū)域嵌入到主存儲器陣列中,共享控制或數(shù)據(jù)線,這樣的安全性能更好,熔絲已經(jīng)成為存儲器的一部分,很難進(jìn)行定位。
將某一部分存儲器作為安全熔絲可以達(dá)到更高的安全性能。這種情況下,不擾亂其它部分存儲器的內(nèi)容,找到位置并復(fù)位是異常困難的。這并不意味著別的破解方法不能湊效。但可以減少成功的機會。
安全熔絲可以通過多種方法來監(jiān)控。最簡單的方法就是在上電時;復(fù)位時;進(jìn)入編程模式時檢查熔絲的狀態(tài)。使用電源噪聲或激光脈沖,可以用很短的時間就改變?nèi)劢z地狀態(tài)。熔絲狀態(tài)保存在觸發(fā)器或寄存器中并不好,因為觸發(fā)器的狀態(tài)可以通過缺陷注入攻擊來改變。
第三章
破解技術(shù)
安全微控制器和智能卡都是被設(shè)計成能保護敏感信息的機密性和完整性。但這并不能完全防止破解者找到所存儲的密鑰。不能被破解者修改密鑰的一部分為已知值;或產(chǎn)生計算值的錯誤而導(dǎo)致敏感信息被推斷出來。這些錯誤可以是數(shù)據(jù)的錯誤,如不正確的數(shù)字信號泄露密鑰;或編碼錯誤,如丟失跳轉(zhuǎn)條件而減少密碼模塊的循環(huán)次數(shù)。
3.1 簡介
對給定的產(chǎn)品評估篡改的難度系數(shù)是個重要的問題。不幸的是安全研究協(xié)會極少關(guān)心給硬件作安去評估。甚至芯片制造商都在試圖避免對它們的產(chǎn)品進(jìn)行安全保護原理的探討。如果發(fā)現(xiàn)設(shè)計上硬件的安全問題,它們會盡可能靜悄悄的解決,然后發(fā)布另一個版本的芯片。
在安全類產(chǎn)品的說明書上沒有什么安全保護的信息,通常僅列出已設(shè)計的防破解措施而不會討論任何詳情。一直有個嚴(yán)重的問題:是否對手能不受限地讀寫元器件。如果答案是否定的,那相對簡單的試驗就可以證實。例如:VISA安全模型對人們的特殊訪問是有缺陷的, 一個服務(wù)工程師在維護的時候就很容易屏蔽掉防篡改保護電路系統(tǒng),下一步就可以取得密鑰材料。但銀行不認(rèn)為這是個問題,它們通常是把安全模塊放在受監(jiān)控的計算機房里,關(guān)掉對管理服務(wù)的訪問。
隨著應(yīng)用數(shù)量的不斷增多,對手能獲得完整的未授權(quán)訪問而不是只能進(jìn)入一次密碼系統(tǒng)。包括我們感興趣的下列東西:含MCU的工業(yè)設(shè)備,付費電視卡,預(yù)付費的水電表,軟件的看門狗,硬件標(biāo)簽,汽車的遙控門鎖和移動電話的SIM卡。很多類似的系統(tǒng)已經(jīng)有方法破解。
參考IBM的做法,依專業(yè)程度和攻擊強度,破解可以分成三類:
初級
他們通常很有才智,但缺乏系統(tǒng)的知識。它們能夠讀寫一些老舊的元器件。他們更樂于破解現(xiàn)有系統(tǒng)的弱點,而不是制造一個新的系統(tǒng)。
中級
他們有足夠的技術(shù)和經(jīng)驗。它們能改變系統(tǒng)已知部分的安全等級,并可能讀寫大部分。通常有高精尖的工具和儀器來分析。
高級
他們的組織背景不凡,是由相關(guān)且技能互補的特殊人士組成的團隊。有能力徹底分析整個系統(tǒng),設(shè)計精巧的攻擊方法,使用的是先進(jìn)工具。中級有可能是它們團隊的組成部分。
3.1.1保護等級
評估半導(dǎo)體芯片的保護等級不是個容易的工作,要考慮太多的因素,從芯片的封裝,芯片的版圖到存儲器的架構(gòu),存儲器的類型,編程和讀寫接口,安全熔絲和安全密鑰的位置,保護原理到別的安全特性如噪聲檢測,電源電壓監(jiān)測,保護用網(wǎng)格,防篡改電阻等。沒有簡單的方法來評估半導(dǎo)體元器件的安全特性,只有使用不同的攻擊方法并檢查結(jié)果。從另一方面來講,半侵入式攻擊比非侵入式更容易自動化操作;同時,需要的設(shè)備比侵入式便宜得多。這使得半侵入式攻擊在在快速且相對便宜的硬件安全評估方面很有市場。
來自IBM的文件也討論了安全系統(tǒng)對不同攻擊方法所具有的保護等級。他們建議分成六個安全等級,從沒有任何安全保護的零級到實質(zhì)上不可破解的高級:
●零級
系統(tǒng)中沒有使用特別的安全措施,所有部分可以自由訪問。例如,使用外部ROM的微 控制器和FPGA。
●低級
使用了一些安全措施,但它的破解是相對容易的。如使用電烙鐵和廉價的模擬示波器就可以破解。破解者需要時間,但不需要很久。如內(nèi)部存儲器無保護,但編程算法私有的MCU。
●中低級
安全措施可以抵擋大多數(shù)廉價的攻擊手段。需要使用到昂貴的工具和特殊的知識,如對功耗分析和電源噪聲敏感的微控制器。
●中級
需要使用到特殊的工具和設(shè)備,并需要特殊的技能和知識。攻擊可能是相當(dāng)耗時間,如防紫外線攻擊的微控制器,舊的智能卡。
●中高級
設(shè)計上就特別關(guān)注安全保護。有攻擊用設(shè)備但購買和使用都很昂貴。使用設(shè)備時需要使用到特殊的技巧和知識。如更高級安全保護的現(xiàn)代智能卡。復(fù)雜ASIC,安全型FPGA和CPLD。
●高級
可阻止所有已知的攻擊,需要一個特別的團隊來研究一種新的破解方法。某些破解用設(shè)備需要設(shè)計建造,不確定攻擊是否會成功。只有大型的組織如半導(dǎo)體工廠或政府建立的實驗室才能做到,如簽名應(yīng)用中的加密模塊。
實際元器件的安全等級不會永遠(yuǎn)保持不變的,將來有可能發(fā)現(xiàn)更廉價有效的破解方法。
3.1.2 攻擊種類
對于安全評估,需要假定破解者可以獲得多個目標(biāo)元器件。我們所關(guān)心的破解目的是復(fù)原安全保護規(guī)則并獲得存儲在微控制器,智能卡或別的芯片級安全處理器中的密鑰資料。
可以把主要的攻擊方法分為五類,
●微探測技術(shù)可以用來直接訪問芯片表面,可以用來觀測,修改和干擾集成電路的工作。
● 反向工程用來推導(dǎo)半導(dǎo)體芯片的內(nèi)部結(jié)構(gòu)并學(xué)習(xí)或仿效它的功能。它需要破解者使用與制造商相似的技術(shù)和能力。
● 軟件攻擊用在處理器正常的通信接口上,從協(xié)議,密鑰的算法或它們的執(zhí)行模塊來獲得安全保護的弱點。
● 竊聽技術(shù)使得破解者可以精確監(jiān)控所能獲得的模擬特性和接口的通信協(xié)議,以及處理器正常工作時的任意電磁輻射。
● 缺陷注入技術(shù)是在正常的工作條件下,使處理器發(fā)生操作錯誤來獲得額外的讀寫能力。
微探測和反向工程技術(shù)是侵入式攻擊,它們需要在特殊的實驗室里花費數(shù)小時或數(shù)周的時間,來打開產(chǎn)品的封裝。別的技術(shù)大多是非侵入式攻擊。在進(jìn)行攻擊時,不需要從物理上破壞元器件。最后一種是半侵入式攻擊。這意味著需要接近芯片里的晶粒,但不需要徹底的攻擊,要用強光,射線,加熱或別的來產(chǎn)生缺陷。
非侵入式攻擊對某些應(yīng)用的威脅有二:一是元器件的所有人可能不會意識到密鑰已經(jīng)被盜,因此,危及安全的有效密鑰在被濫用之前是不會被廢除的。二是非侵入式攻擊彈性大,被攻擊的元器件可以用來廉價地進(jìn)行再生產(chǎn)和更新。
大多數(shù)非侵入式攻擊需要非常熟悉處理器的硬件和軟件。另一方面,侵入式的微探測攻擊只需很少的預(yù)備知識,且通常可以破解用同樣技術(shù)制造的不同產(chǎn)品。通常攻擊從反向工程開始,獲得的結(jié)果有助于研究更快更廉價的非侵入式攻擊。半侵入式攻擊可以用來學(xué)習(xí)元器件的功能和測試它的安全電路。它不需要與芯片的內(nèi)部某層建立物理的連接,不需要使用昂貴的設(shè)備,如激光切割器或FIB機器,被成功用于進(jìn)行簡單的閃光燈或點狀激光攻擊。
攻擊可以是可逆的,元器件可以回到初始狀態(tài),或者使元器件永久修改而不能恢復(fù)。如功耗分析和微探測技術(shù)可以不用損傷元器件就可以得到結(jié)果。當(dāng)然微探測攻擊會留下痕跡,但通常不會影響元器件以后的運行。缺陷注入和紫外線攻擊幾乎可以把微控制器置于不穩(wěn)定狀態(tài),可以改變內(nèi)部電阻,或存儲器不能復(fù)原。另外,紫外線攻擊會留下篡改痕跡。
3.1.3 攻擊過程
因目標(biāo)不同,有不同的攻擊方法。有時候盜版市場上熱銷的產(chǎn)品就很容易賺到錢。大的廠商會考慮從元器件中竊取IP并與自己的IP混合以掩飾盜竊行為。別的公司也許會竊取元器件內(nèi)的秘密資料,用以開發(fā)競爭的產(chǎn)品或賣給別人。產(chǎn)品的設(shè)計者首先必須考慮被攻擊的可能動機,然后是考慮保護原理。下列攻擊過程在系統(tǒng)設(shè)計時應(yīng)該考慮。
來自個人的攻擊,他們想降低配件的成本。對于大公司來講,與增加設(shè)計方面的投資相比,
它們對增加銷售額更感興趣。例如,狡猾的競爭對手會復(fù)制現(xiàn)有的產(chǎn)品來降低研發(fā)成本。當(dāng)然,它們會在盜竊行為的偽裝方面下點功夫。但與完整的研發(fā)成本相比,這些開銷可以忽略的。IP盜版的常見行為是多做一些。常見于廠商的實際制造數(shù)量大于所需數(shù)量時。多余部分就會被賣到市場上,或給第三方。服務(wù)盜竊通常發(fā)生在用電子元器件提供對信息或服務(wù)的訪問控制時。例如有線或衛(wèi)星電視公司會控制所能看到的頻道。如果竊賊能繞過安全系統(tǒng)或模擬該設(shè)備,那服務(wù)提供商就有損失了。如果有大量的盜竊者正常收視,那服務(wù)提供商就虧大了。
競爭對手可以使用拒絕服務(wù)來詆毀原始的產(chǎn)品。這在設(shè)備通過網(wǎng)絡(luò)更新固件時容易發(fā)生。
如果競爭對手能夠?qū)υO(shè)備進(jìn)行反向工程并導(dǎo)出更新用的協(xié)議,就可以發(fā)布惡意的更新代碼來破壞設(shè)備。如通過更新配置文件可以永久損壞FPGA。現(xiàn)代的微控制器和智能卡用閃存來保存程序代碼,如果擦掉了閃存,元器件就不會正常工作了。開發(fā)者需要小心設(shè)計固件更新功能以防止未授權(quán)的訪問。
3.2 非侵入式攻擊
常用的非侵入式攻擊方法有抖動電源的電壓和抖動時鐘信號。欠壓和過壓攻擊用來屏蔽掉保護電路,或強制處理器誤操作。因此,安全處理器會有電壓檢測電路,但它對快速的瞬間波動沒有作用。電源和時鐘瞬間波動也可以用在某些處理器中來影響個別指令的解碼和執(zhí)行。
另一種是電流分析。可以用模數(shù)轉(zhuǎn)換器來測量元器件消耗的電流。驅(qū)動地址和數(shù)據(jù)總線時,每一位都要反向后上拉,每位都要驅(qū)動一個很大的電容負(fù)載。這會導(dǎo)致在狀態(tài)翻轉(zhuǎn)時電源出現(xiàn)明顯的短路脈沖。單條總線從1翻轉(zhuǎn)到0或反之,在時鐘邊沿需要0.5-1mA的漏極電流。一個12位的模數(shù)轉(zhuǎn)換器就可以用來推測任意時刻翻轉(zhuǎn)的總線位數(shù)。SRAM寫操作通常有最強的信號。
另一個可能的威脅是數(shù)據(jù)的保持能力,這是易失存儲器在掉電后保存信息的能力。保存
在靜態(tài)RAM里的密鑰可以在較長時間后的下次上電時恢復(fù)。另一種可能是用低溫來“冰凍”存儲器的內(nèi)容。這樣,靜態(tài)RAM里的信息可以保存足夠長的時間,就可以訪問芯片并讀出內(nèi)容。同樣可以用在非易失的存儲器中,可以檢測出浮柵中的殘留電子。例如,它會影響晶體管導(dǎo)通的閾值電壓,或開關(guān)時的時間參數(shù)。
下一個可能被攻擊的方向是接口信號和訪問協(xié)議。同樣,如果安全協(xié)議被錯誤執(zhí)行,會留下被攻擊的隱患。一些微控制器和智能卡有工廠測試用的接口,那可以訪問芯片上的存儲器以及允許制造商測試元器件。如果一個破解者能夠找到這個接口,就很容易導(dǎo)出保存在芯片里的信息。一般的測試電路信息由制造商來保密,但破解者可以用不同的電壓和邏輯電平加到引腳上就有可能使芯片進(jìn)入測試模式。這種方法有時對微控制器有效,但智能卡的測試電路通常會在使用后破壞掉。同樣,嵌入的軟件升級功能必須防止未授權(quán)的代碼訪問,或者代碼只能加密后發(fā)出。
3.3 侵入式攻擊
對于復(fù)雜的侵入式攻擊,某些部分只能使用昂貴的實驗室設(shè)備來完成。廉價的攻擊通常是使用二手的測試設(shè)備才能做到。有足夠的耐心和技巧,通過二手市場或自行設(shè)計是可以解決設(shè)備問題的。
侵入式攻擊首先是打開芯片的封裝。打開后就可以進(jìn)行探針檢測并修改攻擊。侵入式攻擊的最重要工具是微探針工作站。主要部件是個特殊的帶長焦物鏡的光學(xué)顯微鏡。安裝在帶測試座的穩(wěn)定平臺上,探針臂可以在芯片表面以亞微米的精度步進(jìn)。比頭發(fā)絲還細(xì)的探針安裝在末端,可以接觸到芯片內(nèi)部總線而不損傷它們。
在已打開封裝的芯片表面,頂層的鋁互聯(lián)線被一層鈍化層保護,通常是硅氧化物或氮化物,用來保護不受環(huán)境和離子的侵襲。這些鈍化層在探針接觸之前必須除去。一般是用激光來切出小孔,切除時需謹(jǐn)慎確定激光的能量大小。可以做到僅僅在鈍化層上暴露單條總線。這就能防止意外連接到旁邊的線,小孔也可以固定住探針的位置,減少震動和溫度的影響。
除ROM外,直接從單個存儲器單元中讀出存儲的信息并不常見。存儲的數(shù)據(jù)可以通過存儲器總線來訪問,那樣所有的數(shù)據(jù)都在同一個位置出現(xiàn)。微探針可以用來搜索總線并記錄探測到的值。
為了不用軟件就能讀出所有的存儲器,可以修改處理器的某一部分,如地址計數(shù)器,用以訪問存儲器。程序計數(shù)器在每個指令周期都在增加,用來讀下一個地址,這極為適合作地址發(fā)生器。只需防止處理器執(zhí)行跳轉(zhuǎn),調(diào)用或返回指令,那些指令會擾亂程序計數(shù)器的正常讀狀態(tài)。很容易通過激光來割開正確的金屬互聯(lián),對指令解碼或程序計數(shù)器電路進(jìn)行微小修改,就可以達(dá)到所要得效果。
另一種方法是理解元器件的工作原理來進(jìn)行反向工程。第一步是建立處理器的示意圖。這可以用帶攝像頭的光學(xué)顯微鏡來獲得高分辨率的芯片表面圖案。對于基本的體系結(jié)構(gòu),通過學(xué)習(xí)識別連接圖案,跟蹤明顯模塊邊緣的金屬線,如數(shù)據(jù)和地址總線,可以輕易標(biāo)定出來。所有的處理模塊通常是通過總線連在一起的,很容易識別出總線的鎖存器和驅(qū)動器。
大部分現(xiàn)代的微控制器和智能卡是用0.25-0.5微米的工藝制造的,有2-4個金屬層。可以通過手動檢查和光學(xué)技術(shù)來進(jìn)行反向工程,但需要一些特殊的操作來除去特定層的金屬。下一代的微控制器將使用更細(xì)的工藝線寬和更多的金屬層,將需要使用更昂貴的工具如掃描電子顯微鏡(SEM:Scanning Electron Microscope)。
可以用聚焦離子束(FIB:Focused Ion Beam)來修改芯片結(jié)構(gòu)。FIB與SEM類似,但它能夠用來切割金屬和多晶硅互聯(lián),以亞微米的精度做個新的互聯(lián)。如果使用激光干涉臺,可以在芯片表面進(jìn)行盲操作。芯片可以從背面磨薄至幾十微米。使用激光干涉儀操作或紅外成像,可以定位到單個晶體管,通過在底層的硅挖個合適的孔來進(jìn)行連通。這種背面侵入技術(shù)很早就有人使用了,現(xiàn)在更普遍。
3.4 半侵入式攻擊
在先前討論的非侵入式和侵入式攻擊之間有個巨大的間隙,很多種攻擊方法在這個間隙里面,比典型的侵入式攻擊便宜,與非侵入式攻擊一樣可重復(fù)。這就是即將要介紹的新一類攻擊方法---半侵入式攻擊。如侵入式攻擊一樣它們需要打開芯片的封裝來訪問芯片表面,但鈍化層保持完整,半侵入式攻擊不需要剝離鈍化層或創(chuàng)建內(nèi)部互聯(lián)。無需使用微探針,F(xiàn)IB,激光切割器之類的昂貴儀器。
半侵入式攻擊不是全新的,多年前在EPROM和OTP型微控制器中用紫外線來屏蔽安全熔絲,現(xiàn)代微控制器很少受到此類攻擊,因為設(shè)計時考慮過。
先進(jìn)成像技術(shù)也能作半侵入式攻擊。包括紅外,激光掃描和熱成像。它們中的某些可以用在芯片的背面,這對現(xiàn)代多層金屬設(shè)計的芯片很有效。某些技術(shù)可以觀測芯片內(nèi)部單個晶體管的狀態(tài)。
半侵入式攻擊中的缺陷注入攻擊方法可以修改SRAM中的內(nèi)容,改變芯片內(nèi)任意單個晶體管的狀態(tài),這幾乎可以無限制地控制芯片操作并任意使用保護機制。與非侵入式攻擊相比,半侵入式攻擊需要打開芯片的封裝。但是設(shè)備比侵入式的便宜很多可以在適當(dāng)短的時間內(nèi)完成攻擊。同時可以縮小到確定的范圍,足夠的技巧和知識有助于快速簡易地進(jìn)行破解。進(jìn)行攻擊時的某些操作,如搜索安全熔絲,可以自動進(jìn)行。與侵入式攻擊相比,半侵入式攻擊不需要精確定位,它通常對所有晶體管或部分區(qū)域的晶體管有效。
第四章
非侵入式攻擊
非侵入式攻擊不需要對元器件進(jìn)行初始化。攻擊時可以把元器件放在測試電路中分析,也可單獨連接元器件。一旦成功,這種攻擊很容易普及,并且重新進(jìn)行攻擊不需要很大的開銷。另外,使用這種攻擊不會留下痕跡。因此,這被認(rèn)為是對任意元器件的硬件安全最大的威脅。同時,通常需要很多時間和精力來尋找對特定元器件的非侵入式攻擊方法。這通常對元器件進(jìn)行反向工程,包括反匯編軟件和理解硬件版圖。
非侵入式攻擊可以是被動的或主動的。被動攻擊,也叫側(cè)面攻擊,不會對被攻擊元器件發(fā)生作用,但通常是觀察它的信號和電磁輻射。如功耗分析和時鐘攻擊。主動攻擊,如窮舉攻擊和噪聲攻擊,特點是將信號加到元器件上,包括電源線。
一個簡單的非侵入式攻擊可以是復(fù)制一個上電配置的基于SRAM的FPGA。接上配置芯片用的JATG接口,用示波器或邏輯分析儀,捕捉所有信號。然后可以通過分析波形并回復(fù)獨有的命令。只使用到一半的FPGA資源時,可以輕微改變數(shù)據(jù)流來偽裝盜版的事實。配置時留下一點空間而不影響元器件的運行。JTAG接口在發(fā)送信號時序時也有一些自由,故盜版的波形可以設(shè)置成看上去與原始信號不一樣的。另外,破解者可以在上傳時交換行地址,給人的印象是完全不同的設(shè)計。
另一個例子是當(dāng)破解者投資很多錢來對付費電視訪問卡進(jìn)行反向工程,然后從卡里反匯編內(nèi)部代碼,知道在簽名和操作時發(fā)生的一切。很有可能找到弱點,如在恰當(dāng)?shù)臅r候加上電源噪聲導(dǎo)致處理器發(fā)生故障,來獲得無限制的訪問收視頻道。一旦或得成功,就可以以極具競爭力的價格提供收視服務(wù),或銷售偽造的卡。很明顯,這樣的攻擊需要很大的投資。一旦盜版的產(chǎn)品已投放市場,也有可能被別人攻擊。別人的攻擊就不需要花很多時間,因為盜版的常用廉價的微控制器,安全保護等級不如付費電視卡。盜版的產(chǎn)品幾乎在數(shù)周內(nèi)就會被破解,第二個破解者將向市場傾銷盜版的復(fù)制品。很快,在互聯(lián)網(wǎng)上就有如何制造盜版的資料,以至于任何人都能極低的成本制造盜版的產(chǎn)品。故付費電視的服務(wù)提供商就損失數(shù)百萬。有時,最早的破解者會被起訴,但服務(wù)提供商很難拿回錢,這些行動的唯一效果就是用處罰來威脅黑客團體。另外,服務(wù)提供商不得不花一大筆錢來重新設(shè)計訪問控制系統(tǒng),選擇新的智能卡并開發(fā)軟件,然后分發(fā)給智能卡的用戶。
4.1含糊與安全
半導(dǎo)體制造商給大客戶提供了增強產(chǎn)品防破解能力的措施:包裝上的客戶印字代替了標(biāo)準(zhǔn)的芯片型號。這給人的印象是產(chǎn)品是由定制的集成電路設(shè)計的。眾所周知,ASIC提供了很好地保護措施來防止多種攻擊,只有極少數(shù)經(jīng)驗豐富且裝備精良的破解者才有可能成功破解。這會使很多潛在的破解者望而卻步。但一個信心堅定的破解者會嘗試用簡單的方法確定芯片是不是真的ASIC。最簡單的方法是觀察連接到電源,地,時鐘,復(fù)位,串口或別的接口的引腳。與數(shù)據(jù)庫中被懷疑的微控制器相比較,這種結(jié)果非常可靠,每種微控制器都有自己的引腳特點。一旦發(fā)現(xiàn)相似的,就把它放在通用燒寫器上嘗試讀出結(jié)果。
另一個簡單的方法是限制訪問程序存儲器。通常用在智能卡中,但一些微控制器中也用到。這不是很可靠且實用的方法。當(dāng)然在智能卡中用得很好,所有的客戶被與芯片制造商迫簽署不擴散協(xié)議。但微控制器極少這樣,能被通用燒寫器燒寫的微控制器世界上很多公司都能提供。即使文件中沒有燒寫的規(guī)格,用低成本的示波器幾個小時就可以套出需要的波形。如果微控制器不被特殊通用燒寫器所支持,仍然可以通過從制造商購買開發(fā)板來獲得直接完整的協(xié)議。
4.2時序攻擊(Timing attacks)
一些安全相關(guān)的操作使用輸入的值和密鑰,由半導(dǎo)體芯片執(zhí)行不同的時間來比較。小心的時序測量和分析就能恢復(fù)出密鑰。這個方法最早在1996年的文獻(xiàn)上提到。稍后這種攻擊成功破解了實際的RSA簽名的智能卡。
為了攻擊成功,需要收集裝置的信息,與處理時間整合比較,如問答延遲(question-answer delay)。很多密碼算法容易受到時序攻擊,主要原因是軟件來執(zhí)行算法。那包括執(zhí)行適時跳過需要的分支和操作條件;使用緩存;不固定時間處理指令如倍頻和分頻;還有大量的其他原因。結(jié)果就是執(zhí)行能力典型地取決于密鑰和輸入的數(shù)據(jù)。
為防止此類攻擊可以使用盲簽名(Blinding signatures)技術(shù)。這個方法是利用選定的隨機數(shù)與輸入數(shù)據(jù)混合來防止破解者知道輸入數(shù)據(jù)的數(shù)學(xué)運算法則。
時序攻擊可用在安全保護是基于密碼的微控制器,或使用確定數(shù)字的卡或密碼來進(jìn)行訪問控制的系統(tǒng),如達(dá)拉斯的iButton產(chǎn)品。這些系統(tǒng)中共有的風(fēng)險是輸入的連續(xù)數(shù)字在數(shù)據(jù)庫進(jìn)行再次校驗。系統(tǒng)需經(jīng)常檢查輸入到數(shù)據(jù)庫的密鑰的每個字節(jié),一旦發(fā)現(xiàn)不正確的字節(jié)就會立即停止,然后切換到下一個直到最后一個。所以破解者很容易測量出輸入最后一個密鑰倒請求另一個的時間,并得出發(fā)現(xiàn)的密鑰相似度。嘗試相對小的數(shù)字,有可能找到匹配的密鑰。
為防止這些攻擊,設(shè)計者需要小心計算處理器的周期。當(dāng)密碼進(jìn)行比較時確保正確和錯誤的時間是一樣的,例如:飛思卡爾的68HC08微控制器的內(nèi)部存儲器載入模塊在輸入正確的八字節(jié)密碼后可以訪問內(nèi)部閃存。為達(dá)到正確和錯誤的密碼都處理相同的時間,程序中增加了額外的空操作指令。這對時序攻擊提供了很好的保護。一些微控制器有內(nèi)部阻容振蕩器,那樣處理器的工作頻率與電壓和芯片的溫度相關(guān)。這使得時序分析很困難,攻擊時需要穩(wěn)定元器件的溫度并減少電源線上的噪聲和電壓波動。一些智能卡有內(nèi)部隨機時鐘信號使得攻擊時測量時間延遲無效。
4.3窮舉攻擊(也稱暴力攻擊 Brute force attacks))
暴力對于半導(dǎo)體硬件和密碼來說是另一種意思。對于密碼,暴力攻擊是對系統(tǒng)嘗試數(shù)量眾多的密鑰。通常是使用高速計算機來尋找匹配的密鑰。
一個例子是微控制器中的密碼保護設(shè)置。以德儀的MSP430為例,密碼本身長度為32字節(jié)(256位),抵擋暴力攻擊已經(jīng)足夠了。但密碼分配在與處理器中斷矢量相同的存儲器地址。那么,首先減少存儲器內(nèi)矢量一直指向的區(qū)域。然后當(dāng)軟件被更新時,只有小部分的密碼被修改,因為大部分中斷子程序指向的矢量是相同的地址。結(jié)果是,如果破解者知道早前密碼中的一個,就很容易做系統(tǒng)的搜索,在合理的時間內(nèi)找到正確的密碼。
暴力攻擊也可用在ASIC或CPLD的硬件設(shè)計來實現(xiàn)。這種情況下,破解者使用所有可能的邏輯組合到元器件可能的輸入端并觀察所有輸出。這種方法也稱為黑箱分析(Black-box analysis),因為破解者不知道被測試元器件的情況。通過所有可能的信號組合,嘗試獲得元器件的功能。這種方法對相對小的邏輯器件很有效。另一個問題是破解者使用的ASIC或CPLD有觸發(fā)器,故輸出將可能是當(dāng)前狀態(tài)或輸入的狀態(tài)。但如果預(yù)先檢查并分析信號,搜索的范圍可以顯著減少。例如,時鐘輸入,數(shù)據(jù)總線和一些控制信號是很容易認(rèn)出的。
另一種可能的暴力攻擊,對很多半導(dǎo)體芯片有效,是將外部高壓信號(通常是兩倍于電源電壓)加到芯片引腳上,來試圖進(jìn)入工廠測試或編程模式。事實上,這些引腳用數(shù)字萬用表很容易發(fā)現(xiàn),因為它們沒有保護二極管到電源腳。一旦發(fā)現(xiàn)對高壓敏感的引腳,破解者就可以嘗試可能的邏輯信號組合來加到別的引腳上,找出用于進(jìn)入工廠測試或編程模式的部分。
破解者也可用元器件的通信協(xié)議來找出設(shè)計者嵌入在軟件中的測試和更新用得隱藏功能。
芯片制造商經(jīng)常提供給后期測試用得嵌入硬件測試接口。如果這些接口的安全保護沒有適當(dāng)設(shè)計,破解者很容易利用它來讀寫片上存儲器。在智能卡中,這些測試接口通常位于芯片電路之外,并在測試后從物理上除去。
任何安全系統(tǒng),不管軟件和硬件,在設(shè)計上都可能有缺陷,對于破解者來說都是機會,暴力攻擊有可能找到它。小心設(shè)計安全保護系統(tǒng),進(jìn)行適當(dāng)?shù)脑u估,可以避免很多問題,并使得這些攻擊事實上不可行。
4.4功耗分析(Power analysis)
一個運算設(shè)備的功耗取決于它當(dāng)前的狀態(tài)。依照CMOS晶體管的原理,各部分動態(tài)時的功耗比靜態(tài)的要大。當(dāng)輸入電壓加到反向器上,會引起一個晶體管短路,這個晶體管電流的增加比靜態(tài)消耗的寄生漏電要大得多。在電源線上加個10-20歐的電阻,就可以測量電流的波動。為達(dá)到更好的效果,需要使用至少12位精度和50MHz采樣速度的模數(shù)轉(zhuǎn)換器。這些獲得的參數(shù)可以用來區(qū)別處理器的不同指令并估計總線上同時翻轉(zhuǎn)的位數(shù)。
通過平均多次重復(fù)同樣操作的電流,即使是沒有通過總線的很小信號也能區(qū)別開。有些信號如移位狀態(tài)特別有用,因為很多密碼的密鑰產(chǎn)生算法使用移位操作來逐一移出單個密鑰倒進(jìn)位標(biāo)志。即使?fàn)顟B(tài)位的變化不能直接測量,它們通常會改變指令次序或微碼的執(zhí)行,這會導(dǎo)致功耗的明顯變化。
不同指令導(dǎo)致不同級別的指令解碼和運算單元的活動,可被清晰地區(qū)別開,故運算部分能被推測出。處理器的不同單元在時鐘沿相關(guān)的不同時間里有獨有的開關(guān)狀態(tài),能被高頻儀器分離出來。
有多種不同的功耗分析技術(shù)用在破解密碼算法上。整個分析過程是相對簡單的,只需要標(biāo)準(zhǔn)的現(xiàn)有的廉價儀器設(shè)備。
功耗分析技術(shù)主要有兩種:簡單功耗分析(SPA:Simple Power Analysis)和差分功耗分析
(DPA:Difference Power Analysis)。SPA是在密碼或別的安全相關(guān)操作時直接觀察功耗,可以得知設(shè)備運行時的信息如密鑰資料。如果破解者知道密碼算法,很容易通過觀察處理器指令次序,特別是移位條件轉(zhuǎn)移,找到一些位的信息。如果算法或邏輯運算的結(jié)果很容易被看出,如進(jìn)位狀態(tài),零或負(fù)標(biāo)志,就可以獲得更多的信息。DPA是種更有效的技術(shù),因為破解者不需要知道密碼算法是如何執(zhí)行的。它使用靜態(tài)分析和已知密碼運算的大量功耗跡線來獲取隱藏信息。用統(tǒng)計方法鑒別功耗的微小區(qū)別,可用來恢復(fù)密鑰中的單個的位信息。
圖4-1 用無源探頭獲得的電源電壓-電流曲線,500KS/s 25MS/s
圖4-2 用有源探頭獲得的電源電壓-電流曲線,500KS/s 25MS/s
上述兩圖均為飛思卡爾MC68HC908JB8微控制器在6MHz時啟動模塊的電源電壓-電流曲線。
功耗特性當(dāng)然包括噪聲部分。額外的噪聲可以通過減少獲取信號的探針長度并小心使用測量儀器來降低它。測量接在地線上的電阻的功耗有一些優(yōu)勢。首先,減少了噪聲電平。其次,可以用示波器的探頭直接測量信號,因為大部分探針站有公共的地線與外部電源地相連。為了增加信噪比,可以通過提高平均采樣數(shù)來獲得。
有源探頭能降低輸入電容,增加對輸入信號的帶寬。一種方法是用高速低噪聲的運放來構(gòu)建相對簡單的探頭,另一種是用很短的同軸電纜直連到示波器的輸入端。在這些情況下,探頭的輸入電容顯著減少。
圖4-3 左側(cè)是普通的無源探頭,右側(cè)是自制的有源探頭.
我們對現(xiàn)有的功耗分析步驟進(jìn)行了改進(jìn)。這是一種新的方法,尚未有類似的。我們用鐵芯變壓器來取代連到電源或地的電阻,那樣波形就有點不一樣,因為信號的直流成分丟失了,同時又有些有利條件。常用的方法對直流電流幾乎沒有什么限制。但對于10歐電阻來講100mA的電流意味著有1V的電壓降,那可能中斷微控制器的正常操作。減少這個電阻可以解決這個問題,但會使得難以識別功耗的微小變動。使用變壓器后,不需要使用昂貴的有源探頭,標(biāo)準(zhǔn)的無源探頭就可以給出幾乎相同的結(jié)果。如果信號太小,調(diào)節(jié)二次側(cè)的線圈就可以增加振幅。變壓器也擔(dān)當(dāng)無源濾波器的角色,如波形,同樣的處理器指令對電阻和變壓器所測量到的波形有不同的影響。那可以通過對獲得的信號進(jìn)行處理。為了攻擊獲得成功,需要采集數(shù)千的樣本,然后快速分析處理所展現(xiàn)的秘密。
圖4-4 通過互感器來測量功耗
圖4-5 無源探頭通過鐵芯互感器測量到的波形
圖4-6 左側(cè)是無源探頭獲取到的曲線,右側(cè)是有源探頭獲取到的曲線,速度均為25MS/s.
最近,芯片設(shè)計上已考慮這種攻擊,并將使得這種攻擊方法更難獲得成功。
4.5 噪聲攻擊(Glitch attacks)
噪聲攻擊是快速改變輸入到微控制器的信號,以影響它的正常運行。通常噪聲是疊加在電源上或時鐘信號上,但噪聲也可以是外加的短暫電場或電磁脈沖。在離芯片表面數(shù)百微米處放置兩根金屬針,然后加上少于1微秒的數(shù)百伏電壓的窄脈沖,晶圓襯底會感應(yīng)出一個電場,使得鄰近晶體管的閾值電壓發(fā)生變化。最近出現(xiàn)一種改進(jìn)的方法:使用幾百圈金屬線繞在微探針的針尖構(gòu)成一個小型電感。當(dāng)電流進(jìn)入線圈會產(chǎn)生磁場,針尖將集中磁力線。
每個晶體管和與它相連的線路構(gòu)成有時延特性的RC電路。處理器的最大可用時鐘頻率取決于該電路的最大延遲。同樣的,每個觸發(fā)器在接收輸入電壓和由此引致的輸出電壓之間有個特征時間窗口。這個窗口由給定的電壓和溫度來確定。如果用時鐘噪聲(比正常的時鐘脈沖要短得多)或電源噪聲(電源電壓的快速波動)將會影響芯片里的某些晶體管,導(dǎo)致一個或多個觸發(fā)器進(jìn)入錯誤狀態(tài)。通過改變參數(shù),處理器會被導(dǎo)致執(zhí)行許多完全不同的錯誤指令,有時甚至是不被微碼支持的。經(jīng)管我們不會預(yù)先知道何種噪聲會導(dǎo)致何種芯片的何種錯誤,但它能相當(dāng)簡單地進(jìn)行系統(tǒng)的搜索。
4.5.1 時鐘噪聲攻擊(Clock glitches)
時鐘信號的噪聲攻擊在目前是最簡單的,且相當(dāng)實用。實際應(yīng)用中的噪聲通常用來取代跳轉(zhuǎn)條件并試驗先前的測試指令。可以在安全密碼問詢處理時創(chuàng)建一個攻擊窗口,簡單預(yù)防執(zhí)行這些指令。指令噪聲也能用來擴大循環(huán)的時間。如,串口子程序在輸出緩沖后再讀更多的內(nèi)容;或在密鑰操作時減少循環(huán)次數(shù)來傳一個弱的密碼。
為獲得噪聲,時鐘需要臨時增加一個或大于半個周期,有些觸發(fā)器在到達(dá)新狀態(tài)之前就獲得輸入。時鐘噪聲通常針對處理器的指令流。對硬件執(zhí)行安全保護的微控制器沒有什么效果。實際中,僅使用時鐘噪聲來攻擊微控制器或智能卡的軟件程序接口。
LDA #01h
AND $0100 ;the contents of the first byte of EEPROM is checked
loop: BEQ loop ;endless loop if bit 0 is zero
BRCLR 4, $0003, cont ;test mode of operation
JMP $0000 ;direct jump to the preset address
cont: LDA #C0h
STA $000D ;initialize the serial asynchronous port
CLR $000E
BSET 2, $000F
LDX #50h
wait: BRCLR 5, $0010, wait ;upload user code
LDA $0011
STA x
INCX
DEC $0050
BNE wait
JMP $0051 ;jump to the user code
上例是MC68HC05B6微控制器負(fù)責(zé)安全的啟動模塊代碼
MC68HC05B6微控制器中,有掩模的啟動代碼以防止安全位置位后代碼被上傳出來。它會檢查EEPROM中的第一個字節(jié)的內(nèi)容,如果是0,看作是個安全熔絲已被編程,處理器就跳到循環(huán)的末端。
這類保護的破解是相對容易的。如處理器在循環(huán)里只執(zhí)行一個指令,攻擊時可用不同的時鐘噪聲導(dǎo)致處理器誤操作。不需要小心地與時鐘信號同步,只需要隨機制造噪聲就可在數(shù)次攻擊內(nèi)成功。插入噪聲是相對容易的,無需使用外部發(fā)生器,瞬間短路晶振即可。當(dāng)諧振器在不同的泛音上產(chǎn)生震蕩會發(fā)出很多噪聲。大部分情況下需要在確定的時鐘周期內(nèi)獲得所需結(jié)果,在這種情況下用信號發(fā)生器更好。
使用時鐘噪聲來攻擊某些微控制器也許是很困難的。例如德儀的MPS430微控制器在內(nèi)部RC震蕩器工作的啟動模塊。很難與內(nèi)部時鐘同步,攻擊時很難估計精確的時間。一些智能卡在處理器指令流里會隨機插入延遲,使得攻擊更為困難。使用功耗分析會有幫助,但要求非常昂貴的設(shè)備來實時獲得參考信號。
4.5.2 電源噪聲攻擊(Power glitches)
電源供應(yīng)電壓的波動會導(dǎo)致晶體管閾值電平的漂移。結(jié)果就是一些觸發(fā)器在不同的時間里采樣它們的輸入,或讀出錯誤的安全熔絲的狀態(tài)。 通常用瞬間增加電源電壓或電壓跌落來制造噪聲,一般在10個時鐘周期內(nèi)。電源噪聲通常用在微控制器的程序接口上,能影響處理器運行或硬件安全電路。一般地,弱點比時鐘噪聲更難找到并利用,因為對于時域參數(shù),振幅,上升/下降時間都是變量。
一個例子是上例提到的攻擊MC68C05B6.如果在執(zhí)行AND $0100指令時電源電壓減少
50-70%,處理器從EEPROM中取出的值是FFh而不是實際的值。這會對應(yīng)熔絲未加密狀態(tài)。竅門是小心計算執(zhí)行時間來減少電源電壓,否則處理器會停止運行或進(jìn)入復(fù)位狀態(tài)。這種任務(wù)并不難,復(fù)位后目標(biāo)指令在第一個一百周期內(nèi)被執(zhí)行。破解者可以使用矢量發(fā)生器或構(gòu)建一個自己的噪聲源。
另一個是微芯的老舊的PIC16F84。芯片的擦除操作會解除安全保護。但同時會芯片上程序和數(shù)據(jù)存儲器中的內(nèi)容。安全保護電路在硬件設(shè)計上是在安全熔絲復(fù)位之前擦掉存儲器。但我們發(fā)現(xiàn)在芯片擦除操作時電源電壓幾微秒內(nèi)增加到大約10V,會中斷存儲器擦除操作,但安全熔絲正常完成復(fù)位,這使得有可能讀出存儲器里的內(nèi)容。如此高壓需要謹(jǐn)慎使用,如果時間過長會損傷芯片。新版本的PIC16F84A增加了防欠壓和過壓攻擊的能力。如果電源電壓低于3V或6V,通過編程接口的任意修改存儲器的操作會被立即中斷。
不是一直需要電源噪聲超過電源電壓范圍的規(guī)格。例如,PIC18F84A微控制器,保護機制可以阻止在芯片擦除操作開始后使用大于50mV的噪聲。那會導(dǎo)致中止程序存儲器的擦除操作但不會擦掉熔絲。
上述例子表明噪聲攻擊時無需特殊工具就有很好的效果。智能卡里有時鐘監(jiān)控電路但極少微控制器有。
4.6 數(shù)據(jù)保持能力分析(Data remanence)
處理器一般會把密鑰保存在靜態(tài)RAM里,如果元器件被篡改就會掉電,RAM內(nèi)容丟失,從而保護密鑰不被竊取。眾所周知的是在低于零下20度時,SRAM里的內(nèi)容會“冰凍”。很多元器件把溫度低于這個閾值視為發(fā)生篡改事件。我們做了一些實驗來確定現(xiàn)代SRAM數(shù)據(jù)保持能力與溫度的關(guān)系。我們的實驗表明傳統(tǒng)的思維不再有效。即使在高溫下,數(shù)據(jù)保持能力也是個問題。數(shù)據(jù)保持能力不僅僅對SRAM有影響,對DRAM, UV EPROM, EEPROM和閃存也有影響。結(jié)果是,仍然可以從已擦除的存儲器中獲得一些信息。這會給安全設(shè)備帶來很多問題。
4.6.1 低溫下SRAM的數(shù)據(jù)保持能
安全工程師都很關(guān)注斷電后SRAM器件能保持?jǐn)?shù)據(jù)的時間。原因如下:很多產(chǎn)品使用密鑰或類似的方法進(jìn)行加密和別的安全相關(guān)的計算,需要不能被讀出或改變。最普遍的解決方法是把安全密鑰放在帶篡改傳感器的易失存儲器中。一旦檢測到發(fā)生篡改,易失傳感器會掉電或短路到地。但如果數(shù)據(jù)保留時間大于破解者打開元器件并對存儲器上電的時間,那保護機制就被摧毀了。
在二十世紀(jì)八十年代,發(fā)現(xiàn)低溫能將SRAM的數(shù)據(jù)保存時間增加到幾秒甚至幾分鐘。對于那個時候的元器件,發(fā)現(xiàn)零下20度就可以增加數(shù)據(jù)保存時間,并且會隨著溫度的降低而增加保持的時間。有些就增加了溫度傳感器,溫度低于零下20度就觸發(fā)篡改事件,立即清零存儲器。本次試驗是重復(fù)這個工作,察看2000年后的產(chǎn)品是否也有此特性。
另一個需要關(guān)注的是即使部分內(nèi)容已被破壞,安全信息也能被復(fù)原。假設(shè)破解者獲得了
n=128位密鑰中的m=115位,也就是90%的信息。他可以通過搜n!/(m!(n-m)!=128!/(115!13!)=2.12*1017~258個可能的密鑰。通過1萬臺電腦,每臺每秒進(jìn)行10億次搜索密鑰的操作,破解者只需6個小時就能搜遍所有密鑰。如果只有80%的信息,也就是知道128位密鑰中的103位,那就有2.51*1026 ~288種可能。幾乎增大了一百倍,破解者要花百萬年來搜索密鑰,故認(rèn)為均勻的128位密鑰不能被恢復(fù)。
我們做了一塊特殊的測試板來測試SRAM芯片。所有信號通過4MHz的PIC16F877來控制,微控制器通過RS232接口與計算機相連,進(jìn)行信息的傳輸。SRAM芯片的電源供應(yīng)由CMOS開關(guān)芯片MAX314來控制。同時有液晶顯示器和兩個按鈕來手動控制設(shè)備。為方便芯片的插拔,板上有個鎖緊座。SRAM芯片放在冷藏室內(nèi),通過扁平電纜來控制。
圖4-7 測試板的外觀
我們使用LM135H來監(jiān)控溫度,它的輸出電壓與溫度成正比,系數(shù)為10mV/K。使用普通的數(shù)字萬用表就能讀出溫度值。
每個SRAM芯片都在兩種條件下測試:一種是斷電后電源腳短路到地,另一種是引腳懸空。每個芯片都要在存儲器內(nèi)容全1和全0狀態(tài)下測試。
八個不同的SRAM芯片在不同的溫度下進(jìn)行測試。芯片都是購買自半導(dǎo)體分銷商。包括Dallas DS2064-200, GoldStar GM76C88AL-15, Hyundai HY6264AP-10LL and HY62256BLP-70, NEC D4364C-15 and D4364C-15L, Samsung K6T0808C1D-DB70, Toshiba TC5564APL-15。
我們也測量了電源的電流,待機模式都是在室溫測得的。因為電流很小,不能直接用數(shù)字萬用表測量。使用了一個放大100倍的運放,測出的數(shù)據(jù)如表格。我們定義數(shù)據(jù)保持時間為至少有80%的存儲器內(nèi)容還存在的時間。
圖4-8 室溫下,不同的SRAM芯片的功耗和數(shù)據(jù)保持時間
可以看到一個重要的現(xiàn)象:芯片的功耗越小,它的數(shù)據(jù)保持時間就越長。電源腳連到地的數(shù)據(jù)保存時間都比懸空的要短。一旦SRAM芯片開始丟失信息,就會很快完全丟失。
通過比較兩種芯片NEC4364C-15和NEC4364C-15L,后一種是低電壓版,可以看出低電壓版在任何溫度下都有更長的保持時間。相反的情形出現(xiàn)于HY6264A-10LL和HY62256BL-70。前面那個是超低電壓版。盡管第二個是低電壓版,但它卻有更長的數(shù)據(jù)保持時間,這是因為它使用了更小的晶體管,功耗更小。
圖4-9 溫度和數(shù)據(jù)保持時間的對應(yīng)關(guān)系
我們測試并記錄了現(xiàn)代SRAM芯片樣品的數(shù)據(jù)保持時間特性,這是個溫度的函數(shù)。與常識相反,有好幾種芯片在低于零下20度時的數(shù)據(jù)保持時間極為危險。對于保持80%數(shù)據(jù)一分鐘的溫度,不同器件的差異很大。有些需要冷卻到零下50度,有些在室溫下就可以了。另一個意想不到的結(jié)果是存儲器保持時間不僅因不同類型的器件而不一樣,即使是同一工廠制造的同一類型但系列不一樣的器件的保持時間也不一樣。大概是芯片制造廠的品質(zhì)控制沒有包括數(shù)據(jù)保持時間。同樣工藝的芯片,低功耗的有更長的數(shù)據(jù)保持時間。因此,安全處理器需要在篡改時可靠擦除存儲器,這在芯片使用前變得越發(fā)重要。因為這與時間相關(guān),對于單個的元器件并不實用。但是,測量每個批次的功耗可以給出一個實用的參考。
4.6.2 非易失存儲器的數(shù)據(jù)保持能力
與SRAM只有兩種穩(wěn)定的邏輯狀態(tài)不一樣,EPROM,EEPROM和閃存單元實際是存儲模擬量到晶體管的浮柵電荷。浮柵電荷會改變單元晶體管的閾值電壓,讀單元的時候由敏感的放大器來檢測。對于標(biāo)準(zhǔn)的5V EEPROM,編程后的閾值電壓有3.5V的變化。某些現(xiàn)代的閃存有多電平檢測能力。
我們評估了一些帶不同存儲器的微控制器,研究了殘留數(shù)據(jù)的可能影響。設(shè)計了一個通過計算機并口來控制的特殊測試板。板上有兩組可編程電源來產(chǎn)生VDD和VPP,一個帶雙向電平轉(zhuǎn)換的編程接口,和一個微控制器芯片的插座。加到芯片上的電壓精度為100微伏,信號的分辨率為1微秒。
圖4-10 用來進(jìn)行評估微控制器內(nèi)部存儲器數(shù)據(jù)保持能力的測試板
第一個試驗用的是PIC12C509微控制器。芯片被全寫0,然后再不同時間的紫外線下曝光。放在測試板上用不同的電源電壓來讀出數(shù)據(jù),估計存儲器陣列中的每個單元的閾值電平。假定參考電壓是接在電源線上的,那晶體管的閾值電平就是VTH=k VDD,通常的K接近于0.5。事實是無需測量精確的晶體管閾值電壓,因為我們關(guān)注的是存儲器和安全熔絲的相對擦除時
間。結(jié)果如下:
圖4-11 紫外線擦除后,在不同的電源電壓下測試PIC12C509內(nèi)存儲器的內(nèi)容
圖4-12 電擦除后,在不同的電源電壓下測試PIC16F84A內(nèi)存儲器的內(nèi)容
從圖上可以看出,存儲器在在安全熔絲之前獲得完全的擦除。但有些安全缺陷一直還在。盡管熔絲擦除后,直接讀不出任何有用的東西。但電源噪聲攻擊還是有用的。例如,紫外線下曝光7分鐘后,2.2V的VDD下可以無損地讀出存儲器的內(nèi)容。但安全熔絲直到4.8V仍然有效。當(dāng)破解者得出數(shù)據(jù)從存儲器鎖存到輸出移位寄存器的精確時間,并且那時檢查過安全熔絲的狀態(tài)。它可能會通過降低電源電壓至2V來鎖存數(shù)據(jù)并增加電壓到5V使安全熔絲無效來獲得存儲器的內(nèi)容。
另一種竅門是恢復(fù)存儲器的內(nèi)容,即使在擦除安全熔絲和非破壞存儲器內(nèi)容之間沒有交迭。例如,我們發(fā)現(xiàn)同樣芯片的新樣品在安全熔絲擦除前就開始擾亂存儲器內(nèi)容了。這樣電源噪聲不能用來恢復(fù)存儲器中的信息。只能通過小心調(diào)節(jié)單元里的晶體管的閾值電壓。小心控制存儲器的編程時間可以注入特定數(shù)量的電荷到浮柵中。一般地,EPROM存儲器的編程是通過外部信號來控制的,且所有的時序由編程單元來控制。這就使得破解者有機會通過注入電荷到浮柵中來改變閾值電平,在安全熔絲有效時可以讀出存儲器的內(nèi)容。這種辦法對于現(xiàn)代的EEPROM和閃存,事實上是不可用的:其一,片上硬件電路完全控制編程。其二,對EEPROM和閃存的編程一般使用的是F-N溝道效應(yīng)。結(jié)果就是很難控制注入單元的精確電荷量。同樣,溫度和電源電壓也很難影響控制電路。
下一個試驗使用帶閃存和EEPROM的PIC16F84A。使用了類似的測試次序,不同點是電擦除。可以看到存儲器特性有很大不同。在收到芯片擦除命令后的65微秒存儲器開始擦除,到75微秒擦除完畢。但是這個時間會隨著溫度或電源電壓的變化而改變。例如,芯片加熱到35度時,存儲器在60微秒處開始擦除,70微秒的時候結(jié)束。安全熔絲需要至少125微秒來進(jìn)行至少5次可靠的存儲器擦除。減少電源電壓會增加存儲器和熔絲的擦除時間。所以比例實際上是一樣的。需要注意到除非用硬件復(fù)位來中止,芯片擦除操作至少持續(xù)1毫秒。再加上快速的擦除時間,給人的印象是EEPROM和閃存在數(shù)據(jù)保持方面幾乎沒有問題,并能提供更好的安全保護。我們決定研究這點是否屬實。
在較早的PIC微控制器的安全保護試驗中,指出在擦除操作完成后,PIC46F84芯片的舉止異常。因為該芯片已經(jīng)由PIC16F84A代替,就用新的芯片來測試。
我們試驗確定正常擦除操作后多少信息可以讀出。從圖4-12中可以看出,在標(biāo)準(zhǔn)的10毫秒擦除周期后,存儲器被完全擦除,讀出的都是1。擦除后,單元里晶體管的閾值很低。不能用類似于UV EPROM的方法來測量,因為電源電壓低于1.5V時芯片就不運行了。使用電源噪聲技術(shù),可以短暫的降低電源電壓到1V---對于從存儲器中讀出信息并鎖存倒內(nèi)部緩沖器上已經(jīng)足夠了。但這仍然不足以改變敏感放大器的參考電壓到足夠低,來檢測被擦除單元的閾值電壓。為獲得結(jié)果,我們在電源噪聲上使用了另外一些竅門。存儲器陣列內(nèi)的所有浮柵晶體管的閾值電壓被臨時改變,使得有可能測量已擦除單元的接近于0V的閾值電壓。通過精確控制存儲器的擦除操作,使得襯底和控制柵極被預(yù)充電并在隧道效應(yīng)發(fā)生之前中止操作。結(jié)果,過剩的電子被留在浮柵下的襯底,并改變晶體管的閾值電壓。捕獲的多余電子再結(jié)合過程需約1秒,對于讀取整個存儲器已經(jīng)夠了。為評估存儲器陣列中的每個晶體管的閾值電壓,可以用帶電源噪聲的不同電壓組合來重復(fù)這個過程。
將上述測試方法用在不同的已編程和已擦除芯片,得到存儲器的閾值電壓與不同因素的關(guān)系圖,如擦除次數(shù)和存儲器地址。也能看出,即使擦除一百次,電子也沒有完全從浮柵中離開,這使得有可能獲取存儲器中的內(nèi)容。通過測量樣品的100次編程/擦除周期后,除去會發(fā)生閾值電壓漂移的原始單元。同時,存儲器內(nèi)信息的分析和獲取是復(fù)雜的,因為存儲器單元之間的閾值電壓差比它自己的要大得多。實際上避免這種問題的方法是用同樣的單元作參考,在芯片進(jìn)行額外擦除操作之后,比較測量到的閾值電平。在PIC16F84A的EEPROM里也獲得了類似的結(jié)果。唯一的區(qū)別是十次擦除操作之后的閾值電壓非常接近于全擦除的單元,如果擦除操作超過十次,會使得幾乎不可能從中恢復(fù)出信息。
圖4-13 PIC16F84A中存儲器單元的閾值電壓與擦除次數(shù)的變化關(guān)系
圖4-14 前后兩次擦除對PIC16F84A的存儲器器單元閾值電壓的影響
在下一個測試中,在擦除操作之前把芯片都寫0,結(jié)果是不能區(qū)別已編程和未編程的單元。這意味著在擦除操作前對存儲單元進(jìn)行預(yù)編程是個很好的增強片上存儲器的方法。
不幸的是,從已擦除存儲器中獲取信息的技術(shù)只能在極少數(shù)帶EEPROM/閃存的芯片上使用。第一,有些存儲器,如德儀的MSP430有片上的內(nèi)部穩(wěn)壓電路。電源電壓從1.8V3.6V不會影響到從部分擦除單元的讀操作。很多微控制器在芯片復(fù)位或重新進(jìn)入編程模式會完全復(fù)位并釋放存儲器控制電路。但是,如果存儲器的內(nèi)容沒有完全消失,那會導(dǎo)致一個嚴(yán)重的問題。安全系統(tǒng)都是假設(shè)基于在一個存儲器擦除周期后信息是不可恢復(fù)的。如果非侵入式攻擊不能湊效,侵入式攻擊是有效的。如:存儲器的控制電路可以用FIB來修改,可以直接修改參考電壓,電流源或控制柵極電壓。
最后,有些芯片在對存儲器編程之前會進(jìn)行擦除操作。這使得幾乎不可能從已擦除的存儲器中獲得任何有用信息。一些微控制器的安全保護熔絲設(shè)計不正確,熔絲比存儲器更早擦除。如果芯片擦除操作被過早的中止,片上存儲器內(nèi)的信息就可以正常的被讀出。愛泰梅爾的AT89C51微控制器就是一個例子。當(dāng)這個缺陷在九十年代后期眾所周知后,愛泰梅爾重新設(shè)計了芯片的版圖并增強了防攻擊的能力。
(譯者注:IBM已發(fā)現(xiàn)將鈮酸鋰晶體放在需要檢測的特征點上,鈮酸鋰的折射率隨著所加電場的變化而變化,可以知曉金屬線的邏輯狀態(tài)。當(dāng)采用紫外線激光照射晶體時,可以確定下方金屬的電勢。這種方法可以讀取5V@25MHz的信號。由sandia實驗室研究的方法:使用對硅材料透明的紅外激光,通過照射所需的晶體管,誘導(dǎo)出受邏輯狀態(tài)影響的光電流,從而確定晶體管的狀態(tài)。)
第五章
侵入式攻擊
這種攻擊需要直接接觸元器件的內(nèi)部。如果是個安全模塊或看門狗,就需要打開它,然后讀芯片的存儲器。對于智能卡或微控制器,需要打開封裝后,用聚焦離子束或激光除去鈍化層,用以接觸深埋在芯片鈍化層下的內(nèi)部連線。這種攻擊需要良好的裝備和經(jīng)驗豐富的破解者。同時,隨著特征尺寸的減小和器件復(fù)雜度的提高,侵入式攻擊的開銷越來越昂貴。
某些操作如打開封裝和化學(xué)腐蝕,幾乎人人都可以做,只需很小的投資和有限的知識即可。同時, 如用光學(xué)方法讀取舊式的掩模ROM,或?qū)κ褂脙蓪咏饘伲?微米線寬的芯片進(jìn)行反向工程,是很容易成功的。
通常的侵入式攻擊用來作為了解芯片功能的手段,然后由此研究更廉價和快速的非侵入式攻擊方法。
5.1 樣品的準(zhǔn)備
侵入式攻擊開始于部分或全部除去芯片的封裝,以暴露硅晶粒。總共有幾種方法打開封裝,取決于封裝的類型和以后分析的需求。對于微控制器,通常使用部分打開封裝的方式,那樣器件就可以放在標(biāo)準(zhǔn)的燒寫器上,并可以測試。有些器件需要保持它們的電性能,不能被打開封裝。在這種情況下,芯片的晶粒需要使用焊接機器將晶粒焊在芯片載帶上,通過金線或鋁線連到晶粒的焊盤。與晶粒的連接也可以用探針站的微探針保持接觸。
圖5-1 左側(cè)是焊線機的外觀,右側(cè)是將一個智能卡芯片焊在PCB上
為了能在FIB或SEM下工作,芯片表面需要涂一層薄的金層使之導(dǎo)電,否則會很快積累電子,圖像會一團漆黑。
5.1.1 打開封裝(Decapsulation)
打開芯片的封裝是個復(fù)雜的過程,需要很多經(jīng)驗,這是個共識。(譯者注:本章節(jié)操作時使用到強腐蝕的化學(xué)物品,對人身安全極具威脅,故不予翻譯。
譯者曾在PSG里做過一段時間的FA,當(dāng)時只要打開自來水的開關(guān),就會聞到一股酸味。當(dāng)然,現(xiàn)在沒有那種“特異功能”了。
市場上已出現(xiàn)一種表面呈灰白色的存儲器芯片,封裝材料的成份異于常見的黑色芯片。據(jù)說用原著中的配方打不開它的封裝。)
圖5-2 使用電鉆在塑封外殼上鉆個淺坑
圖5-3 將強酸滴入淺坑,除去覆蓋晶粒的塑料。
圖5-4 用超聲波清洗打開封裝的集成電路
圖5-5 從芯片的背面打開封裝。左側(cè)是過腐蝕,右側(cè)是腐蝕結(jié)果良好。
圖5-6 左側(cè)是被打開封裝的智能卡,右側(cè)是完全腐蝕掉封裝的芯片。
5.1.2 逆向處理(Deprocessing)
該過程與芯片制造的流程相反。(譯者注:本章節(jié)操作時使用到強腐蝕的化學(xué)物品,對人身安全極具威脅,故不予翻譯。)
圖5-7 MC68HC705C9A芯片的原始表面(左)和腐蝕掉表面金屬層(右)的圖片
圖5-8 PIC16F76芯片的原始表面(左)和腐蝕掉表面金屬層(右)的圖片
5.2 反向工程(Reverse engineering)
反向工程是用來理解半導(dǎo)體元器件的結(jié)構(gòu)和功能的技術(shù)。對于ASIC,意味著可以獲得關(guān)于所有晶體管和內(nèi)部互聯(lián)位置的信息。為了獲得成功,需要具有集成電路設(shè)計方面的知識。芯片制造時的所有層次結(jié)構(gòu)需要反向逐一剝離,并攝像以獲取芯片的內(nèi)部結(jié)構(gòu)。最后,處理所有獲得的信息,創(chuàng)建一張標(biāo)準(zhǔn)的網(wǎng)表文件用于進(jìn)行模擬半導(dǎo)體器件。那是個冗長且耗時的過程,但有些公司將此作為標(biāo)準(zhǔn)的服務(wù)。
當(dāng)開始對智能卡和微控制器進(jìn)行反向工程時,需要器件的結(jié)構(gòu)和程序代碼來理解器件是如何工作的。需要明白芯片的哪些地方與安全保護有關(guān),如果存儲器總線進(jìn)行了加密,需要對硬件的響應(yīng)進(jìn)行反向工程。最后,獲得內(nèi)部存儲器的內(nèi)容,進(jìn)行反匯編來理解器件的功能。
對CPLD或FPGA進(jìn)行反向工程稍有不同。即使攻破安全保護,并獲得了器件的配置位流文件。也不得不花很多時間和精力來將它轉(zhuǎn)換成邏輯方程式和簡單的模塊來進(jìn)行稍后的模擬和分析。
5.2.1 使用光學(xué)圖像來重建版圖
對于0.18微米以下特征尺寸的硅芯片進(jìn)行反向工程,帶CCD攝像頭的光學(xué)顯微鏡是個重要的工具,用它來獲取高分辨率的芯片表面圖像。不是每一種顯微鏡都可以的。因為光線不能透過芯片,顯微鏡需要使用反射光源。圖像要清晰,沒有幾何失真和色彩異常,否則很難進(jìn)行圖片對接。
標(biāo)準(zhǔn)的100X物鏡(NA=0.9)的實用最大分辨率大約是0.3微米。為了獲得更高的光學(xué)孔徑,可以使用浸水物鏡和浸油物鏡,對于100X的物鏡,最大分辨率可以達(dá)到0.2微米。另一種增加分辨率的方法是使用更短的波長,使用360納米的近紫外線,分辨率可以提高到0.18微米,這需要特殊的CCD鏡頭。
高分辨率的顯微鏡的主要缺點是物鏡和樣品之間的有效距離太短,特別是在高放大倍數(shù)下。結(jié)果導(dǎo)致不能觀察封裝被部分打開的芯片,需要芯片的封裝全部剝掉。使用長工作距離鏡頭的顯微鏡可以解決這個問題,但分辨率很低。
另一個問題是高分辨率物鏡的焦點很短,這使得焦點外的平面看上去很模糊,降低了圖像的質(zhì)量。在多層芯片中需要倍加注意,因為頂層到底層的距離大于1微米。共焦顯微系統(tǒng)減少了這種影響,所有焦點外的平面呈黑色或顯示不同的顏色。這樣的系統(tǒng)很昂貴,特別是帶激光掃描的,只有相對較大的實驗室才可能裝備。
重建版圖需要芯片內(nèi)部所有層的圖像進(jìn)行整合。通常使用電動工作臺來獲取圖像,用特殊的軟件來整合所有圖像。
通常,特征尺寸等于或低于0.13微米的半導(dǎo)體芯片,需要使用SEM來獲取圖像,SEM的分辨率可以達(dá)到10納米。
(譯者注:每次從硅芯片上腐蝕掉一層,并進(jìn)行照相,然后利用肖特基效應(yīng)顯示N摻雜區(qū)和P摻雜區(qū)。原理是將一薄層金或鈀沉積到硅表面以形成二極管,這些二極管可以在電子束作用下被觀察到。芯片的各層圖像經(jīng)計算機處理,從而確定芯片基本參數(shù)和掩模版,電路圖以及庫單元列表。這種方法曾被成功用于英特爾80386處理器的反向工程。)
5.2.2 獲取存儲器內(nèi)的信息
直接用光學(xué)的方法獲取存儲器內(nèi)的信息只對確定類的掩模ROM有效。如在MC68HC705P6A微控制器中,使用1.2微米技術(shù)的帶有效層編程的NOR掩模ROM,可以在500X顯微鏡下讀出。
圖5-9 MC68HC705P6A內(nèi)部掩模ROM的照片 腐蝕后的PIC16CR57A內(nèi)部掩模ROM的照片
圖5-10 腐蝕前和腐蝕后的MC68HC705C9A芯片內(nèi)部的掩模ROM照片
圖5-11 腐蝕前和腐蝕后的uPD78F9116芯片內(nèi)部的掩模ROM照片
5.3 微探測技術(shù)(Microprobing)
侵入式攻擊的最重要的工具是微探針站。有五大部分:顯微鏡,工作臺,元器件測試座,顯微鏡操作器和探針。通常顯微鏡有三到四個物鏡來調(diào)節(jié)不同的放大倍數(shù)和聚焦深度。探針可以用來捕獲或注入信號,如果直連到示波器,通常就有較大的電容和較低的阻抗。這樣就不適合探測芯片內(nèi)部的信號,除非用在帶緩沖的總線上。有源探頭就可以連到焊盤上,它有很大的帶寬,較低的電容和較高的阻抗。對于大部分應(yīng)用,1微米精度的工作臺已經(jīng)足夠了。
圖5-12 探針站的照片
通常為獲得如存儲器內(nèi)容或密鑰之類的信息,微探針放在數(shù)據(jù)總線上。同時觀察整個總線是很困難的,有多種方法可以克服它。如存儲器的讀操作要重復(fù)多次,2-4個探針用來觀察信號來組合成完整的總線波形。從智能卡中獲取信息更困難,它們的軟件通常不提供任何訪問內(nèi)部存儲器的接口。為獲得成功,我們就復(fù)用處理器的部分組件如地址計數(shù)器或指令解碼器來訪問所有的存儲器單元。程序計數(shù)器在每個指令周期都在自動增加,用來讀下一個地址。這極為適合存儲器掃描。我們所要做的只是防止處理器執(zhí)行跳轉(zhuǎn),引用或返回指令,不能讓這些指令弄亂程序計數(shù)器。對指令解碼器或程序計數(shù)器進(jìn)行微小的修改就能達(dá)到這種效果。這不是個輕松的活,通常需要部分反向工程處理器的電路。對于現(xiàn)代帶頂層網(wǎng)格保護和混合邏輯設(shè)計的智能卡更具挑戰(zhàn)。
5.3.1 激光切割器(Laser cutter)
在硅芯片上,頂層鋁互聯(lián)線被鈍化層覆蓋著。在探針可靠接觸前要除去鈍化層。最方便和最容易使用的方法是使用激光切割系統(tǒng)。
圖5-13 安裝在顯微鏡上的激光切割器
通常,紫外線激光用來除去聚酰亞胺(Polyimide)或別的有機層,這些經(jīng)常出現(xiàn)在鈍化層頂上。紫外線激光也可用來切割鈍化層,綠激光用來切割金屬線。紅外激光用于切割頂層金屬,形成通孔來訪問第二層的金屬層。
圖5-14 紫外線線激光切掉鈍化層后綠激光切掉金屬線的照片
圖5-15 用紅外線激光切掉表面層的金屬,露出下一層的金屬
5.3.2 FIB工作站(Focused Ion Beam workstation)
對于0.5微米及以下的半導(dǎo)體器件需要更有效的工具來建立與內(nèi)部線路的連接。這種工具就是FIB工作站。不僅可以制作測試點,也可用來成像和修復(fù)。在失效分析中,用來準(zhǔn)備切面和缺陷分析。擁有極好的空間分辨率和精度,足以在深亞微米技術(shù)的晶粒上制作探測點。
FIB工作站包括一個真空室,與SEM不同的是內(nèi)有一個電子槍,鎵離子從液態(tài)陰極出發(fā)加速并聚焦成直徑為5-10納米的束流。通過增強離子束的電流,芯片材料可以被除去。通過注入碘之類的蒸汽可以有更好的腐蝕率。可以制作訪問底部金屬層的窗口而不損傷附近結(jié)構(gòu)。通過注入鉑基的有機氣體,可以制造新的連接。使用別的化學(xué)成分,甚至是絕緣物,可以沉積到底部金屬到表面的連接,而不用接觸任何覆蓋層。
圖5-16 用FIB在芯片表面打孔
圖5-17 用FIB切割金屬線
圖5-18 用FIB制作測試點,右側(cè)是光學(xué)照片。
FIB可以在芯片表面以0.1微米的精度進(jìn)行移動,而不論芯片表面結(jié)構(gòu)或芯片的平整度。使用紅外線成像,可以從芯片的背面定位某個晶體管,
5.4 修改芯片
并非一直需要使用微探測技術(shù)來從芯片的內(nèi)部總線獲取信息。有時侯,特別是對于微控制器,可以通過切割掉內(nèi)部的金屬互連線或破壞掉控制電路來屏蔽掉安全保護。FIB很容易將傳輸安全保護狀態(tài)的金屬線連到地上或電源上。微探針也能做到,但對于埋在芯片內(nèi)部的金屬線就無能為力了。
圖5-19 切掉PIC12C508A的某根金屬線來屏蔽掉安全保護系統(tǒng)。
圖5-20 用激光切割器破壞掉PIC16F628的熔絲控制電路來屏蔽掉安全保護系統(tǒng)
芯片修改至少需要對芯片進(jìn)行反向工程來找到可以破解的點,這意味著只有裝備精良且訓(xùn)練有素的破解者才有可能獲得成功。
第六章
半侵入式攻擊
這是一種新的攻擊類型,在2002年我們提出光學(xué)缺陷注入攻擊時引入這個概念。半侵入式攻擊與侵入式一樣,需要打開芯片的封裝來訪問芯片表面。但芯片的鈍化層保持完整---半侵入式攻擊不需要與金屬表面進(jìn)行電接觸,這樣對硅就沒有機械損傷。
隨著特征尺寸的縮小和元器件復(fù)雜性的增加,對侵入式攻擊的要求越來越高,開銷也越大。半侵入式攻擊不需要昂貴的工具,且能在較短的時間內(nèi)得到結(jié)果,使之變得越來越有吸引力。同時,對所有晶體管或部分區(qū)域的晶體管進(jìn)行半侵入式攻擊,這對現(xiàn)代小特征尺寸的芯片比較適合。
半侵入式攻擊不是全新的。通常對裸芯片最容易進(jìn)行電磁分析;打開封裝后,在紫外線下曝光老舊的基于EPROM的微控制器存儲器保護位,這些是很久以前的故事了。半侵入式攻擊用到以下手段:紫外線,X光,激光,電磁場和熱量。可以單獨用其中一種或幾種合用。
半侵入式攻擊最早用于失效分析。這包括背面成像和對觸發(fā)器進(jìn)行單探針探測,但現(xiàn)代的深亞微米元器件不能只靠這些方法。在后期測試時使用半侵入式方法來分析硬件安全性,可以避免一些安全問題,并且比侵入式方法節(jié)省時間和金錢。
使用廉價而簡單的設(shè)備就可以進(jìn)行快速而強大的攻擊。這些攻擊使用計算機控制的工作站就很容易進(jìn)行自動操作,可以在幾個小時內(nèi)快速完成,而侵入式則需要數(shù)天至數(shù)周。
6.1 紫外線攻擊(UV attacks)
這幾乎是最古老的攻擊方式,上個世紀(jì)七十年代中期就用來攻擊微控制器了。在以前被視為侵入式攻擊,但它僅僅需要打開芯片的封裝,當(dāng)然屬于半侵入式攻擊。它對很多OTP和UV EPROM微控制器有效,那些微控制器在設(shè)計上只能抵擋廉價的非侵入式攻擊。
紫外線攻擊可以分成兩步,找到熔絲,用紫外線復(fù)位到未保護狀態(tài)。通常安全熔絲設(shè)計成比程序存儲器擦除得要晚,紫外線不能覆蓋整個芯片。
6.1.1定位安全熔絲
安全熔絲可以從物理上與主存儲器分開,也可嵌入到存儲器陣列。
有多種方法可以用來找到熔絲的精確位置。通用的,但耗時耗錢的方法是將整個芯片反向工程。局部反向工程就能省很多時間。例如,用于存儲器編程用的高壓一般是由外部引腳供應(yīng)的,可以借此跟蹤到所有的存儲器單元,包括熔絲。在顯微鏡下很容易跟蹤到低至0.8微米技術(shù)制造的芯片的熔絲。線寬更低的,尤其是平面工藝制造的,對其進(jìn)行光學(xué)分析是不可行的,需要反向處理芯片來觀察內(nèi)部結(jié)構(gòu)。
另一種是損傷芯片的不同部分并觀察結(jié)果。這樣處理需要很長時間和很多樣品才能成功。
如果熔絲距離存儲器很近,或者是嵌入的。對其定位將很困難。同時,用紫外線來擦除熔絲也一樣。測試的順序很簡單,芯片的半個表面用不透光的材料擋住,然后將芯片置于紫外線下照射一段時間,如果保護被解除了,那熔絲就在未覆蓋部分。否則,交換覆蓋和未覆蓋區(qū)域,對每部分減半后重復(fù)進(jìn)行就可以了。
這種攻擊可以在約15次反復(fù)后,以10-20微米的精確度定位熔絲,通常耗時不超過3小時。對于熔絲嵌入在主存儲器中的情況,需要更高的精確度,要用到紫外線激光或光阻掩模。但有個更有效更簡單的方法是用記號筆將不需要紫外線照射的地方涂抹覆蓋。別的半侵入式攻擊也可以用來尋找熔絲。如激光掃描技術(shù)可以用來直接讀晶體管的狀態(tài)。掃描同樣的芯片兩次,一次是安全位置位,另一次是復(fù)位。將掃描結(jié)果相比較就可以揭示修改的位置。然后就可以光學(xué)檢查該區(qū)域來標(biāo)出熔絲。
另一種是用光學(xué)缺陷注入來改變芯片內(nèi)部不同晶體管的狀態(tài),尋找影響熔絲狀態(tài)的位置。
6.1.2 定點攻擊(Toothpick attacks)
術(shù)語“定點攻擊”首次出現(xiàn)在賽靈思(Xilinx)的CPLD白皮書上。與我們最近提出的光學(xué)缺陷注入攻擊類似,與別的未知的廉價攻擊一樣,越來越常用。為了達(dá)到更高的精確度,我們將定點攻擊引入到紫外線攻擊中。
圖6-1 紫外線定點攻擊的工具
圖6-2 激光切除了所涂抹的一部分以暴露所需的EPROM。500X
用普通的記號筆涂抹芯片表面后,用木質(zhì)牙簽刮掉所需的區(qū)域。數(shù)支不同顏色的記號筆在同一存儲器芯片上進(jìn)行測試。測量干凈和涂抹的芯片在擦除時間上的差異。結(jié)果在列表中
圖6-3 紫外線在不同顏色水筆中的透光率
紅色記號筆是最佳的。芯片表面可以看到精確的位置,同時提供了適當(dāng)?shù)乃p。擦掉干的印記對下面的鈍化層沒有任何損傷。有些筆墨輕微導(dǎo)電,小心使用它們,避免涂到焊線區(qū)。
處理過程不需要很有經(jīng)驗,可以很快學(xué)會,這些竅門有助于快速找到安全熔絲的位置。油墨在每個擦除/涂抹周期后用溶劑除去。
在顯微鏡下刮擦過的表面幾乎不可能達(dá)到10微米以下的定位精度。但對于那些安全熔絲遠(yuǎn)離主存儲器的微處理器已經(jīng)足夠了。為了達(dá)到更好的效果,涂層可以用激光來切割。紫外線激光最理想了,綠色激光在黑和紅的涂層上也能很好工作。
所以,用很廉價的工具裝備的破解者也能用紫外線成功攻擊芯片上所需的區(qū)域。但是當(dāng)今的很多微控制器制造商使用了多種保護技術(shù)來抵擋紫外線攻擊。這些技術(shù)包括在芯片上覆蓋一層頂層金屬來完全阻擋紫外線,使用不能被紫外線復(fù)位的特殊設(shè)計單元,以及使用紫外線傳感器來防止芯片暴露在紫外線下工作。
6.1.3 EEPROM和閃存的問題
如EPROM一樣,大部分浮柵類型的存儲器也對紫外線攻擊敏感。同時,設(shè)計者有更多的自由來選擇不同的保護方式來阻止攻擊。EEPROM和閃存可以雙向改變它們的狀態(tài),最簡單的是用某個單元的擦除狀態(tài)來指示報警,一個已編程狀態(tài)來相應(yīng)屏蔽掉安全特性。這個做法對控制邏輯的修改很少。在很多制造商的閃存型微控制器中廣泛使用。紫外線有五種可能的方法來影響浮柵存儲單元:
● 把存儲器單元從已編程態(tài)改為擦除狀態(tài),如果擦除狀態(tài)對應(yīng)屏蔽安全特性就會影響安全熔絲。
● 把存儲器單元從擦除狀態(tài)改為已編程態(tài),如果已編程態(tài)對應(yīng)屏蔽安全特性就會影響安全熔絲。
● 把存儲器單元從擦除狀態(tài)或已編程態(tài)改為中間態(tài),如果單元控制電路的參考電壓在電源供應(yīng)電壓之上時有可能影響安全特性。
● 使存儲器單元的晶體管閾值電壓漂移出操作電平的范圍,這會鎖掉單元。這對防紫外線攻擊有利,但破解者也可用此定位熔絲。
● 存儲器單元的晶體管閾值電壓沒有漂移到改變狀態(tài)的程度。
定位攻擊能用此來鎖定熔絲位置,即使用紫外線也不能將其復(fù)位。除非熔絲上有一層金屬保護或?qū)ψ贤饩€不敏感。盡管如此,缺陷注入攻擊仍然可以用來改變?nèi)劢z狀態(tài),或使用侵入式攻擊來永久改變它。
6.2 背面成像技術(shù)(Backside imaging techniques)
半導(dǎo)體分析的第一步就是在顯微鏡下進(jìn)行目檢。晶體管的特征尺寸每年都在縮小,芯片表面的結(jié)構(gòu)越來越難觀察。使用0.8微米以上的技術(shù),很容易識別出微控制器的主要部分---ROM;EEPROM;SRAM;CPU以及CPU的指令解碼器和寄存器。0.5-0.35微米工藝的芯片,就很難區(qū)別ROM;SRAM和閃存。低于0.25微米的芯片,幾乎看不出什么。這不僅僅是特征尺寸小,而且芯片表面有多層金屬。另外,平面工藝用來填充金屬層和金屬焊線區(qū)的空白區(qū)域,這會阻止光線通過。
圖6-4 光的波長與硅的透光率 紅外燈(左)和普通燈(右)
一種方法是使用紅外線,不論反射還是直射,從芯片背面觀察。硅幾乎對波長大于1.1微米的光線透明。但是一些現(xiàn)代芯片使用了高摻雜的硅晶圓(〉1.1019cm-3),對紅外線就不透明了。需要更強的光源或靈敏度更高的紅外攝像頭。
圖6-5 0.35um技術(shù)的MSP430F112微控制器的標(biāo)準(zhǔn)光學(xué)照片(左)和反射光背面成像照片(右)
圖6-6 透射光拍照示意圖,右側(cè)是MSP430F112的透射照片。
圖像用直射光有很好的效果,不需要很強的光源,甚至標(biāo)準(zhǔn)的低成本單色CCD鏡頭就可以用來成像。一塊空白的硅晶圓用來濾除正常的光線。
反射光有更好的對比度,它不需要通過多層金屬。在0.5微米及以下的技術(shù)中,可以比正常圖片得到更多的信息。需要注意的是從背面獲得的圖像是正常圖像的鏡像,實際使用時可以把芯片水平翻轉(zhuǎn)一下。
背面成像的另一個用處就是獲取ROM的內(nèi)容。在正面,晶體管被頂層金屬所遮蔽,通過背面就可以很清楚地看到。例如無需使用類似化學(xué)腐蝕來檢查掩模ROM內(nèi)容的侵入式攻擊,直接觀察背面就可以了,而這是種半侵入式技術(shù)。這種方法因光學(xué)系統(tǒng)的最大解析度而限制了近紅外(對于硅是1-1.1微米)區(qū)域的分辨率低于0.6微米。
圖6-7 1.0um技術(shù)的MC68HC705P6A微控制器內(nèi)掩模ROM的標(biāo)準(zhǔn)光學(xué)照片(左)和透射光背面成像照片(右)
背面成像廣泛用于失效分析中,從定位失效晶體管或FIB后觀察內(nèi)部互聯(lián)。需要說明的是這樣的系統(tǒng)成本極高,只有相關(guān)的大公司可能提供。但在簡陋的實驗室里用近紅外顯微鏡和紅外敏感的鏡頭也能做到,就像例子中那樣。
6.3 主動光探測技術(shù)(Active photon probing)
發(fā)明半導(dǎo)體晶體管的時候,就發(fā)現(xiàn)它對離子輻射比先前使用的電子管(真空管)更敏感。包括核爆炸,同位素輻射,X光和宇宙射線。在六十年代中期,在脈沖激光實驗時,發(fā)現(xiàn)連續(xù)光會導(dǎo)致一些類似現(xiàn)象。激光就被用來模擬離子輻射對半導(dǎo)體的各種效應(yīng)。
科技獲得了驚人的發(fā)展,昂貴的基于惰性氣體的激光和固態(tài)激光被低成本的半導(dǎo)體激光所代替。結(jié)果是激光技術(shù)走出實驗室進(jìn)入消費電子領(lǐng)域。
如果光子的能量超過半導(dǎo)體的能隙帶寬(>1.1eV或<1100nm),激光就可以將半導(dǎo)體集成電路的特定區(qū)域離子化。波長為1.06微米的激光(光子能量1.17eV)對于硅有約700微米的穿透深度并有良好的空間離子化均勻度。但是,因為有幾微米的散射,聚焦能力受限,并且對于現(xiàn)代半導(dǎo)體元器件來說,不夠精確。但是,當(dāng)從紅外移到可見光區(qū)域時,光子的吸收能力顯著增加,可以使用更為細(xì)小的紅或綠激光,意味著達(dá)到同樣離子化能力所需的能量更少。
圖6-8 激光切割器的外觀
在CMOS元器件中,有個危險是電路被鎖定,會導(dǎo)致開路而永久損壞。對CMOS結(jié)構(gòu)使用輻射時必須考慮到這些。
在主動光子探測中,一束掃描光子束作用到集成電路上。光子的能量大于硅的能帶,在半導(dǎo)體中產(chǎn)生電子空穴對。低能量的光子能持續(xù)作用到PN結(jié),但只發(fā)生熱效應(yīng),那比光電效應(yīng)弱得多。
失效分析時使用到多種激光掃描技術(shù)。通常使用激光掃描顯微鏡。盡管這些顯微鏡在快速掃描方面是個很大的優(yōu)勢,一秒鐘可以掃描一幀。但對于小型的研發(fā)實驗室來講,它太貴了。因此,在實驗中,我們使用便宜些但速度也慢些的激光源,樣品在XY電動臺上移動。激光器附在探針站顯微鏡的攝像口上,帶芯片的測試座安放在XY電動臺上。盡管掃描一個100*100微米的區(qū)域需要大約15分鐘,這仍然適合做研究。
6.3.1激光掃描技術(shù)(Laser scanning techniques)
在硬件分析中有兩種主要激光掃描技術(shù)。一種是光束誘導(dǎo)電流(OBIC:Optical Beam Induced Current)用在沒有偏壓的芯片上,尋找表面激活的摻雜區(qū)域。另一種是光束誘導(dǎo)電壓變化(LIVA:light induced voltage alteration),用于正在運行中的芯片。在OBIC中,光電流直接用來產(chǎn)生圖像。這樣,被分析芯片的電源腳可以連接一個電流放大器。它的值可以通過轉(zhuǎn)接卡紀(jì)錄到計算機里。對于LIVA,光束掃描恒流供電的集成電路表面,監(jiān)控電壓變化就可以得到圖像。
圖6-9 PICF84A安全熔絲區(qū)域的標(biāo)準(zhǔn)光學(xué)照片(左)和激光掃描照片(右)
OBIC技術(shù)能被用來附加在標(biāo)準(zhǔn)的光學(xué)圖像上,就可以定位芯片內(nèi)的激活區(qū)域。我們用MATLAB軟件畫了個掃描后的結(jié)果圖像。對照光學(xué)圖像,激光可以對準(zhǔn)芯片正面或背面的有效區(qū)域。從正面掃描,可以用紅色點狀激光(波長約650納米)作光源,掃描芯片內(nèi)的安全熔絲區(qū)域后的結(jié)果。背面掃描用波長為1065納米的紅外激光,從背面掃描芯片的同樣區(qū)域。從照片可以看出,與正面掃描相比,背面掃描效果更好,因為沒有來阻擋激光束的金屬層。激光圖像能用于掩模ROM的信息提取上,下圖是使用類似的方法獲的紅外背景圖像。
圖6-10 PICF84Aa安全熔絲區(qū)域的背面激光成像照片
圖6-11 MC68HC705P6A微控制器內(nèi)掩模ROM的背面激光成像照片
6.3.2 讀出晶體管的邏輯狀態(tài)
在侵入式攻擊中,傳統(tǒng)的讀出半導(dǎo)體存儲器中數(shù)據(jù)的方法是使用機械探針,通常用在處理器總線上。這樣的攻擊是使用微探針與內(nèi)部電路產(chǎn)生直接的電接觸。該方法困難多多,從縮小特征尺寸到使用片上存儲器的硬件訪問電路都有困難。我們就研究了用半侵入式技術(shù)來非破壞地讀出存儲器單元的狀態(tài)。以下描述能提取出CMOS SRAM里的內(nèi)容但無法廣泛應(yīng)用。
在顯微鏡下使用紅激光聚焦到芯片表面來分析SRAM。650nm波長紅激光的能量大于硅的能帶,它會將芯片內(nèi)部的有效區(qū)域離子化。如果光子到達(dá)PN結(jié)附近的區(qū)域,因光電效應(yīng)而會產(chǎn)生光電流。當(dāng)光子進(jìn)入P或N區(qū)域,會注入自由載流子而降低通道的電阻。
這就使得我們可以讀出存儲器單元的狀態(tài),顯而易見的,增大電流就可以使通道導(dǎo)通,幾乎可以忽略。將激光束指向合適的晶體管,就能區(qū)別兩種可能的狀態(tài)。
在第一次試驗中,通過測量激光掃描芯片表面產(chǎn)生光電流來建了一份激活區(qū)域的示意圖。芯片放在精度0.1微米的電動臺上。掃描結(jié)果如圖。可見激活區(qū)域產(chǎn)生的大電流,但大部分被金屬層覆蓋,激光不能穿透,所以那些區(qū)域不能產(chǎn)生電流。我們用這張圖片來比較從已上電芯片所獲得的結(jié)果。
下一個實驗是用正在運行的芯片。芯片已編程,可以載入任意值到RAM中,然后停止芯片的運行。掃描載入隨機數(shù)據(jù)的存儲器單元結(jié)果如圖。可以看到存儲器單元有不同的狀態(tài),內(nèi)容為1的單元頂層是亮的,內(nèi)容為0的則是底層亮的。
圖6-12 激光掃描未上電(左)和已上電(右)的存儲器照片
我們的實驗結(jié)果類似于Sandia Labs發(fā)布的結(jié)果,但有很大不同。我們從頂層掃描芯片來代替發(fā)出通過芯片的恒定電流,我們使用恒壓供電,像標(biāo)準(zhǔn)的功耗分析一樣來測量電流。
如果重要數(shù)據(jù)正好在一個時鐘周期內(nèi)在一個位置清楚地出現(xiàn),那破解者就可以推導(dǎo)出,并凍結(jié)這個狀態(tài)。(可以是物理的,如低溫;或用別的方法如停止時鐘),那破解者就有可能是用光學(xué)的或電磁探測技術(shù)讀出數(shù)據(jù)。技能和設(shè)備方面的投入明顯要比侵入式攻擊少很多。
6.4 缺陷注入攻擊(Fault injection attacks)
這是個新的攻擊方法。照射目標(biāo)晶體管來影響它的狀態(tài),因此產(chǎn)生一個短暫的錯誤。這種攻擊很實用,不需要昂貴的激光器。使用從攝影店購買的二手閃光燈和激光指示器即可。為說明這種攻擊的能力,我們研究了在顯微鏡下置位或復(fù)位任意SRAM位。如果沒有反制措施,光學(xué)探測也能在密鑰計算或協(xié)議里產(chǎn)生錯誤,并中斷處理器的控制流程。它擴展了現(xiàn)有的噪聲和缺陷分析技術(shù)。這種攻擊會給工業(yè)上帶來大問題,類似于上世紀(jì)九十年代中期的微探測攻擊和后期的功耗分析攻擊。
6.4.1 改變SRAM的內(nèi)容
盡管有多種方法使用脈沖激光來模擬離子輻射,我們發(fā)現(xiàn)沒有公開的信息使用它們來控制或改變集成電路的功能。我們決定使用強光源作用半導(dǎo)體芯片,來確定是否會改變存儲器單元的狀態(tài),以及難易程度。
圖6-13 單個SRAM單元的結(jié)構(gòu)(左)和版圖(右)
第一次試驗的目標(biāo)是SRAM。標(biāo)準(zhǔn)的六管SRAM結(jié)構(gòu),由兩對P和N型的晶體管構(gòu)成一個觸發(fā)器,另外兩個N型晶體管用來讀它的狀態(tài)和寫入新數(shù)據(jù)。晶體管VT1和VT2構(gòu)成反向器,其它相似部分一起,構(gòu)成由晶體管VT3和VT6控制的觸發(fā)器。
如果晶體管VT1能被外部因素短暫開路,那就會導(dǎo)致觸發(fā)器改變狀態(tài)。曝光晶體管VT4,單元的狀態(tài)可以被改到相反狀態(tài)。主要的困難是將聚焦離子輻射降到幾平方微米并選定適當(dāng)?shù)膹姸取?/span>
使用PIC16F84來做實驗,它有68個字節(jié)的片上SRAM。SRAM陣列的位置是在晶粒底部的中間。如圖。
圖6-14 PIC16F84的原始照片和打開封裝后的照片,右側(cè)為內(nèi)部SRAM的照片。
因為預(yù)算有限,并且使用的激光表現(xiàn)不穩(wěn)定,我們決定使用廉價的閃光燈。盡管閃光燈的發(fā)光度比脈沖激光低,但適當(dāng)放大后可以達(dá)到離子化的等級。將閃光燈固定在視頻端口上,放大倍數(shù)為1500X。
微控制器已被編程,可以上傳或下載它的存儲器內(nèi)容。將整個存儲器用恒定值填充,在閃光燈下曝光,然后讀出結(jié)果,就可以檢查那個單元的狀態(tài)改變了。
通過帶孔的鋁箔遮蔽光源,光源的輸出功率設(shè)在最大,我們只能改變一個單元的狀態(tài)。單元的最終狀態(tài)取決于在閃光時暴露的面積。這幾乎可以肯定用廉價的半侵入式攻擊可以改變SRAM的內(nèi)容。
最大放大倍數(shù)時的SRAM陣列如圖6-15。聚焦后的光點如白圈所示,能把單元的狀態(tài)從1改為0,如果狀態(tài)是0的話就不會改變。聚焦光點到黑圈,單元的狀態(tài)能從0改到1,或繼續(xù)保持狀態(tài)1。
圖6-15 1500倍下的SRAM陣列照片 SRAM存儲器陣列的數(shù)據(jù)位
從圖中可知SRAM陣列被分成八個相同的塊。通過曝光不同塊里的單元,發(fā)現(xiàn)每個塊對應(yīng)信息平面的一位。位平面圖如圖6-16。
通過在閃光燈下曝光每個單元獲得了整個存儲器的圖,左邊對應(yīng)塊的底部。可以看出地址不是連續(xù)的,被分成了三組。
圖6-16 SRAM存儲器陣列中每個位塊的物理地址
這個實驗表明反向工程中使用半侵入式攻擊很容易就獲得存儲器的地址圖。唯一的限制是閃光燈不能產(chǎn)生連續(xù)且單色的光,所以很難控制光點將照射的區(qū)域。這個問題可以用合適的激光來解決。
良好設(shè)計的現(xiàn)代安全微控制器不容易被單色激光攻擊,它們的保護狀態(tài)取決于物理存儲的多個位。但是,很多設(shè)計可以通過修改鎖定讀保護觸發(fā)器的狀態(tài)來破解。設(shè)計師需要確保單個晶體管的失效也不能破壞芯片的安全規(guī)則。
對智能卡也可以進(jìn)行類似的攻擊。跳轉(zhuǎn)指令沖突是個強大而通用的攻擊點。破解者可以使用設(shè)置智能卡代碼的分支條件來引向錯誤的方向。例如,減少阻塞密碼循環(huán)的次數(shù)到一至二次,直接恢復(fù)密碼。
現(xiàn)有的高端防攻擊技術(shù),如頂層金屬遮蔽和總線加密,會使得破解者使用這些技術(shù)變得更復(fù)雜,但這還不夠。老練的破解者可以用紅外線或X光來對付金屬層的遮蔽,直接攻擊寄存器就可以跳過總線加密。
6.4.2修改非易失存儲器的內(nèi)容
EPROM, EEPROM和閃存單元對缺陷注入攻擊更為敏感。這是因為流進(jìn)浮柵的電流比流進(jìn)SRAM單元的要小得多。
首先假定芯片內(nèi)有光傳感器來防止打開封裝,在我們研究過這個問題之后,可以用光注入缺陷到EEPROM存儲器中。
安裝在探針站顯微鏡里的20瓦燈泡足以翻轉(zhuǎn)PIC16F84微控制器的安全熔絲狀態(tài)。光圈全部打開,放大倍數(shù)設(shè)為1500倍時,光線能聚焦到安全熔絲區(qū)域而不影響主存儲器。不需要修改現(xiàn)有的設(shè)備。將一個已編程,加密的且被打開封裝的PIC16F84芯片放在顯微鏡下的測試座中,與通用燒寫器相連。當(dāng)通過顯微鏡的目鏡定位到安全熔絲后,光功率切換到最大,就可以正常讀出存儲器的內(nèi)容。
從芯片背面進(jìn)行同樣的操作也獲得了成功。一方面,從晶粒的背面不容易找到熔絲的位置。另一方面,可以使用機械方法從背面打開封裝,這就避免使用強腐蝕的化學(xué)試劑。可以使用正面光學(xué)照片作參考來定位,或使用紅外鏡頭來定位。
盡管從鹵素?zé)襞莶荒艿玫阶銐虻?到1.1微米區(qū)域的紅外線來直接從晶粒的背面來離子化晶體管的有效區(qū)域,但從硅襯底發(fā)出的大量電子空穴對大部分在互相復(fù)合前就落到有效區(qū)域里了。
幸運的是,這種攻擊不能對付現(xiàn)代低特征尺寸的芯片。頂層金屬防止光線到達(dá)有效區(qū)域,平面化減少了氧化層的透明度,并加強了光的散射。高的摻雜濃度減少了光從背面的透射。更小的晶體管需要更大的輻射來進(jìn)行開關(guān)。
紫外線EPROM存儲器單元對光攻擊不太敏感,因為需要更大的電流來切換。但是,事實上閃光燈或通常的燈泡也能用來破解安全熔絲,仍然需要小心設(shè)計安全保護方法。例如,安全熔絲不應(yīng)該放在遠(yuǎn)離主存儲器的地方,這會導(dǎo)致攻擊它們很容易。同時,光和輻射傳感器可以用來檢測離子輻射,在泄漏敏感信息之前就復(fù)位芯片。
6.5 軟件模擬攻擊(Modelling the attacks)
為了研究有效的對策,了解攻擊細(xì)節(jié)是很重要的。在光學(xué)缺陷注入和激光掃描攻擊中,需要完全理解在硅芯片里發(fā)生的過程和原理。模擬這樣的攻擊受到很多限制。每一步都要解決復(fù)雜系統(tǒng)中的多個因素。要計算一束激光對整個芯片的影響是很困難的。但對于一小部分晶體管,是可以模擬的。在TCAD軟件中,可以模擬離子輻射對半導(dǎo)體的影響。但這個軟件太復(fù)雜,太昂貴了,我們使用另一種工具軟件DIODE-2D.
6.5.1模擬邏輯狀態(tài)來讀出數(shù)據(jù)
如前面所提到的,使用激光掃描就可以讀出晶體管的狀態(tài)。如預(yù)想的那樣,激光掃描到存儲器中P和N型晶體管的源和漏極產(chǎn)生最大的光電流,不透明金屬線則對應(yīng)最低的光電流。掃描的結(jié)果明顯可以看出SRAM單元中反向器開關(guān)狀態(tài)的光電流大小。這個可以用來確定存儲器單元當(dāng)前的狀態(tài)。
為解釋結(jié)果并尋找更適合的掃描參數(shù),用DIODE-2D演示激光脈沖加到反向器時的二維數(shù)學(xué)模型。模型結(jié)構(gòu)的剖面如圖6-17。
圖6-17 CMOS反向器的剖面圖
溝道的長度假定為1微米,激光輻射的強度為1.104W/cm2。別的參數(shù),如摻雜濃度,P和N阱的深度,使用的是標(biāo)準(zhǔn)的1微米N型襯底CMOS技術(shù)的參數(shù)。
我們模擬了反向器在兩種狀態(tài)下,不同波長的激光對不同位置時與電源電流的關(guān)系。結(jié)果如圖。
圖6-18 不同波長下電源電流與激光掃描位置的關(guān)系
可以看出曝光關(guān)態(tài)的晶體管的電流比開態(tài)的要大很多。打開關(guān)態(tài)晶體管的通道所增加的總電流比輕微減少開態(tài)通道的電阻還要大。
另一個值得注意的是光電流與激光波長的關(guān)系。這會導(dǎo)致減少襯底的寄生光電流,短波長的光子幾乎集中在表面。通過計算同一反向器的電源電流與激光波長之間的關(guān)系,發(fā)現(xiàn)短的波長更有效率。波長越短,0和1狀態(tài)的電源電流的差就越大。實驗也證明了這一點。用650納米的激光,可以認(rèn)出反向器不同狀態(tài)的電源電流。但用805納米的激光,差異接近于噪聲水平。主要的噪聲源是襯底的光電流,減少波長就可以降低它的影響。
圖6-19 CMOS反向器內(nèi)PMOS和NMOS的不同邏輯狀態(tài)的電源電流與不同波長激光的關(guān)系
模擬的結(jié)果確認(rèn)了使用聚焦激光束可以讀出反向器的狀態(tài)。同時,也說明要選擇合適波長的激光。
6.5.2 模擬缺陷注入攻擊
如上所探討的,聚焦激光束可以用來改變SRAM單元的狀態(tài)。該流程可以用DIODE-2D軟件模擬出來。
圖6-20 CMOS反向器的剖面圖
模型顯示影響激光改變反向器狀態(tài)的主要因素是輻射導(dǎo)致寄生電路的鎖定效應(yīng)。反向器的狀態(tài)只在所需的激光強度低于內(nèi)部寄生結(jié)構(gòu)的閾值時才改變。激光焦點在接近晶體管通道區(qū)域時翻轉(zhuǎn)是最佳的,但不能排除鎖定效應(yīng),因為激光產(chǎn)生的電子空穴對會快速充滿反向器,并引起內(nèi)部所有PN結(jié)的電流增大。
圖6-21 11納秒的激光脈沖加到0態(tài)反向器時的模擬結(jié)果
激光脈沖加到P型晶體管柵極上約10微米區(qū)域,如果輸出電壓比邏輯1的最小輸入電壓高就假定發(fā)生翻轉(zhuǎn),這對于正常的反向器閾值電壓已經(jīng)大很多了,但沒有芯片內(nèi)部的精確閾值電壓信息。
圖6-22 CMOS反向器受0.35nJ和0.36nJ激光照射后輸出電壓的變化
圖6-23 CMOS器離子化時的等效電路
如同我們檢查模擬結(jié)果那樣,很大的面積會響應(yīng)激光的能量,能充分翻轉(zhuǎn)反向器而不導(dǎo)致鎖定效應(yīng)。這種差異對短波長的激光會更大。這是因為硅會吸收短波長的激光,這會導(dǎo)致晶體管柵極下電子空穴對數(shù)量的增加。一方面,它增強了通道的調(diào)制能力。另一方面,它減少了N型晶體管的電流,使得寄生結(jié)構(gòu)發(fā)生翻轉(zhuǎn)更困難。
第七章
硬件安全分析
本章介紹如何使用先前章節(jié)的破解技術(shù)來評估MCU硬件的安全性能。對于半侵入式攻擊:一方面它比非侵入式攻擊更快得出結(jié)果;另一方面,它比侵入式攻擊的開銷更小。但不能認(rèn)為這個方法對每個新的微控制器有效,特別是新技術(shù)制造出來的。那需要一種特別的方法。在實際上,不可能有一種通用的評估技術(shù)來進(jìn)行硬件的安全分析。在這里只給出一些建議。
7.1評估防紫外線攻擊能力
紫外線攻擊成功地用于不同制造商的許多代微控制器的破解。本節(jié)研究不同的微控制器是如何來防止此類攻擊的。
二十年前,極少有人關(guān)注微控制器的防破解保護。那時,微控制器用掩模ROM和UV EPROM
來存儲程序。基于EPROM的微控制器有個安全熔絲來阻止對存儲器進(jìn)行未經(jīng)授權(quán)的訪問。下面給出一些例子介紹微控制器的防紫外線攻擊和評估防紫外線攻擊的保護等級。
典型的沒有任何防紫外線攻擊保護措施的微控制器是PIC16C57和PIC12C509。安全熔絲是比較容易發(fā)現(xiàn)的,把芯片的不同區(qū)域放在紫外線下曝光10到15分鐘再檢查結(jié)果即可。因為安全熔絲離程序存儲器比較遠(yuǎn),把EPROM蓋上不透光的材料,就很容易破解。把熔絲放在存儲器邊上,就很難找到它,但破解也是相對容易的。如在USB看門狗中常用的賽普拉斯CY7C63001A一樣,一些熔絲的單元結(jié)構(gòu)和主存儲器非常類似,通過一張分辨率較高的芯片表面數(shù)字照片,仔細(xì)搜索與主存儲器相同的圖形,找到熔絲不是很難。盡管熔絲離存儲器很近,也可以遮擋照向EPROM的紫外線。有制造商把安全熔絲放在主儲存器中,使得有選擇地擦除熔絲異常困難。
一旦微控制器制造商認(rèn)識到它們的產(chǎn)品很容易被紫外線攻破,就開始行動起來。一些基于EPROM的微控制器對存儲器進(jìn)行加密。飛利浦的87C51微控制器有64字節(jié)的加密列表來加強熔絲的保護。即使安全熔絲被復(fù)位,程序存儲器的值將列表中的相應(yīng)字節(jié)XNOR后才被讀出。在PIC16C61和PIC16C71中,當(dāng)安全熔絲有效時,存儲器的內(nèi)容會被加密。加密方法是將存儲器的高七位和低七位進(jìn)行XNOR。即使加密方法很好,破解者可以用定點攻擊(toothpick attacks) 來擦掉部分存儲器,然后恢復(fù)存儲器或加密列表的內(nèi)容。對于舊的PIC微控制器,破解者不需要找到并復(fù)位安全熔絲,因為加密的內(nèi)容可以用合適的燒寫器讀出。
圖7-1左側(cè)是原始的PIC16C622A熔絲區(qū)域照片右側(cè)是經(jīng)激光切除頂層金屬的熔絲區(qū)域照片
基于EPROM的微控制器進(jìn)一步發(fā)展就是在熔絲上覆蓋一層不透紫外線的金屬層。例如,大部分的14位和16位內(nèi)核的PIC微控制器都這樣做了。它不僅僅可以防止熔絲被復(fù)位,也使得很難找到熔絲。直到最近,引入缺陷注入攻擊,才有兩種實用的方法來破解這種保護。一種是激光切割或FIB處理進(jìn)行反向工程來除掉頂層金屬保護層。另一種是修改CPU并用微探針來竊聽數(shù)據(jù)總線。兩者都需要不菲的設(shè)備投資和訓(xùn)練有素的破解者。
當(dāng)EEPROM開始用在微控制器中,就可以使用更多的保護功能。除了增加頂層金屬,還使用反轉(zhuǎn)存儲器單元,這對紫外線更鈍感。例如,愛泰梅爾Atmel的AT89C51微控制器,擦除熔絲相應(yīng)的激活了它,使得安全熔絲不能被復(fù)位。但是,如紫外線可以把熔絲叢非安全態(tài)轉(zhuǎn)到安全態(tài),這個特性可以用來尋找熔絲。為了避免這點,一些微控制器使用雙反轉(zhuǎn)熔絲和頂層金屬保護,例如PIC16F628和PIC16F876。
7.2使用半侵入式攻擊對不同的安全特性進(jìn)行分析
很多制造商開始使用防紫外線攻擊保護。很難定位安全熔絲并破解之。全反向工程需要巨額的開支。但是,新的半侵入式攻擊,如激光掃描和缺陷注入攻擊可以幫助我們在適當(dāng)?shù)臅r間內(nèi)定位熔絲。
7.2.1使用激光掃描技術(shù)進(jìn)行分析
激光掃描一個已上電的芯片有助于找到不是嵌入在主存儲器中的安全熔絲。攻擊時需要執(zhí)行兩種掃描:一是激活安全特性;二是屏蔽安全特性。比較兩次掃描的結(jié)果,可以知道那些晶體管改變了狀態(tài)。除去CPU寄存器和SRAM存儲器,剩下的就是破解者尋找的。
圖7-2 激光掃描上電后安全熔絲狀態(tài)不一樣的PIC16F84芯片表面
通過對PIC16F84微控制器的兩次掃描,比較它們的結(jié)果,可以發(fā)現(xiàn)安全熔絲所包含的晶體管。
盡管該技術(shù)很快可以得出結(jié)果,需要說明一點,它對小特征尺寸和多層頂層金屬的現(xiàn)代微控制器作用不大。一個可選的辦法是背面激光掃描,但這需要更精確,更昂貴的設(shè)備,因為信號里有更高的噪聲。
7.2.2使用缺陷注入技術(shù)進(jìn)行分析
缺陷注入可以用來尋找安全熔絲。盡管不能給出安全熔絲的精確位置,尤其是用閃光燈來注入缺陷時。不一定要找到精確位置,因為發(fā)現(xiàn)弱點后就可以屏蔽掉安全熔絲。設(shè)備非常類似于激光掃描,不同點在于顯微鏡下是閃光燈而不是激光,打開封裝后的芯片放在電機控制臺的測試座上。
對著芯片的某一部分用閃光燈曝光,然后測試安全熔絲的狀態(tài),就可以發(fā)現(xiàn)感光的位置,那兒就可以找到熔絲。不僅僅是熔絲,包括整個控制電路都可能對缺陷注入敏感,那樣就不容易找到熔絲。但從破解者的角度來看,這沒什么關(guān)系,可以從通道上的易攻擊點開始。
圖7-3 PIC16C622A芯片表面照片,方框內(nèi)是待測試部分。
圖7-4 本圖即為上圖中的方框部分,圓圈指示對閃光燈敏感的區(qū)域。
可以使用相同的步驟進(jìn)行安全評估,那樣芯片表面每一點都可以在閃光燈下曝光用以短時間內(nèi)確定安全熔絲會不會被屏蔽。
第八章
防破解技術(shù)
本章探討可加強微控制器保護能力的技術(shù)。
如果某個項目能被分解成幾部分,就可以把每部分放在不同的微控制器中。那破解者就不得不對整個設(shè)備的所有部分進(jìn)行反向工程。但是,這種方法對于成本敏感的大批量產(chǎn)品來講,不是個好方法。
從基于微控制器的設(shè)計轉(zhuǎn)向CPLD/FPGA可能是個好的選擇,因為破解CPLD/FPGA需要花費更多。即使是將重要部分放在“不安全”的基于SRAM的FPGA中,其破解難度也相當(dāng)大。
使用多層板和BGA封裝也可以增大破解難度,因為肉眼無法看到內(nèi)部互聯(lián),并且不可能直訪問BGA的引腳來進(jìn)行分析。為了能夠訪問引腳,芯片必須焊下來,放在特殊的測試適配器上。這就需要特殊的工具和訓(xùn)練有素的工程師。此外,BGA的封裝不同于DIP SOIC和QFP之類,它的封裝更難被打開。
常用的保護敏感信息的方法是加密數(shù)據(jù)。但是,更應(yīng)該需要關(guān)注密鑰的存儲和管理。如果密鑰是可編程的或能被隨時修改,這非常類似于保存在EEFPROM中的情形。把無格式的信息放在可編程的存儲器中,對于系統(tǒng)的安全是個威脅。
半侵入式攻擊和缺陷注入式攻擊,給微控制器芯片的硬件安全帶來巨大威脅,所以我們就研究一些方法來阻止這些攻擊。可以用自同步雙線電路(Self-timed dual-rail circuit)設(shè)計技術(shù),那樣邏輯“1”或“0”不是被解碼成在單線上的高或低電平,而是一對線上的‘HL’或‘LH’。組合信號‘HH’會產(chǎn)生報警,導(dǎo)致處理器復(fù)位。電路可以被設(shè)計成即使單個晶體管失效也不會導(dǎo)致安全問題。這種技術(shù)會增加功耗分析攻擊的難度。
當(dāng)然,要平衡所需安全等級和保護技術(shù)的開銷。
(譯者注:在使用8031的年代,不得不外擴ROM/RAM。當(dāng)時有人使用到地址線/數(shù)據(jù)線的位交錯技術(shù),也就是某兩位或更多的位線相互對掉。這需要在畫板子和寫程序的時候同時使用。)
8.1 不印字,重新印字和重新封裝
對付低級的攻擊,業(yè)內(nèi)廣泛使用抹掉印字的方法,但它不能阻止信心堅定的對手。一般地,這種方法會增加復(fù)制和反向工程的成本。
有兩種方法可以找到它的型號。一種是打開封裝后在顯微鏡下觀察,大部分芯片上都有制造商的名字和芯片標(biāo)識。另一種的花費更少,是檢查它的信號線,如電源,地,時鐘和復(fù)位信號線。每種微控制器都有自己特有的引腳排列,確定它們大致的類型是很容易的。
某些開發(fā)者僅僅是抹掉正面的印字。但很多制造商在芯片的背面也有印字,如ATMEL,把芯片的內(nèi)部編碼印在背面。破解者很容易推敲出內(nèi)部編碼和實際型號的對應(yīng)關(guān)系。同樣,微芯的PIC內(nèi)有芯片標(biāo)識編碼,可以通過通用編程器讀出來確定芯片。
一些開發(fā)者更進(jìn)一步,不僅僅抹掉印字,還打上自己的印字,使它看上去像ASI。眾所周知,對ASIC進(jìn)行反向工程花費昂貴,使得只有小部分的破解者能得出實際的型號。
圖8-1 在游戲機中找到的Ubicom SX48微控制器。上排左側(cè)是被擦掉印字的,上排中間是背面重新打上的印字,右側(cè)是打開封裝后的芯片照片,可見兩個芯片是一樣的。
有些開發(fā)者重新印字,使之看上去是更安全的芯片。如:我們在一個游戲機種發(fā)現(xiàn)一個高安全等級保護的芯片,實際上是重新印字的低安全等級的CPLD。從圖中可以看出,正面印字與真正的阿爾卡特芯片略有差異。但從背面看,完全不一樣,倒是與賽靈思的印字很像。這種做法觸犯了商標(biāo)法,可能被起訴。
圖8-2 左側(cè)兩個是重新印字的芯片,中間是真正的阿爾卡特印字,右側(cè)是賽靈思的印字。
為了達(dá)到更好的保護能力,不僅僅可以抹掉印字,也可以把芯片反過來,背面朝上使用。還可以把芯片的某側(cè)的引腳鋸掉。
如果需要更好地保護,芯片可以使用非標(biāo)準(zhǔn)的封裝,如COB(chip on board),且可以自定義印字。這僅適用于大批量的產(chǎn)品,但一些芯片制造商提供了這種服務(wù)。一些制造商也可以對芯片進(jìn)行預(yù)編程,并放置客戶定義的標(biāo)識。
8.2 多級和多點保護
在產(chǎn)品中使用不同的安全特性可以達(dá)到相對好的保護。這個在智能卡中大量使用,如在付費電視中,特殊的軟件升級就可以拒絕偽造的卡。另一個例子是激光打印機的墨盒。打印機制造商從復(fù)雜昂貴的產(chǎn)品中賺不到錢,取而代之的是從墨盒和其它附件中賺錢。但墨盒很容易制造且可以被重新裝填,所以打印機制造商就開發(fā)出保護技術(shù)來防止被重新裝填和復(fù)制。有些制造商在產(chǎn)品中使用標(biāo)識芯片,使得復(fù)制和重新裝填很困難。最早的是打印軟件檢查一下芯片內(nèi)的簡單序列號,然后是寫了數(shù)據(jù)的標(biāo)準(zhǔn)串行存儲器。破解這些保護是相對容易的。一旦知道正確的芯片型號,就很容易重新編程或用普通的微控制器取代。在最新的打印機中,制造商開始更多地使用安全芯片,如達(dá)拉斯的iButton產(chǎn)品;或使用ASIC,并且在打印機固件中使用多種校驗協(xié)議。更厲害的是有些特性只在必要時啟動。例如:最早的打印墨盒只有序列號作校驗。當(dāng)制造商知道產(chǎn)品被復(fù)制了,就可以啟用芯片內(nèi)帶EEPROM的保護措施。之后還可以對EEPROM進(jìn)行加密,使用SHA-1水印簽名,可以自動在線升級切換這些功能,而客戶一點兒也不知情。
與使用一個熔絲相比,使用多個熔絲可以提升微控制器的安全性。例如:在PIC16F84中,單個安全熔絲控制對程序和數(shù)據(jù)的讀寫。在PIC16F628中,兩個熔絲決定對程序存儲器的訪問,數(shù)據(jù)存儲器使用單獨的安全熔絲。熔絲的位置彼此距離較遠(yuǎn),使得缺陷注入攻擊異常困難。
圖8-3 右上角的圓圈指示PIC16F84安全熔絲的位置
更進(jìn)一步的多熔絲保護是每個安全熔絲有兩個單元,僅兩個都處于正確狀態(tài)才屏蔽掉熔絲。這增強了抗脈沖干擾攻擊的能力。
圖8-4 右側(cè)的白色圓圈指示PIC16F628的三個安全熔絲的位置
8.3 燒斷讀寫電路以及破壞測試端口
把普通MCU編程用的某些引腳燒斷是增加破解成本的一個極為有效的方法。類似的方法也用在一些智能卡中,專門用來作后期生產(chǎn)測試和閃存編程的接口,在測試后會從物理上除去。
大多微控制器是被破解者屏蔽掉安全熔絲后自由讀寫存儲器的。燒斷其中的一個引腳后,即使安全熔絲被除去,也可阻止外部訪問存儲器。同時,在很多基于閃存的微控制器可以通過用戶代碼區(qū)的啟動模塊來更新程序,無需外部并行燒寫器。在燒斷之前就把啟動模塊寫入,燒斷后不影響程序的升級。
燒斷的方法很簡單,加電壓,不論正負(fù),大約是欲燒斷引腳所能承受的最大值,就會有約1A的電流通過。這會造成連到該引腳的晶體管永久的損壞:高端的正電壓損壞的是PMOS,低端的負(fù)電壓損壞的是NMOS。
我們決定分析燒斷后的芯片內(nèi)部到底發(fā)生了什么。我們測試了一個用在軟件狗里的PIC16F76芯片。通用燒寫器認(rèn)不出芯片,并且發(fā)現(xiàn)第28個引腳接觸不良。打開封裝后用顯微鏡觀察。
我們對芯片也做了化學(xué)腐蝕,觀察實際的損壞情況。可以看到兩個輸出的晶體管都完全損壞了。
圖8-5高壓燒過的芯片引出線焊點。左側(cè)是打開封裝后的照片,右側(cè)是化學(xué)腐蝕后的照片。
200X。黑色的是碳化后的封裝樹酯。
如果想恢復(fù)該引腳的功能,就需要使用FIB對I/O進(jìn)行全面的反向工程。另一種方法是使用微探針連到內(nèi)部數(shù)據(jù)總線來讀出存儲器中的信息。這些設(shè)備都很昂貴,并需要熟練的破解者花費很多時間。
因為燒斷會導(dǎo)致內(nèi)部結(jié)構(gòu)和鈍化層的損傷,在大批量生產(chǎn)中不太適合。芯片的參數(shù)會隨著時間的流逝而變化,因為水和空氣會緩慢的從損傷處滲進(jìn)芯片,導(dǎo)致芯片性能的劣化。如功耗偏大,壽命縮短,抗ESD電壓下降。
8.4 智能卡和防篡改保護
對于開發(fā)者來講,選擇安全微控制器或可以得到更好的保護。與大多數(shù)微控制器相比,即使是十年前設(shè)計的智能卡也能提供更好的保護。但是與微控制器相比,也有劣勢:昂貴,小批量的很難買到貨。開發(fā)工具昂貴,需要和制造商簽署保密協(xié)定,即使是說明書也要這樣。很多制造商僅向特定客戶銷售大批量的智能卡。
另一個不足是I/O的功能受限,通常只有ISO7816接口,極少有單獨的I/O。這使得在大多數(shù)應(yīng)用中不能取代微控制器。僅用于保存敏感的簽名數(shù)據(jù)和版權(quán)保護。但是它也適合那些不需要很多I/O的應(yīng)用,如付費和門禁系統(tǒng)。
現(xiàn)代的智能卡提供多種防攻擊保護,內(nèi)部電壓傳感保護免受電源噪聲攻擊(Power glitch attacks)的過壓和欠壓。時鐘頻率傳感器防止受到靜態(tài)分析(Static analysis)的降低時鐘頻率攻擊。同時也可防止時鐘噪聲(Clock glitch attacks)進(jìn)行提高時鐘頻率的攻擊。芯片上的隨機數(shù)發(fā)生器使得對密碼進(jìn)行攻擊很困難。頂層金屬網(wǎng)格和內(nèi)部總線硬件加密使得微探測攻擊是否可行充滿疑問。光傳感器從功能上防止打開芯片的封裝。另外,訪問內(nèi)部存儲器需要密碼。
攻擊智能卡,特別是新設(shè)計的,是個需要大量時間和金錢的苦差使。只有裝備精良的實驗室加資深的工程師有可能成功。
抗篡改元件和模塊提供了更好的保護。如達(dá)拉斯半導(dǎo)體的iButton,它把芯片放在金屬上,作電池和篡改的傳感器。一旦檢測到篡改,內(nèi)部儲存器就會被擦掉,以防止敏感數(shù)據(jù)被破解者獲得。另一個例子是銀行里使用的安全模塊,如IBM 4758。它有更出色的防篡改能力,有輻射和低溫傳感器提供對多種攻擊方法的保護。這些產(chǎn)品比智能卡更昂貴,但它提供更好的保護能力。但破解者仍然可以利用軟件的缺陷來獲得安全密鑰。
8.5 異步邏輯(Asynchronous logic)
自同步雙線邏輯是最近才發(fā)展起來的防破解技術(shù)。傳統(tǒng)的數(shù)字邏輯使用一個時鐘來同步操作。但時鐘速度的上升使之變得更復(fù)雜,這就導(dǎo)致不用時鐘的自同步或異步電路設(shè)計的興起。一種方法是在數(shù)據(jù)線上使用冗余技術(shù)。在雙線邏輯中,信號0或1不再是單根線上的高或低電壓,而是一對線上信號的組合。例如0可能是LH,1可能是HL。使用自同步電路時,LL信號表示靜止。這些簡單排列的主要缺點是很脆弱:電路缺陷會導(dǎo)致出現(xiàn)不想要得HH狀態(tài),它會通過電路迅速蔓延并鎖住元器件。
一種創(chuàng)新是利用這個缺陷,將HH看作錯誤信號。這個信號可以通過篡改傳感器來獲得,導(dǎo)致元器件鎖定。更感興趣的是元器件的失效會阻止敏感信息的輸出,在將來可能是高安全等級的元器件所要求的。
雙線編碼的另一個進(jìn)展是減少功率消耗,使所有狀態(tài)有同樣的權(quán)重。雙線編碼不能充分保證數(shù)據(jù)獨立于功率信號,不同的線路負(fù)荷會有不同的結(jié)果,這個可以通過版圖布局來控制。
自同步設(shè)計可以抵抗時鐘噪聲攻擊。如果串口需要時鐘,用敏感電路分離出時鐘是相對容易的。電源噪聲攻擊對異步電路很少能夠成功,但是如EEPROM之類的就不能受到保護,可能會被破解。
雙線設(shè)計可以可靠地從篡改傳感器得到報警信號,并且阻止元器件運行。結(jié)果可以是刪除敏感數(shù)據(jù)并發(fā)出全局報警,這可以防止缺陷注入攻擊。為了獲得成功,破解者必須同時注入兩個失效狀態(tài),使傳輸線的狀態(tài)從LH切換到HL,這會導(dǎo)致傳輸線瞬間進(jìn)入HH狀態(tài)并且立即觸發(fā)報警電路。
后 記
在翻譯的過程中,發(fā)現(xiàn)原作者在很多地方打了“埋伏”,也許是因為跟安全方面相關(guān)吧。
本譯文也就依葫蘆畫瓢了。
盡管譯者有一定的失效分析經(jīng)驗,但面對涉獵極為精深的破解著論,不得不嘆:吾乃井底之蛙也。
-
mcu
+關(guān)注
關(guān)注
146文章
17019瀏覽量
350374
發(fā)布評論請先 登錄
相關(guān)推薦
評論