[译】MCU解密全攻略

描述

本译文原著为俄国人Sergei P.Skorobogatov

就读英吉利剑桥大学之博士论文,电子文档的链接如下:

http://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-630.pdf

原作者的个人主页:http://www.cl.cam.ac.uk/~sps32/


摘要

 

 现今的半导体芯片不仅仅用于控制系统,而且还用于保护它们免于入侵的威胁。那些认识到当前失误而引入新的安防方案的制造商和坚持不懈地尝试突破保护机制的破解团体之间的斗争是没有尽头的。有些芯片制造商没有足够重视设计和测试保护原理的重要性,即使它们声称自己的产品是有高的安全等级的。在这种情形下,设计工程师拥有方便和可靠的测试安全芯片的方法是至关重要的。


 本文介绍了众多的破解微控制器(MCU:Micro Control Unit)和智能卡(Smartcard)的方法:包括已知的非侵入式攻击(Non-invasive attacks),如功耗分析(Power analysis)和噪声干扰(Glitching);以及侵入式攻击(Invasive attacks),如反向工程(Reverse engineering)和微探测分析(Microprobing)。现在已经有一种新的破解方法---半侵入式攻(Semi-invasiveattacks).和侵入式一样,它需要打开芯片的封装以接近芯片表面。但是钝化层(Passivation)还是完好的,因为这种方法不需要与内部连线进行电接触。半侵入式攻击介于非侵入式与侵入式之间,对硬件的安全是个巨大的威胁。它像侵入式一样高效,又像非侵入式一样廉价。


本文还介绍了实用的缺陷注入攻击法(Fault injection attacks)修改SRAM和EEPROM的内容,或改变芯片上任意单个MOS管的状态。这几乎可以不受限制地控制芯片的运行和外围保护部分。另一点是进行了数据保存期的实验,揭示了从已断电的SRAM和已擦除过的EPROM,EEPROM和闪存芯片中读出数据的可行性。给出了MCU防复制保护的简单介绍。也介绍了用半侵入式攻击来评估硬件安全性的方法.它们有助于依所需的安全等级来适当选择部件。讨论了多种防护技术,包括低成本的隐匿方法到新的集成电路设计方法。

 

除外责任

我不接受任何责任或义务承担任何人或物使用本文提到的材料,说明,方法或主意而受到的损失或伤害。读者必须意识到有关部分的一些操作是危险的,并参考所用的每一种物料的健康和安全警告。如有疑问请咨询专业人士。


 潜在的伤害包括:

1 用于打开封装和逆向处理的化学材料。包括会导致严重烧伤眼睛和皮肤的强酸和强碱,必须戴适当的防护眼镜和手套。

 2 3B级的激光用来除去钝化层,3R级的激光用来进行扫描和失效注入(有可见和不可见的激光辐射)。避免眼睛和皮肤受到直接或反射的辐射。激光会导致眼睛的永久伤害和皮肤的严重灼伤。必须戴适当的防护用品。

3 擦除芯片的时候用到紫外线。要避免眼睛和皮肤暴露,它也会伤害眼睛和皮肤。 必须戴适当的防护用品。

 

第一章

 

简介

 

 (译者注:介绍作者读硕读博的历史及其它鸡毛蒜皮,哎!我的最高学历是大专!)

第二章

 

背景知识

 

2.1  硅芯片安全措施的演变

工业控制器的硬件安全措施与嵌入式系统同时开始发展。三十年前的系统是由分离的部件如CPU,ROM,RAM,I/O缓冲器,串口和其他通信与控制接口组成的。如图2-1所示

 

 

  2-1通用的嵌入式控制器。PCB上的每个部件很容易辨别且极易被复制。


在早期,除法律和经济外,几乎没有保护措施来防止复制这些设备。例如:ROM是用低成本的掩模技术制造的,可用EPROM轻易复制,但后者通常要贵3-10倍或更多。或定制掩模ROM,那就需要很长的时间和很大的投资。另一种是在游戏机中广泛使用的简易ASIC,如图2-2。这些ASIC主要用于I/O部分来取代数十个逻辑器件,在降低成本的同时防止竞争者的复制,使之不得不应用更大且更贵的解决方案。实际上ASIC不会更安全,用示波器来简单分析信号或穷举所有可能的引脚组合就可以在数小时内得知它的具体功能。

 

 

 图2-2 游戏机中的专用集成电路(ASIC)


 从七十年代后期开始,微控制器提供一种非常好的取代基于CPU的控制板的方法。它们不仅有内部存储器和通用I/O接口,还有一些保护措施以防止未经授权访问内部存储器的内容。不幸的是,早期的MCU没有提供非易失存储能力,重要的数据不得不存在MCU外部的分离芯片上,因此很容易被读出数据。最近销售的一些廉价USB狗也用此法来进行软件保护,如图2-3所示。

 

 

 

图2-3 Aladdin HASP4 USB狗


安全领域的下一步进展就是把EEPROM芯片放在与MCU同一封装的内部。如图2-4。破解这些芯片是不容易的。一种专业的方法是打开样品的封装,用微探针来获得数据。或将芯片重新焊在一个分开的封装内。这两种设备都不是低级破解者所能拥有的。这些破解者会尝试用自制的微探针(旧芯片的焊线区域是相当大的)或利用软件上的缺陷来读出数据。

 

 

 图2-4 微芯Microchip的PIC12CE518微控制器打开封装后的照片,可见非易失数据存储器和MCU是分开封在同一封装内部的


(译者注:近来的堆叠芯片,如手机中用的Flash+SRAM的combo存储器,结构与之类似,不同的是在垂直方向叠加。破解方法亦类似。结构见图2-5。

 

  图2-5 意法ST 某型32位MCU打开封装后的SEM图片 )


一些MCU始终没有任何特殊的硬件安全保护。它们仅仅是基于不公开编程算法来保护。这可能有伪装回读功能,或用校验功能来代替。一般这些MCU不会提供非常好的保护能力。实际上,在一些智能卡中,适当使用校验功能能够起到很强的保护作用。

下一步增强安全保护的措施就是增加一个硬件安全熔丝(security fuse译者注:安全熔丝就是寄存器)来禁止访问数据。这很容易做到,不需要完全重新设计MCU架构,仅利用熔丝来控制编程接口的回读功能,如图2-6所示。缺点是熔丝位很容易被定位并进行入侵攻击。例如:熔丝的状态可以通过直接把熔丝位的输出连到电源或地线上来进行修改。有些例子中仅仅用激光或聚焦离子束来切断熔丝的感应电路就可以了。用非侵入式攻击也一样可以成功。因为一个分离的熔丝版图异于正常的存储阵列。可以用组合外部信号来使熔丝位处与不能被正确读出的状态,那样就可以访问存在内部芯片上的信息了。用半侵入式攻击可以使破解者快速取得成功但需要打开芯片的封装来接近晶粒。一个众所周知的方法就是用紫外线来擦掉安全熔丝。

 

 图2-6 微芯PIC12C508微控制器的安全熔丝位于程序存储器阵列的外部。


再下一步就是将安全熔丝做成存储器阵列的一部分,如果已设好熔丝,可禁止外部读写数据。一般的熔丝与主存储器离得很近,或干脆与主存储器共享一些控制线。因为晶圆厂使用与主存储器相同的工艺来制造,熔丝很难被定位和复位。非侵入式攻击仍然可用,但需要时间去寻找。同样,半侵入式攻击也可用。当然破解者需要更多的时间去寻找安全熔丝或控制电路负责安全监视的部分,但这些可以自动完成的。进行侵入式攻击将是很困难的,需要手工操作,那将花费更多的成本来破解。

 图2-7 飞思卡尔Freescale的MC68HC705C9A微控制器在200倍显微镜下可见安全熔丝是存储器读写控制逻辑的一部分


更进一步的是用主存储器的一部分来控制外部对数据的访问。这可以用上电时锁定特定区域地址的信息,将它作为安全熔丝。或用密码来控制对存储器的访问。例如德仪的MSP430F112,只有输入正确的32字节密码后才能进行回读操作。如果没输入密码,只有擦掉芯片后才能操作。尽管这个保护方法看上去比先前的更有效,它有一些缺点可以用低成本的非侵入式攻击如时序分析和功耗分析来破解。如果安全熔丝的状态是上电或复位后的存储器的一部分,这就给破解者用电源噪声来破解的机会,强制电路进入存储器中的错误状态。

 

 图2-8 PIC16F648A伪顶层金属层图案使得对芯片进行微探测攻击更困难,200X


别的一些使入侵攻击开销更多的措施包括使用顶层金属网格。所有的网格都用来监控短路和开路,一旦触发,会导致存储器复位或清零。普通的MCU不会使用这种保护方法,因为设计较难,且在异常运行条件下也会触发,如:高强度电磁场噪声,低温或高温,异常的时钟信号或供电不良。故有些普通的MCU使用更廉价的伪顶层金属网格,但这也有非常高效的光学分析进行微探测攻击的方法。在智能卡中,电源和地之间铺了一些这样的网格线。在这些方法中发现一些设计缺陷使得可以进行微探测攻击。同样,这些网格不能保护非侵入式攻击。因为导线之间有电容,并且光线可以通过导线抵达电路的有效区域,半侵入式攻击仍然可能。

可编程的智能卡制造商走得更远,干脆砍掉标准的编程接口。取而代之的是启动模块,可以在代码载入后擦掉或屏蔽掉自己。这些卡只能在初始化时被编程一次,之后只能响应使用者的嵌入软件所支持的读写存在卡里的数据或程序。

 图2-9 意法ST的ST16系列智能卡芯片表面金属层的敏感网格。


近期的一些智能卡使用存储器总线编码(Bus encryption)技术来防止微探测攻击。即使破解者获得数据总线的数据也不可能知道密码或别的敏感信息。这种保护措施直指侵入式和半侵入式攻击。但非侵入式攻击仍然可以像正常的CPU一样访问控制非编码信息。事实上,几年前就发现廉价地破解编码信息的方法。

 

 图2-10 100倍显微镜下的英飞凌Infineon SLE66系列的智能卡芯片上的硬件总线编码模块,保护存储器免受微探测攻击。


另外一些需要提及的改进是将标准的模块结构如解码器,寄存器文件,ALU和I/O电路用似ASIC逻辑来设计。这些设计称为混合逻辑(Glue logic),广泛用于智能卡。混合逻辑使得实际上不可能通过手工寻找信号或节点来获得卡的信息进行物理攻击。这种技术广泛用于盗版,并可提升常见CPU内核的性能和安全性。例如Ubicom的SX28微控制器的引脚和程序都兼容于微芯的PIC16C57,但它使用了混合逻辑设计,闪存,大容量RAM使它的性能获得大幅提升。在PIC微控制器中,破解者很容易跟踪内存到CPU的数据总线,但在SX微控制器中,几乎不可能知道总线的物理位置,反向工程和微探测攻击将是非常困难且耗费时间。

 图2-11 Ubicom的SX28微控制器引入混合逻辑设计,提升了性能和安全性。


更常用的是芯片由不同模块组成,但每个模块使用混合逻辑设计。如赛普拉斯的CY7C63001A微控制器。在这种情况下,破解者更容易跟踪模块之间的总线和控制线,并对芯片进行侵入式和半侵入式攻击。混合逻辑设计不能防止非侵入式攻击,但需要更快更昂贵的设备。半侵入式攻击面临伪设计模块的问题。当然破解者可以自动操作来进行穷举搜索并尝试攻击所有可能区域。结果很可能是花了很长时间并没有取得成功。另一方面,破解者可以直接攻击存储器器或它的控制电路。

 图2-12赛普拉斯Cypress的CY7C63001A微控制器使用部分混合逻辑设计,但内部总线很容易被访问。


 技术的进步增加了入侵攻击的成本。十年前很容易使用激光切割器和简单的探针台就可以读写芯片表面的任何点,但对于现代的深亚微米半导体芯片就需要用到不一般的且昂贵的技术,这难倒了很多潜在的破解者。如PIC16F877很容易在显微镜下观察并进行反向工程,藏在顶层金属下的第二层金属和多晶硅层仍然可见。但在PIC16F887A微控制器中使用了平坦化工艺,使得不会显示更深的层。唯一的方法是用物理或化学的方法除去顶层金属。

 图2-13 500倍显微镜下,通过PIC16F877的顶层看到第二层金属和多晶硅层。

 图2-14 500倍显微镜下,看不到PIC16F877A的顶层金属下有什么特别的。


另外一个需要注意的是大量二手的半导体制造和测试设备出现在市场上,虽不能用于攻击高端产品,但用于破解旧技术制造的芯片已经够了。


2.2  存储器的种类

一个微控制器依照位于存储器内的程序进行操作。有多种不同的存储器类型,大部份曾被用于微控制器。多数的现代微控制器是以互补型金属氧化半导体技术制造。 芯片上的存储器可能是CMOS型的(SRAM 和一些 EEPROM)或MOS型的。 后者有比较好的性能和小的尺寸

早期的微控制器使用掩模ROM和紫外线擦除的编程储存器来储存程序,使用SRAM来储存数据在大批量且低成本需求的场合,掩模ROM仍然被大量使用。通常这些微控制器的封装上没有具体型号的印字,仅有厂商的商标。内部工厂预编程的ROM里有软件版本号。

 

 图2-15 使用掩模ROM的MCU,通常封装上只有工厂的内部编码。

 

掩模ROM有极好的性能,但它不能被再编程,也就是说不能升级程序。带UV EPROM的MCU通常有两种方式:一种是带石英窗的陶瓷封装,可重新擦除后再编程。另一种是大量生产的标准塑料封装,也称为OTP(One-Time Programmable只能编程一次)UV EPROM不方便的地方是:编程的时候需要高压;一次只能写入一个字或一个字节,导致整个芯片的编程需要很长时间。即使是可擦除的版本也只能被编程百来次,进行擦除操作时,需要在非常强的紫外线下放置20-30分钟。

SRAM也在一些需要快速读写或频繁升级的微控制器中作程序存储器。如赛普拉斯的USB 2.0微控制器C7Y68013。SRAM也被达拉斯半导体的加密型微控制器所用,因为在防破解场合需要更短的擦除时间。

更先进的EEPROM比UV EPROM有一些进步:可在数百或数千个周期内再次编程;通常用芯片上的充电泵电路产生高压;很快可以编程完毕。对EEPROM的更进一步的发展是闪存(flash EEPROM),它在现代的微控制器和智能卡中是主流的存储器。它提供了更快的编程时间,且可以按块来擦除,节省了很多时间;并且可以被擦写数万次。大部分的现代微控制器将闪存作为程序存储器,这就可以现场升级代码而无须昂贵的烧录器。

有种方法是把SRAM和EPROM整合在一起,那就可以达到快速的读写时间,且非易失。但它太贵,只在小部分的智能卡和ASIC中有应用。

每种存储器都有优势和不足,硬件设计师根据需求来取舍。普通的微控制器在同一晶粒上有不同的存储器,如SRAM和EPROM用在OTP PIC微控制器中。SRAM,掩模ROM和EEPROM用在飞思卡尔MC68H05微控制器中。

CPLD中,主要用EPROM,EEPROM和闪存。FPGA大多是基于SRAM的,也有公司提供反熔丝和闪存的非易失FPGA。反熔丝是一种特殊的OTP存储器,用于将芯片内金属线之间的互联进行编程。这些互联很小,约100纳米宽,很难确定它们的状态。基于反熔丝的技术,提供了很高的安全性。


2.3 安全保护的类型

通过编程接口对片上存储器进行写,校验,读和擦除操作,这可以用硬件(JTAG)或软件(bootloader)来实现。在硬件接口方面,安全保护通常是使用安全熔丝来控制接口的操作,如,阻止存储器中的数据发送到输出缓冲器里。至于软件接口,一般使用密码保护,但通常软件会检测某个硬件安全熔丝的状态。一些微控制器使用了这两种方法,软件启动载入模块控制系统的编程,另一个快速的硬件接口用来大批量生产的编程。每一种都有它的优势和劣势。通过软件,有更好的灵活性和更好的编程控制能力,但会在时间延迟和功耗方面泄漏一些信息。硬件的执行速度更快,对噪声攻击不敏感,不会通过功耗泄漏信息。在硅芯片的资源上,两者都占用类似大小的空间,对于现代的微控制器,与其它较大的部分如程序存储器,处理器和模拟接口相比,这部分几乎可以忽略不计。制造商就可以在同一个芯片上放置两种或更多的编程接口。如通过异步接口进行在线串行编程,标准的并行编程,软件启动模块通过异步接口编程。

一些制造商故意不提供它们的微控制器的编程规格。这对它本身并没有提供很好的保护,只是给破解稍稍增加成本而已。这些信息可以通过在开发板上或通用编程器对芯片进行编程而获得。

很明显,对于最高等级的安全,系统没有任何编程接口,并且不能读写所存储的数据。这通常用于掩模ROM微控制器和智能卡。对这种保护,实用破解方法是用微探针接触数据总线来恢复信息或使用功耗分析和噪声攻击来利用软件的缺陷。当微控制器进行编程但不提供任何返回信息,只有校验和写检查,这可以提供相对高的安全等级。当然,这需要完全执行以避免破解者强制系统一次只校验一个字节。

大部分现代的微控制器有一个或多个安全熔丝来控制片上存储器的读写。这些熔丝可以用软件或硬件来实现。软件的方法就是密码存储在存储器中或一个特定的存储器位置当作一个安全熔丝。例如,在MC68HC908系列,使用了密码保护。MC68HC705B系列的熔丝位于数据EEPROM存储器的第一个字节。两种方法的安全性都较高,因为很难从物理上找到熔丝和密码的位置并复位它们。同时,破解者会尝试使用噪声攻击来跳过安全检查,或使用功耗分析来观察猜测的密码正确与否。

硬件执行方面,安全熔丝物理上位于芯片上。这可以是主存储器阵列边上的分离的单个单元,甚至更远。所有的PIC和AVR微控制器都这样。这两者的安全性能并不高,熔丝很容易被找到并被屏蔽。

安全熔丝在主存储器中可以提供提供更好的保护,这很难找到并屏蔽它们。主存储器和熔丝可以通过位线(Bit line)接在一起。如zilog的Z86E33微控制器,或通过字线(Word line)

接在一起,如意法的ST62T60。有趣的是MC68HC705C9A使用了多种安全措施。熔丝单元放在主存储器单元之间,合用位线。如果熔丝被紫外线擦除了,主存储器也会被擦掉。对存储器进行反向工程,发现很难分辨哪部分属于存储器,哪部分属于熔丝。但同时,半侵入式攻击可以很好工作,因为熔丝有分开的控制电路,这很容易被破解而不影响主存储器。

图2-16 200倍显微镜下,Z86E33微控制器的熔丝沿位线紧挨着主存储器

 图2-17 200倍显微镜下,ST62T60微控制器的熔丝沿字线紧挨着主存储器

 

下一个硬件安全保护方面的进展是将熔丝区域嵌入到主存储器阵列中,共享控制或数据线,这样的安全性能更好,熔丝已经成为存储器的一部分,很难进行定位。

将某一部分存储器作为安全熔丝可以达到更高的安全性能。这种情况下,不扰乱其它部分存储器的内容,找到位置并复位是异常困难的。这并不意味着别的破解方法不能凑效。但可以减少成功的机会。

安全熔丝可以通过多种方法来监控。最简单的方法就是在上电时;复位时;进入编程模式时检查熔丝的状态。使用电源噪声或激光脉冲,可以用很短的时间就改变熔丝地状态。熔丝状态保存在触发器或寄存器中并不好,因为触发器的状态可以通过缺陷注入攻击来改变。

 

第三章

 

破解技术

 

安全微控制器和智能卡都是被设计成能保护敏感信息的机密性和完整性。但这并不能完全防止破解者找到所存储的密钥。不能被破解者修改密钥的一部分为已知值;或产生计算值的错误而导致敏感信息被推断出来。这些错误可以是数据的错误,如不正确的数字信号泄露密钥;或编码错误,如丢失跳转条件而减少密码模块的循环次数。

 

3.1 简介

 对给定的产品评估篡改的难度系数是个重要的问题。不幸的是安全研究协会极少关心给硬件作安去评估。甚至芯片制造商都在试图避免对它们的产品进行安全保护原理的探讨。如果发现设计上硬件的安全问题,它们会尽可能静悄悄的解决,然后发布另一个版本的芯片。

 在安全类产品的说明书上没有什么安全保护的信息,通常仅列出已设计的防破解措施而不会讨论任何详情。一直有个严重的问题:是否对手能不受限地读写元器件。如果答案是否定的,那相对简单的试验就可以证实。例如:VISA安全模型对人们的特殊访问是有缺陷的, 一个服务工程师在维护的时候就很容易屏蔽掉防篡改保护电路系统,下一步就可以取得密钥材料。但银行不认为这是个问题,它们通常是把安全模块放在受监控的计算机房里,关掉对管理服务的访问。

随着应用数量的不断增多,对手能获得完整的未授权访问而不是只能进入一次密码系统。包括我们感兴趣的下列东西:含MCU的工业设备,付费电视卡,预付费的水电表,软件的看门狗,硬件标签,汽车的遥控门锁和移动电话的SIM卡。很多类似的系统已经有方法破解。

参考IBM的做法,依专业程度和攻击强度,破解可以分成三类: 

 初级

他们通常很有才智,但缺乏系统的知识。它们能够读写一些老旧的元器件。他们更乐于破解现有系统的弱点,而不是制造一个新的系统。

 中级

他们有足够的技术和经验。它们能改变系统已知部分的安全等级,并可能读写大部分。通常有高精尖的工具和仪器来分析。 

 高级

他们的组织背景不凡,是由相关且技能互补的特殊人士组成的团队。有能力彻底分析整个系统,设计精巧的攻击方法,使用的是先进工具。中级有可能是它们团队的组成部分。


3.1.1 保护等级

评估半导体芯片的保护等级不是个容易的工作,要考虑太多的因素,从芯片的封装,芯片的版图到存储器的架构,存储器的类型,编程和读写接口,安全熔丝和安全密钥的位置,保护原理到别的安全特性如噪声检测,电源电压监测,保护用网格,防篡改电阻等。没有简单的方法来评估半导体元器件的安全特性,只有使用不同的攻击方法并检查结果。从另一方面来讲,半侵入式攻击比非侵入式更容易自动化操作;同时,需要的设备比侵入式便宜得多。这使得半侵入式攻击在在快速且相对便宜的硬件安全评估方面很有市场。

来自IBM的文件也讨论了安全系统对不同攻击方法所具有的保护等级。他们建议分成六个安全等级,从没有任何安全保护的零级到实质上不可破解的高级:

●零级

系统中没有使用特别的安全措施,所有部分可以自由访问。例如,使用外部ROM的微 控制器和FPGA。

●低级

使用了一些安全措施,但它的破解是相对容易的。如使用电烙铁和廉价的模拟示波器就可以破解。破解者需要时间,但不需要很久。如内部存储器无保护,但编程算法私有的MCU。

●中低级

安全措施可以抵挡大多数廉价的攻击手段。需要使用到昂贵的工具和特殊的知识,如对功耗分析和电源噪声敏感的微控制器。

●中级

需要使用到特殊的工具和设备,并需要特殊的技能和知识。攻击可能是相当耗时间,如防紫外线攻击的微控制器,旧的智能卡。

●中高级

设计上就特别关注安全保护。有攻击用设备但购买和使用都很昂贵。使用设备时需要使用到特殊的技巧和知识。如更高级安全保护的现代智能卡。复杂ASIC,安全型FPGA和CPLD。

●高级

可阻止所有已知的攻击,需要一个特别的团队来研究一种新的破解方法。某些破解用设备需要设计建造,不确定攻击是否会成功。只有大型的组织如半导体工厂或政府建立的实验室才能做到,如签名应用中的加密模块。

实际元器件的安全等级不会永远保持不变的,将来有可能发现更廉价有效的破解方法。

 

3.1.2 攻击种类

对于安全评估,需要假定破解者可以获得多个目标元器件。我们所关心的破解目的是复原安全保护规则并获得存储在微控制器,智能卡或别的芯片级安全处理器中的密钥资料。

可以把主要的攻击方法分为五类,

● 微探测技术可以用来直接访问芯片表面,可以用来观测,修改和干扰集成电路的工作。

● 反向工程用来推导半导体芯片的内部结构并学习或仿效它的功能。它需要破解者使用与制造商相似的技术和能力。

● 软件攻击用在处理器正常的通信接口上,从协议,密钥的算法或它们的执行模块来获得安全保护的弱点。

● 窃听技术使得破解者可以精确监控所能获得的模拟特性和接口的通信协议,以及处理器正常工作时的任意电磁辐射。

● 缺陷注入技术是在正常的工作条件下,使处理器发生操作错误来获得额外的读写能力。

微探测和反向工程技术是侵入式攻击,它们需要在特殊的实验室里花费数小时或数周的时间,来打开产品的封装。别的技术大多是非侵入式攻击。在进行攻击时,不需要从物理上破坏元器件。最后一种是半侵入式攻击。这意味着需要接近芯片里的晶粒,但不需要彻底的攻击,要用强光,射线,加热或别的来产生缺陷。

非侵入式攻击对某些应用的威胁有二:一是元器件的所有人可能不会意识到密钥已经被盗,因此,危及安全的有效密钥在被滥用之前是不会被废除的。二是非侵入式攻击弹性大,被攻击的元器件可以用来廉价地进行再生产和更新。

大多数非侵入式攻击需要非常熟悉处理器的硬件和软件。另一方面,侵入式的微探测攻击只需很少的预备知识,且通常可以破解用同样技术制造的不同产品。通常攻击从反向工程开始,获得的结果有助于研究更快更廉价的非侵入式攻击。半侵入式攻击可以用来学习元器件的功能和测试它的安全电路。它不需要与芯片的内部某层建立物理的连接,不需要使用昂贵的设备,如激光切割器或FIB机器,被成功用于进行简单的闪光灯或点状激光攻击。

攻击可以是可逆的,元器件可以回到初始状态,或者使元器件永久修改而不能恢复。如功耗分析和微探测技术可以不用损伤元器件就可以得到结果。当然微探测攻击会留下痕迹,但通常不会影响元器件以后的运行。缺陷注入和紫外线攻击几乎可以把微控制器置于不稳定状态,可以改变内部电阻,或存储器不能复原。另外,紫外线攻击会留下篡改痕迹。

 

3.1.3  攻击过程

因目标不同,有不同的攻击方法。有时候盗版市场上热销的产品就很容易赚到钱。大的厂商会考虑从元器件中窃取IP并与自己的IP混合以掩饰盗窃行为。别的公司也许会窃取元器件内的秘密资料,用以开发竞争的产品或卖给别人。产品的设计者首先必须考虑被攻击的可能动机,然后是考虑保护原理。下列攻击过程在系统设计时应该考虑。 

 来自个人的攻击,他们想降低配件的成本。对于大公司来讲,与增加设计方面的投资相比,

它们对增加销售额更感兴趣。例如,狡猾的竞争对手会复制现有的产品来降低研发成本。当然,它们会在盗窃行为的伪装方面下点功夫。但与完整的研发成本相比,这些开销可以忽略的。IP盗版的常见行为是多做一些。常见于厂商的实际制造数量大于所需数量时。多余部分就会被卖到市场上,或给第三方。服务盗窃通常发生在用电子元器件提供对信息或服务的访问控制时。例如有线或卫星电视公司会控制所能看到的频道。如果窃贼能绕过安全系统或模拟该设备,那服务提供商就有损失了。如果有大量的盗窃者正常收视,那服务提供商就亏大了。

竞争对手可以使用拒绝服务来诋毁原始的产品。这在设备通过网络更新固件时容易发生。

如果竞争对手能够对设备进行反向工程并导出更新用的协议,就可以发布恶意的更新代码来破坏设备。如通过更新配置文件可以永久损坏FPGA。现代的微控制器和智能卡用闪存来保存程序代码,如果擦掉了闪存,元器件就不会正常工作了。开发者需要小心设计固件更新功能以防止未授权的访问。

 

3.2  非侵入式攻击

常用的非侵入式攻击方法有抖动电源的电压和抖动时钟信号。欠压和过压攻击用来屏蔽掉保护电路,或强制处理器误操作。因此,安全处理器会有电压检测电路,但它对快速的瞬间波动没有作用。电源和时钟瞬间波动也可以用在某些处理器中来影响个别指令的解码和执行。

另一种是电流分析。可以用模数转换器来测量元器件消耗的电流。驱动地址和数据总线时,每一位都要反向后上拉,每位都要驱动一个很大的电容负载。这会导致在状态翻转时电源出现明显的短路脉冲。单条总线从1翻转到0或反之,在时钟边沿需要0.5-1mA的漏极电流。一个12位的模数转换器就可以用来推测任意时刻翻转的总线位数。SRAM写操作通常有最强的信号。

另一个可能的威胁是数据的保持能力,这是易失存储器在掉电后保存信息的能力。保存

在静态RAM里的密钥可以在较长时间后的下次上电时恢复。另一种可能是用低温来“冰冻”存储器的内容。这样,静态RAM里的信息可以保存足够长的时间,就可以访问芯片并读出内容。同样可以用在非易失的存储器中,可以检测出浮栅中的残留电子。例如,它会影响晶体管导通的阈值电压,或开关时的时间参数。

 下一个可能被攻击的方向是接口信号和访问协议。同样,如果安全协议被错误执行,会留下被攻击的隐患。一些微控制器和智能卡有工厂测试用的接口,那可以访问芯片上的存储器以及允许制造商测试元器件。如果一个破解者能够找到这个接口,就很容易导出保存在芯片里的信息。一般的测试电路信息由制造商来保密,但破解者可以用不同的电压和逻辑电平加到引脚上就有可能使芯片进入测试模式。这种方法有时对微控制器有效,但智能卡的测试电路通常会在使用后破坏掉。同样,嵌入的软件升级功能必须防止未授权的代码访问,或者代码只能加密后发出。

 

3.3 侵入式攻击

对于复杂的侵入式攻击,某些部分只能使用昂贵的实验室设备来完成。廉价的攻击通常是使用二手的测试设备才能做到。有足够的耐心和技巧,通过二手市场或自行设计是可以解决设备问题的。

侵入式攻击首先是打开芯片的封装。打开后就可以进行探针检测并修改攻击。侵入式攻击的最重要工具是微探针工作站。主要部件是个特殊的带长焦物镜的光学显微镜。安装在带测试座的稳定平台上,探针臂可以在芯片表面以亚微米的精度步进。比头发丝还细的探针安装在末端,可以接触到芯片内部总线而不损伤它们。

在已打开封装的芯片表面,顶层的铝互联线被一层钝化层保护,通常是硅氧化物或氮化物,用来保护不受环境和离子的侵袭。这些钝化层在探针接触之前必须除去。一般是用激光来切出小孔,切除时需谨慎确定激光的能量大小。可以做到仅仅在钝化层上暴露单条总线。这就能防止意外连接到旁边的线,小孔也可以固定住探针的位置,减少震动和温度的影响。

 除ROM外,直接从单个存储器单元中读出存储的信息并不常见。存储的数据可以通过存储器总线来访问,那样所有的数据都在同一个位置出现。微探针可以用来搜索总线并记录探测到的值。

为了不用软件就能读出所有的存储器,可以修改处理器的某一部分,如地址计数器,用以访问存储器。程序计数器在每个指令周期都在增加,用来读下一个地址,这极为适合作地址发生器。只需防止处理器执行跳转,调用或返回指令,那些指令会扰乱程序计数器的正常读状态。很容易通过激光来割开正确的金属互联,对指令解码或程序计数器电路进行微小修改,就可以达到所要得效果。

另一种方法是理解元器件的工作原理来进行反向工程。第一步是建立处理器的示意图。这可以用带摄像头的光学显微镜来获得高分辨率的芯片表面图案。对于基本的体系结构,通过学习识别连接图案,跟踪明显模块边缘的金属线,如数据和地址总线,可以轻易标定出来。所有的处理模块通常是通过总线连在一起的,很容易识别出总线的锁存器和驱动器。

大部分现代的微控制器和智能卡是用0.25-0.5微米的工艺制造的,有2-4个金属层。可以通过手动检查和光学技术来进行反向工程,但需要一些特殊的操作来除去特定层的金属。下一代的微控制器将使用更细的工艺线宽和更多的金属层,将需要使用更昂贵的工具如扫描电子显微镜(SEM:Scanning Electron Microscope)。

可以用聚焦离子束(FIB:Focused Ion Beam)来修改芯片结构。FIB与SEM类似,但它能够用来切割金属和多晶硅互联,以亚微米的精度做个新的互联。如果使用激光干涉台,可以在芯片表面进行盲操作。芯片可以从背面磨薄至几十微米。使用激光干涉仪操作或红外成像,可以定位到单个晶体管,通过在底层的硅挖个合适的孔来进行连通。这种背面侵入技术很早就有人使用了,现在更普遍。

 

3.4 半侵入式攻击

在先前讨论的非侵入式和侵入式攻击之间有个巨大的间隙,很多种攻击方法在这个间隙里面,比典型的侵入式攻击便宜,与非侵入式攻击一样可重复。这就是即将要介绍的新一类攻击方法---半侵入式攻击。如侵入式攻击一样它们需要打开芯片的封装来访问芯片表面,但钝化层保持完整,半侵入式攻击不需要剥离钝化层或创建内部互联。无需使用微探针,FIB,激光切割器之类的昂贵仪器。

半侵入式攻击不是全新的,多年前在EPROM和OTP型微控制器中用紫外线来屏蔽安全熔丝,现代微控制器很少受到此类攻击,因为设计时考虑过。

先进成像技术也能作半侵入式攻击。包括红外,激光扫描和热成像。它们中的某些可以用在芯片的背面,这对现代多层金属设计的芯片很有效。某些技术可以观测芯片内部单个晶体管的状态。

半侵入式攻击中的缺陷注入攻击方法可以修改SRAM中的内容,改变芯片内任意单个晶体管的状态,这几乎可以无限制地控制芯片操作并任意使用保护机制。与非侵入式攻击相比,半侵入式攻击需要打开芯片的封装。但是设备比侵入式的便宜很多可以在适当短的时间内完成攻击。同时可以缩小到确定的范围,足够的技巧和知识有助于快速简易地进行破解。进行攻击时的某些操作,如搜索安全熔丝,可以自动进行。与侵入式攻击相比,半侵入式攻击不需要精确定位,它通常对所有晶体管或部分区域的晶体管有效。

 

第四章


非侵入式攻击

 

非侵入式攻击不需要对元器件进行初始化。攻击时可以把元器件放在测试电路中分析,也可单独连接元器件。一旦成功,这种攻击很容易普及,并且重新进行攻击不需要很大的开销。另外,使用这种攻击不会留下痕迹。因此,这被认为是对任意元器件的硬件安全最大的威胁。同时,通常需要很多时间和精力来寻找对特定元器件的非侵入式攻击方法。这通常对元器件进行反向工程,包括反汇编软件和理解硬件版图。

非侵入式攻击可以是被动的或主动的。被动攻击,也叫侧面攻击,不会对被攻击元器件发生作用,但通常是观察它的信号和电磁辐射。如功耗分析和时钟攻击。主动攻击,如穷举攻击和噪声攻击,特点是将信号加到元器件上,包括电源线。

一个简单的非侵入式攻击可以是复制一个上电配置的基于SRAM的FPGA。接上配置芯片用的JATG接口,用示波器或逻辑分析仪,捕捉所有信号。然后可以通过分析波形并回复独有的命令。只使用到一半的FPGA资源时,可以轻微改变数据流来伪装盗版的事实。配置时留下一点空间而不影响元器件的运行。JTAG接口在发送信号时序时也有一些自由,故盗版的波形可以设置成看上去与原始信号不一样的。另外,破解者可以在上传时交换行地址,给人的印象是完全不同的设计。 

另一个例子是当破解者投资很多钱来对付费电视访问卡进行反向工程,然后从卡里反汇编内部代码,知道在签名和操作时发生的一切。很有可能找到弱点,如在恰当的时候加上电源噪声导致处理器发生故障,来获得无限制的访问收视频道。一旦或得成功,就可以以极具竞争力的价格提供收视服务,或销售伪造的卡。很明显,这样的攻击需要很大的投资。一旦盗版的产品已投放市场,也有可能被别人攻击。别人的攻击就不需要花很多时间,因为盗版的常用廉价的微控制器,安全保护等级不如付费电视卡。盗版的产品几乎在数周内就会被破解,第二个破解者将向市场倾销盗版的复制品。很快,在互联网上就有如何制造盗版的资料,以至于任何人都能极低的成本制造盗版的产品。故付费电视的服务提供商就损失数百万。有时,最早的破解者会被起诉,但服务提供商很难拿回钱,这些行动的唯一效果就是用处罚来威胁黑客团体。另外,服务提供商不得不花一大笔钱来重新设计访问控制系统,选择新的智能卡并开发软件,然后分发给智能卡的用户。

 

4.1 含糊与安全

半导体制造商给大客户提供了增强产品防破解能力的措施:包装上的客户印字代替了标准的芯片型号。这给人的印象是产品是由定制的集成电路设计的。众所周知,ASIC提供了很好地保护措施来防止多种攻击,只有极少数经验丰富且装备精良的破解者才有可能成功破解。这会使很多潜在的破解者望而却步。但一个信心坚定的破解者会尝试用简单的方法确定芯片是不是真的ASIC。最简单的方法是观察连接到电源,地,时钟,复位,串口或别的接口的引脚。与数据库中被怀疑的微控制器相比较,这种结果非常可靠,每种微控制器都有自己的引脚特点。一旦发现相似的,就把它放在通用烧写器上尝试读出结果。

另一个简单的方法是限制访问程序存储器。通常用在智能卡中,但一些微控制器中也用到。这不是很可靠且实用的方法。当然在智能卡中用得很好,所有的客户被与芯片制造商迫签署不扩散协议。但微控制器极少这样,能被通用烧写器烧写的微控制器世界上很多公司都能提供。即使文件中没有烧写的规格,用低成本的示波器几个小时就可以套出需要的波形。如果微控制器不被特殊通用烧写器所支持,仍然可以通过从制造商购买开发板来获得直接完整的协议。

 

4.2 时序攻击(Timing attacks)

一些安全相关的操作使用输入的值和密钥,由半导体芯片执行不同的时间来比较。小心的时序测量和分析就能恢复出密钥。这个方法最早在1996年的文献上提到。稍后这种攻击成功破解了实际的RSA签名的智能卡。

为了攻击成功,需要收集装置的信息,与处理时间整合比较,如问答延迟(question-answer delay)。很多密码算法容易受到时序攻击,主要原因是软件来执行算法。那包括执行适时跳过需要的分支和操作条件;使用缓存;不固定时间处理指令如倍频和分频;还有大量的其他原因。结果就是执行能力典型地取决于密钥和输入的数据。

为防止此类攻击可以使用盲签名(Blinding signatures)技术。这个方法是利用选定的随机数与输入数据混合来防止破解者知道输入数据的数学运算法则。

时序攻击可用在安全保护是基于密码的微控制器,或使用确定数字的卡或密码来进行访问控制的系统,如达拉斯的iButton产品。这些系统中共有的风险是输入的连续数字在数据库进行再次校验。系统需经常检查输入到数据库的密钥的每个字节,一旦发现不正确的字节就会立即停止,然后切换到下一个直到最后一个。所以破解者很容易测量出输入最后一个密钥倒请求另一个的时间,并得出发现的密钥相似度。尝试相对小的数字,有可能找到匹配的密钥。

为防止这些攻击,设计者需要小心计算处理器的周期。当密码进行比较时确保正确和错误的时间是一样的,例如:飞思卡尔的68HC08微控制器的内部存储器载入模块在输入正确的八字节密码后可以访问内部闪存。为达到正确和错误的密码都处理相同的时间,程序中增加了额外的空操作指令。这对时序攻击提供了很好的保护。一些微控制器有内部阻容振荡器,那样处理器的工作频率与电压和芯片的温度相关。这使得时序分析很困难,攻击时需要稳定元器件的温度并减少电源线上的噪声和电压波动。一些智能卡有内部随机时钟信号使得攻击时测量时间延迟无效。

 

4.3 穷举攻击(也称暴力攻击 Brute force attacks))

暴力对于半导体硬件和密码来说是另一种意思。对于密码,暴力攻击是对系统尝试数量众多的密钥。通常是使用高速计算机来寻找匹配的密钥。

一个例子是微控制器中的密码保护设置。以德仪的MSP430为例,密码本身长度为32字节(256位),抵挡暴力攻击已经足够了。但密码分配在与处理器中断矢量相同的存储器地址。那么,首先减少存储器内矢量一直指向的区域。然后当软件被更新时,只有小部分的密码被修改,因为大部分中断子程序指向的矢量是相同的地址。结果是,如果破解者知道早前密码中的一个,就很容易做系统的搜索,在合理的时间内找到正确的密码。

暴力攻击也可用在ASIC或CPLD的硬件设计来实现。这种情况下,破解者使用所有可能的逻辑组合到元器件可能的输入端并观察所有输出。这种方法也称为黑箱分析(Black-box analysis),因为破解者不知道被测试元器件的情况。通过所有可能的信号组合,尝试获得元器件的功能。这种方法对相对小的逻辑器件很有效。另一个问题是破解者使用的ASIC或CPLD有触发器,故输出将可能是当前状态或输入的状态。但如果预先检查并分析信号,搜索的范围可以显著减少。例如,时钟输入,数据总线和一些控制信号是很容易认出的。

另一种可能的暴力攻击,对很多半导体芯片有效,是将外部高压信号(通常是两倍于电源电压)加到芯片引脚上,来试图进入工厂测试或编程模式。事实上,这些引脚用数字万用表很容易发现,因为它们没有保护二极管到电源脚。一旦发现对高压敏感的引脚,破解者就可以尝试可能的逻辑信号组合来加到别的引脚上,找出用于进入工厂测试或编程模式的部分。

破解者也可用元器件的通信协议来找出设计者嵌入在软件中的测试和更新用得隐藏功能。

芯片制造商经常提供给后期测试用得嵌入硬件测试接口。如果这些接口的安全保护没有适当设计,破解者很容易利用它来读写片上存储器。在智能卡中,这些测试接口通常位于芯片电路之外,并在测试后从物理上除去。

任何安全系统,不管软件和硬件,在设计上都可能有缺陷,对于破解者来说都是机会,暴力攻击有可能找到它。小心设计安全保护系统,进行适当的评估,可以避免很多问题,并使得这些攻击事实上不可行。

 

4.4 功耗分析(Power analysis)

 一个运算设备的功耗取决于它当前的状态。依照CMOS晶体管的原理,各部分动态时的功耗比静态的要大。当输入电压加到反向器上,会引起一个晶体管短路,这个晶体管电流的增加比静态消耗的寄生漏电要大得多。在电源线上加个10-20欧的电阻,就可以测量电流的波动。为达到更好的效果,需要使用至少12位精度和50MHz采样速度的模数转换器。这些获得的参数可以用来区别处理器的不同指令并估计总线上同时翻转的位数。 

通过平均多次重复同样操作的电流,即使是没有通过总线的很小信号也能区别开。有些信号如移位状态特别有用,因为很多密码的密钥产生算法使用移位操作来逐一移出单个密钥倒进位标志。即使状态位的变化不能直接测量,它们通常会改变指令次序或微码的执行,这会导致功耗的明显变化。

不同指令导致不同级别的指令解码和运算单元的活动,可被清晰地区别开,故运算部分能被推测出。处理器的不同单元在时钟沿相关的不同时间里有独有的开关状态,能被高频仪器分离出来。

有多种不同的功耗分析技术用在破解密码算法上。整个分析过程是相对简单的,只需要标准的现有的廉价仪器设备。

功耗分析技术主要有两种:简单功耗分析(SPA:Simple Power Analysis)和差分功耗分析

(DPA:Difference Power Analysis)。SPA是在密码或别的安全相关操作时直接观察功耗,可以得知设备运行时的信息如密钥资料。如果破解者知道密码算法,很容易通过观察处理器指令次序,特别是移位条件转移,找到一些位的信息。如果算法或逻辑运算的结果很容易被看出,如进位状态,零或负标志,就可以获得更多的信息。DPA是种更有效的技术,因为破解者不需要知道密码算法是如何执行的。它使用静态分析和已知密码运算的大量功耗迹线来获取隐藏信息。用统计方法鉴别功耗的微小区别,可用来恢复密钥中的单个的位信息。

 图4-1 用无源探头获得的电源电压-电流曲线,500KS/s 25MS/s

 

 图4-2 用有源探头获得的电源电压-电流曲线,500KS/s 25MS/s

 

上述两图均为飞思卡尔MC68HC908JB8微控制器在6MHz时启动模块的电源电压-电流曲线。

功耗特性当然包括噪声部分。额外的噪声可以通过减少获取信号的探针长度并小心使用测量仪器来降低它。测量接在地线上的电阻的功耗有一些优势。首先,减少了噪声电平。其次,可以用示波器的探头直接测量信号,因为大部分探针站有公共的地线与外部电源地相连。为了增加信噪比,可以通过提高平均采样数来获得。 

有源探头能降低输入电容,增加对输入信号的带宽。一种方法是用高速低噪声的运放来构建相对简单的探头,另一种是用很短的同轴电缆直连到示波器的输入端。在这些情况下,探头的输入电容显著减少。

  图4-3 左侧是普通的无源探头,右侧是自制的有源探头.

 

我们对现有的功耗分析步骤进行了改进。这是一种新的方法,尚未有类似的。我们用铁芯变压器来取代连到电源或地的电阻,那样波形就有点不一样,因为信号的直流成分丢失了,同时又有些有利条件。常用的方法对直流电流几乎没有什么限制。但对于10欧电阻来讲100mA的电流意味着有1V的电压降,那可能中断微控制器的正常操作。减少这个电阻可以解决这个问题,但会使得难以识别功耗的微小变动。使用变压器后,不需要使用昂贵的有源探头,标准的无源探头就可以给出几乎相同的结果。如果信号太小,调节二次侧的线圈就可以增加振幅。变压器也担当无源滤波器的角色,如波形,同样的处理器指令对电阻和变压器所测量到的波形有不同的影响。那可以通过对获得的信号进行处理。为了攻击获得成功,需要采集数千的样本,然后快速分析处理所展现的秘密。

 图4-4 通过互感器来测量功耗

 图4-5 无源探头通过铁芯互感器测量到的波形

图4-6 左侧是无源探头获取到的曲线,右侧是有源探头获取到的曲线,速度均为25MS/s.


 最近,芯片设计上已考虑这种攻击,并将使得这种攻击方法更难获得成功。


4.5 噪声攻击(Glitch attacks)

噪声攻击是快速改变输入到微控制器的信号,以影响它的正常运行。通常噪声是叠加在电源上或时钟信号上,但噪声也可以是外加的短暂电场或电磁脉冲。在离芯片表面数百微米处放置两根金属针,然后加上少于1微秒的数百伏电压的窄脉冲,晶圆衬底会感应出一个电场,使得邻近晶体管的阈值电压发生变化。最近出现一种改进的方法:使用几百圈金属线绕在微探针的针尖构成一个小型电感。当电流进入线圈会产生磁场,针尖将集中磁力线。

每个晶体管和与它相连的线路构成有时延特性的RC电路。处理器的最大可用时钟频率取决于该电路的最大延迟。同样的,每个触发器在接收输入电压和由此引致的输出电压之间有个特征时间窗口。这个窗口由给定的电压和温度来确定。如果用时钟噪声(比正常的时钟脉冲要短得多)或电源噪声(电源电压的快速波动)将会影响芯片里的某些晶体管,导致一个或多个触发器进入错误状态。通过改变参数,处理器会被导致执行许多完全不同的错误指令,有时甚至是不被微码支持的。经管我们不会预先知道何种噪声会导致何种芯片的何种错误,但它能相当简单地进行系统的搜索。

 

4.5.1 时钟噪声攻击(Clock glitches)

时钟信号的噪声攻击在目前是最简单的,且相当实用。实际应用中的噪声通常用来取代跳转条件并试验先前的测试指令。可以在安全密码问询处理时创建一个攻击窗口,简单预防执行这些指令。指令噪声也能用来扩大循环的时间。如,串口子程序在输出缓冲后再读更多的内容;或在密钥操作时减少循环次数来传一个弱的密码。

为获得噪声,时钟需要临时增加一个或大于半个周期,有些触发器在到达新状态之前就获得输入。时钟噪声通常针对处理器的指令流。对硬件执行安全保护的微控制器没有什么效果。实际中,仅使用时钟噪声来攻击微控制器或智能卡的软件程序接口。

 

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微控制器负责安全的启动模块代码

MC68HC05B6微控制器中,有掩模的启动代码以防止安全位置位后代码被上传出来。它会检查EEPROM中的第一个字节的内容,如果是0,看作是个安全熔丝已被编程,处理器就跳到循环的末端。

这类保护的破解是相对容易的。如处理器在循环里只执行一个指令,攻击时可用不同的时钟噪声导致处理器误操作。不需要小心地与时钟信号同步,只需要随机制造噪声就可在数次攻击内成功。插入噪声是相对容易的,无需使用外部发生器,瞬间短路晶振即可。当谐振器在不同的泛音上产生震荡会发出很多噪声。大部分情况下需要在确定的时钟周期内获得所需结果,在这种情况下用信号发生器更好。

使用时钟噪声来攻击某些微控制器也许是很困难的。例如德仪的MPS430微控制器在内部RC震荡器工作的启动模块。很难与内部时钟同步,攻击时很难估计精确的时间。一些智能卡在处理器指令流里会随机插入延迟,使得攻击更为困难。使用功耗分析会有帮助,但要求非常昂贵的设备来实时获得参考信号。


4.5.2 电源噪声攻击(Power glitches)

电源供应电压的波动会导致晶体管阈值电平的漂移。结果就是一些触发器在不同的时间里采样它们的输入,或读出错误的安全熔丝的状态。 通常用瞬间增加电源电压或电压跌落来制造噪声,一般在10个时钟周期内。电源噪声通常用在微控制器的程序接口上,能影响处理器运行或硬件安全电路。一般地,弱点比时钟噪声更难找到并利用,因为对于时域参数,振幅,上升/下降时间都是变量。

一个例子是上例提到的攻击MC68C05B6.如果在执行AND $0100指令时电源电压减少

50-70%,处理器从EEPROM中取出的值是FFh而不是实际的值。这会对应熔丝未加密状态。窍门是小心计算执行时间来减少电源电压,否则处理器会停止运行或进入复位状态。这种任务并不难,复位后目标指令在第一个一百周期内被执行。破解者可以使用矢量发生器或构建一个自己的噪声源。

另一个是微芯的老旧的PIC16F84。芯片的擦除操作会解除安全保护。但同时会芯片上程序和数据存储器中的内容。安全保护电路在硬件设计上是在安全熔丝复位之前擦掉存储器。但我们发现在芯片擦除操作时电源电压几微秒内增加到大约10V,会中断存储器擦除操作,但安全熔丝正常完成复位,这使得有可能读出存储器里的内容。如此高压需要谨慎使用,如果时间过长会损伤芯片。新版本的PIC16F84A增加了防欠压和过压攻击的能力。如果电源电压低于3V或6V,通过编程接口的任意修改存储器的操作会被立即中断。

 不是一直需要电源噪声超过电源电压范围的规格。例如,PIC18F84A微控制器,保护机制可以阻止在芯片擦除操作开始后使用大于50mV的噪声。那会导致中止程序存储器的擦除操作但不会擦掉熔丝。

上述例子表明噪声攻击时无需特殊工具就有很好的效果。智能卡里有时钟监控电路但极少微控制器有。

 

4.6 数据保持能力分析(Data remanence)

 处理器一般会把密钥保存在静态RAM里,如果元器件被篡改就会掉电,RAM内容丢失,从而保护密钥不被窃取。众所周知的是在低于零下20度时,SRAM里的内容会“冰冻”。很多元器件把温度低于这个阈值视为发生篡改事件。我们做了一些实验来确定现代SRAM数据保持能力与温度的关系。我们的实验表明传统的思维不再有效。即使在高温下,数据保持能力也是个问题。数据保持能力不仅仅对SRAM有影响,对DRAM, UV EPROM, EEPROM和闪存也有影响。结果是,仍然可以从已擦除的存储器中获得一些信息。这会给安全设备带来很多问题。


4.6.1 低温下SRAM的数据保持能

 安全工程师都很关注断电后SRAM器件能保持数据的时间。原因如下:很多产品使用密钥或类似的方法进行加密和别的安全相关的计算,需要不能被读出或改变。最普遍的解决方法是把安全密钥放在带篡改传感器的易失存储器中。一旦检测到发生篡改,易失传感器会掉电或短路到地。但如果数据保留时间大于破解者打开元器件并对存储器上电的时间,那保护机制就被摧毁了。

 在二十世纪八十年代,发现低温能将SRAM的数据保存时间增加到几秒甚至几分钟。对于那个时候的元器件,发现零下20度就可以增加数据保存时间,并且会随着温度的降低而增加保持的时间。有些就增加了温度传感器,温度低于零下20度就触发篡改事件,立即清零存储器。本次试验是重复这个工作,察看2000年后的产品是否也有此特性。

另一个需要关注的是即使部分内容已被破坏,安全信息也能被复原。假设破解者获得了

n=128位密钥中的m=115位,也就是90%的信息。他可以通过搜n!/(m!(n-m)!=128!/(115!13!)=2.12*1017~258个可能的密钥。通过1万台电脑,每台每秒进行10亿次搜索密钥的操作,破解者只需6个小时就能搜遍所有密钥。如果只有80%的信息,也就是知道128位密钥中的103位,那就有2.51*1026 ~288种可能。几乎增大了一百倍,破解者要花百万年来搜索密钥,故认为均匀的128位密钥不能被恢复。

 我们做了一块特殊的测试板来测试SRAM芯片。所有信号通过4MHz的PIC16F877来控制,微控制器通过RS232接口与计算机相连,进行信息的传输。SRAM芯片的电源供应由CMOS开关芯片MAX314来控制。同时有液晶显示器和两个按钮来手动控制设备。为方便芯片的插拔,板上有个锁紧座。SRAM芯片放在冷藏室内,通过扁平电缆来控制。

图4-7 测试板的外观

 

 我们使用LM135H来监控温度,它的输出电压与温度成正比,系数为10mV/K。使用普通的数字万用表就能读出温度值。

 每个SRAM芯片都在两种条件下测试:一种是断电后电源脚短路到地,另一种是引脚悬空。每个芯片都要在存储器内容全1和全0状态下测试。

八个不同的SRAM芯片在不同的温度下进行测试。芯片都是购买自半导体分销商。包括Dallas DS2064-200, GoldStar GM76C88AL-15, Hyundai HY6264AP-10LL and HY62256BLP-70, NEC D4364C-15 and D4364C-15L, Samsung K6T0808C1D-DB70, Toshiba TC5564APL-15。

我们也测量了电源的电流,待机模式都是在室温测得的。因为电流很小,不能直接用数字万用表测量。使用了一个放大100倍的运放,测出的数据如表格。我们定义数据保持时间为至少有80%的存储器内容还存在的时间。

m

 图4-8 室温下,不同的SRAM芯片的功耗和数据保持时间


可以看到一个重要的现象:芯片的功耗越小,它的数据保持时间就越长。电源脚连到地的数据保存时间都比悬空的要短。一旦SRAM芯片开始丢失信息,就会很快完全丢失。

 通过比较两种芯片NEC4364C-15和NEC4364C-15L,后一种是低电压版,可以看出低电压版在任何温度下都有更长的保持时间。相反的情形出现于HY6264A-10LL和HY62256BL-70。前面那个是超低电压版。尽管第二个是低电压版,但它却有更长的数据保持时间,这是因为它使用了更小的晶体管,功耗更小。

 图4-9 温度和数据保持时间的对应关系

 

 我们测试并记录了现代SRAM芯片样品的数据保持时间特性,这是个温度的函数。与常识相反,有好几种芯片在低于零下20度时的数据保持时间极为危险。对于保持80%数据一分钟的温度,不同器件的差异很大。有些需要冷却到零下50度,有些在室温下就可以了。另一个意想不到的结果是存储器保持时间不仅因不同类型的器件而不一样,即使是同一工厂制造的同一类型但系列不一样的器件的保持时间也不一样。大概是芯片制造厂的品质控制没有包括数据保持时间。同样工艺的芯片,低功耗的有更长的数据保持时间。因此,安全处理器需要在篡改时可靠擦除存储器,这在芯片使用前变得越发重要。因为这与时间相关,对于单个的元器件并不实用。但是,测量每个批次的功耗可以给出一个实用的参考。

 

4.6.2 非易失存储器的数据保持能力

与SRAM只有两种稳定的逻辑状态不一样,EPROM,EEPROM和闪存单元实际是存储模拟量到晶体管的浮栅电荷。浮栅电荷会改变单元晶体管的阈值电压,读单元的时候由敏感的放大器来检测。对于标准的5V EEPROM,编程后的阈值电压有3.5V的变化。某些现代的闪存有多电平检测能力。

我们评估了一些带不同存储器的微控制器,研究了残留数据的可能影响。设计了一个通过计算机并口来控制的特殊测试板。板上有两组可编程电源来产生VDD和VPP,一个带双向电平转换的编程接口,和一个微控制器芯片的插座。加到芯片上的电压精度为100微伏,信号的分辨率为1微秒。

 

 图4-10 用来进行评估微控制器内部存储器数据保持能力的测试板

 

第一个试验用的是PIC12C509微控制器。芯片被全写0,然后再不同时间的紫外线下曝光。放在测试板上用不同的电源电压来读出数据,估计存储器阵列中的每个单元的阈值电平。假定参考电压是接在电源线上的,那晶体管的阈值电平就是VTH=k VDD,通常的K接近于0.5。事实是无需测量精确的晶体管阈值电压,因为我们关注的是存储器和安全熔丝的相对擦除时

间。结果如下:

 图4-11 紫外线擦除后,在不同的电源电压下测试PIC12C509内存储器的内容

 图4-12 电擦除后,在不同的电源电压下测试PIC16F84A内存储器的内容

 

 从图上可以看出,存储器在在安全熔丝之前获得完全的擦除。但有些安全缺陷一直还在。尽管熔丝擦除后,直接读不出任何有用的东西。但电源噪声攻击还是有用的。例如,紫外线下曝光7分钟后,2.2V的VDD下可以无损地读出存储器的内容。但安全熔丝直到4.8V仍然有效。当破解者得出数据从存储器锁存到输出移位寄存器的精确时间,并且那时检查过安全熔丝的状态。它可能会通过降低电源电压至2V来锁存数据并增加电压到5V使安全熔丝无效来获得存储器的内容。

另一种窍门是恢复存储器的内容,即使在擦除安全熔丝和非破坏存储器内容之间没有交迭。例如,我们发现同样芯片的新样品在安全熔丝擦除前就开始扰乱存储器内容了。这样电源噪声不能用来恢复存储器中的信息。只能通过小心调节单元里的晶体管的阈值电压。小心控制存储器的编程时间可以注入特定数量的电荷到浮栅中。一般地,EPROM存储器的编程是通过外部信号来控制的,且所有的时序由编程单元来控制。这就使得破解者有机会通过注入电荷到浮栅中来改变阈值电平,在安全熔丝有效时可以读出存储器的内容。这种办法对于现代的EEPROM和闪存,事实上是不可用的:其一,片上硬件电路完全控制编程。其二,对EEPROM和闪存的编程一般使用的是F-N沟道效应。结果就是很难控制注入单元的精确电荷量。同样,温度和电源电压也很难影响控制电路。

下一个试验使用带闪存和EEPROM的PIC16F84A。使用了类似的测试次序,不同点是电擦除。可以看到存储器特性有很大不同。在收到芯片擦除命令后的65微秒存储器开始擦除,到75微秒擦除完毕。但是这个时间会随着温度或电源电压的变化而改变。例如,芯片加热到35度时,存储器在60微秒处开始擦除,70微秒的时候结束。安全熔丝需要至少125微秒来进行至少5次可靠的存储器擦除。减少电源电压会增加存储器和熔丝的擦除时间。所以比例实际上是一样的。需要注意到除非用硬件复位来中止,芯片擦除操作至少持续1毫秒。再加上快速的擦除时间,给人的印象是EEPROM和闪存在数据保持方面几乎没有问题,并能提供更好的安全保护。我们决定研究这点是否属实。

在较早的PIC微控制器的安全保护试验中,指出在擦除操作完成后,PIC46F84芯片的举止异常。因为该芯片已经由PIC16F84A代替,就用新的芯片来测试。 

我们试验确定正常擦除操作后多少信息可以读出。从图4-12中可以看出,在标准的10毫秒擦除周期后,存储器被完全擦除,读出的都是1。擦除后,单元里晶体管的阈值很低。不能用类似于UV EPROM的方法来测量,因为电源电压低于1.5V时芯片就不运行了。使用电源噪声技术,可以短暂的降低电源电压到1V---对于从存储器中读出信息并锁存倒内部缓冲器上已经足够了。但这仍然不足以改变敏感放大器的参考电压到足够低,来检测被擦除单元的阈值电压。为获得结果,我们在电源噪声上使用了另外一些窍门。存储器阵列内的所有浮栅晶体管的阈值电压被临时改变,使得有可能测量已擦除单元的接近于0V的阈值电压。通过精确控制存储器的擦除操作,使得衬底和控制栅极被预充电并在隧道效应发生之前中止操作。结果,过剩的电子被留在浮栅下的衬底,并改变晶体管的阈值电压。捕获的多余电子再结合过程需约1秒,对于读取整个存储器已经够了。为评估存储器阵列中的每个晶体管的阈值电压,可以用带电源噪声的不同电压组合来重复这个过程。

将上述测试方法用在不同的已编程和已擦除芯片,得到存储器的阈值电压与不同因素的关系图,如擦除次数和存储器地址。也能看出,即使擦除一百次,电子也没有完全从浮栅中离开,这使得有可能获取存储器中的内容。通过测量样品的100次编程/擦除周期后,除去会发生阈值电压漂移的原始单元。同时,存储器内信息的分析和获取是复杂的,因为存储器单元之间的阈值电压差比它自己的要大得多。实际上避免这种问题的方法是用同样的单元作参考,在芯片进行额外擦除操作之后,比较测量到的阈值电平。在PIC16F84A的EEPROM里也获得了类似的结果。唯一的区别是十次擦除操作之后的阈值电压非常接近于全擦除的单元,如果擦除操作超过十次,会使得几乎不可能从中恢复出信息。

 

 图4-13 PIC16F84A中存储器单元的阈值电压与擦除次数的变化关系

m

  图4-14 前后两次擦除对PIC16F84A的存储器器单元阈值电压的影响

 

 在下一个测试中,在擦除操作之前把芯片都写0,结果是不能区别已编程和未编程的单元。这意味着在擦除操作前对存储单元进行预编程是个很好的增强片上存储器的方法。

不幸的是,从已擦除存储器中获取信息的技术只能在极少数带EEPROM/闪存的芯片上使用。第一,有些存储器,如德仪的MSP430有片上的内部稳压电路。电源电压从1.8V3.6V不会影响到从部分擦除单元的读操作。很多微控制器在芯片复位或重新进入编程模式会完全复位并释放存储器控制电路。但是,如果存储器的内容没有完全消失,那会导致一个严重的问题。安全系统都是假设基于在一个存储器擦除周期后信息是不可恢复的。如果非侵入式攻击不能凑效,侵入式攻击是有效的。如:存储器的控制电路可以用FIB来修改,可以直接修改参考电压,电流源或控制栅极电压。

最后,有些芯片在对存储器编程之前会进行擦除操作。这使得几乎不可能从已擦除的存储器中获得任何有用信息。一些微控制器的安全保护熔丝设计不正确,熔丝比存储器更早擦除。如果芯片擦除操作被过早的中止,片上存储器内的信息就可以正常的被读出。爱泰梅尔的AT89C51微控制器就是一个例子。当这个缺陷在九十年代后期众所周知后,爱泰梅尔重新设计了芯片的版图并增强了防攻击的能力。

(译者注:IBM已发现将铌酸锂晶体放在需要检测的特征点上,铌酸锂的折射率随着所加电场的变化而变化,可以知晓金属线的逻辑状态。当采用紫外线激光照射晶体时,可以确定下方金属的电势。这种方法可以读取5V@25MHz的信号。由sandia实验室研究的方法:使用对硅材料透明的红外激光,通过照射所需的晶体管,诱导出受逻辑状态影响的光电流,从而确定晶体管的状态。)

 

第五章

 

侵入式攻击


 这种攻击需要直接接触元器件的内部。如果是个安全模块或看门狗,就需要打开它,然后读芯片的存储器。对于智能卡或微控制器,需要打开封装后,用聚焦离子束或激光除去钝化层,用以接触深埋在芯片钝化层下的内部连线。这种攻击需要良好的装备和经验丰富的破解者。同时,随着特征尺寸的减小和器件复杂度的提高,侵入式攻击的开销越来越昂贵。

某些操作如打开封装和化学腐蚀,几乎人人都可以做,只需很小的投资和有限的知识即可。同时, 如用光学方法读取旧式的掩模ROM,或对使用两层金属,1微米线宽的芯片进行反向工程,是很容易成功的。

通常的侵入式攻击用来作为了解芯片功能的手段,然后由此研究更廉价和快速的非侵入式攻击方法。

 

5.1 样品的准备

 侵入式攻击开始于部分或全部除去芯片的封装,以暴露硅晶粒。总共有几种方法打开封装,取决于封装的类型和以后分析的需求。对于微控制器,通常使用部分打开封装的方式,那样器件就可以放在标准的烧写器上,并可以测试。有些器件需要保持它们的电性能,不能被打开封装。在这种情况下,芯片的晶粒需要使用焊接机器将晶粒焊在芯片载带上,通过金线或铝线连到晶粒的焊盘。与晶粒的连接也可以用探针站的微探针保持接触。

图5-1 左侧是焊线机的外观,右侧是将一个智能卡芯片焊在PCB上

 

为了能在FIB或SEM下工作,芯片表面需要涂一层薄的金层使之导电,否则会很快积累电子,图像会一团漆黑。

 

5.1.1 打开封装(Decapsulation)

打开芯片的封装是个复杂的过程,需要很多经验,这是个共识。(译者注:本章节操作时使用到强腐蚀的化学物品,对人身安全极具威胁,故不予翻译。

译者曾在PSG里做过一段时间的FA,当时只要打开自来水的开关,就会闻到一股酸味。当然,现在没有那种“特异功能”了。

市场上已出现一种表面呈灰白色的存储器芯片,封装材料的成份异于常见的黑色芯片。据说用原著中的配方打不开它的封装。)

 图5-2 使用电钻在塑封外壳上钻个浅坑

 图5-3 将强酸滴入浅坑,除去覆盖晶粒的塑料。

 图5-4 用超声波清洗打开封装的集成电路

 图5-5 从芯片的背面打开封装。左侧是过腐蚀,右侧是腐蚀结果良好。

 

图5-6 左侧是被打开封装的智能卡,右侧是完全腐蚀掉封装的芯片。

 

5.1.2 逆向处理(Deprocessing)

该过程与芯片制造的流程相反。(译者注:本章节操作时使用到强腐蚀的化学物品,对人身安全极具威胁,故不予翻译。)

 

图5-7 MC68HC705C9A芯片的原始表面(左)和腐蚀掉表面金属层(右)的图片

图5-8 PIC16F76芯片的原始表面(左)和腐蚀掉表面金属层(右)的图片

 

5.2 反向工程(Reverse engineering)

反向工程是用来理解半导体元器件的结构和功能的技术。对于ASIC,意味着可以获得关于所有晶体管和内部互联位置的信息。为了获得成功,需要具有集成电路设计方面的知识。芯片制造时的所有层次结构需要反向逐一剥离,并摄像以获取芯片的内部结构。最后,处理所有获得的信息,创建一张标准的网表文件用于进行模拟半导体器件。那是个冗长且耗时的过程,但有些公司将此作为标准的服务。

 当开始对智能卡和微控制器进行反向工程时,需要器件的结构和程序代码来理解器件是如何工作的。需要明白芯片的哪些地方与安全保护有关,如果存储器总线进行了加密,需要对硬件的响应进行反向工程。最后,获得内部存储器的内容,进行反汇编来理解器件的功能。

 对CPLD或FPGA进行反向工程稍有不同。即使攻破安全保护,并获得了器件的配置位流文件。也不得不花很多时间和精力来将它转换成逻辑方程式和简单的模块来进行稍后的模拟和分析。


5.2.1 使用光学图像来重建版图

 对于0.18微米以下特征尺寸的硅芯片进行反向工程,带CCD摄像头的光学显微镜是个重要的工具,用它来获取高分辨率的芯片表面图像。不是每一种显微镜都可以的。因为光线不能透过芯片,显微镜需要使用反射光源。图像要清晰,没有几何失真和色彩异常,否则很难进行图片对接。 

 标准的100X物镜(NA=0.9)的实用最大分辨率大约是0.3微米。为了获得更高的光学孔径,可以使用浸水物镜和浸油物镜,对于100X的物镜,最大分辨率可以达到0.2微米。另一种增加分辨率的方法是使用更短的波长,使用360纳米的近紫外线,分辨率可以提高到0.18微米,这需要特殊的CCD镜头。

 高分辨率的显微镜的主要缺点是物镜和样品之间的有效距离太短,特别是在高放大倍数下。结果导致不能观察封装被部分打开的芯片,需要芯片的封装全部剥掉。使用长工作距离镜头的显微镜可以解决这个问题,但分辨率很低。

 另一个问题是高分辨率物镜的焦点很短,这使得焦点外的平面看上去很模糊,降低了图像的质量。在多层芯片中需要倍加注意,因为顶层到底层的距离大于1微米。共焦显微系统减少了这种影响,所有焦点外的平面呈黑色或显示不同的颜色。这样的系统很昂贵,特别是带激光扫描的,只有相对较大的实验室才可能装备。

重建版图需要芯片内部所有层的图像进行整合。通常使用电动工作台来获取图像,用特殊的软件来整合所有图像。

通常,特征尺寸等于或低于0.13微米的半导体芯片,需要使用SEM来获取图像,SEM的分辨率可以达到10纳米。

(译者注:每次从硅芯片上腐蚀掉一层,并进行照相,然后利用肖特基效应显示N掺杂区和P掺杂区。原理是将一薄层金或钯沉积到硅表面以形成二极管,这些二极管可以在电子束作用下被观察到。芯片的各层图像经计算机处理,从而确定芯片基本参数和掩模版,电路图以及库单元列表。这种方法曾被成功用于英特尔80386处理器的反向工程。)

 

5.2.2 获取存储器内的信息

直接用光学的方法获取存储器内的信息只对确定类的掩模ROM有效。如在MC68HC705P6A微控制器中,使用1.2微米技术的带有效层编程的NOR掩模ROM,可以在500X显微镜下读出。

  图5-9 MC68HC705P6A内部掩模ROM的照片 腐蚀后的PIC16CR57A内部掩模ROM的照片

 图5-10 腐蚀前和腐蚀后的MC68HC705C9A芯片内部的掩模ROM照片

图5-11 腐蚀前和腐蚀后的uPD78F9116芯片内部的掩模ROM照片

 

5.3 微探测技术(Microprobing)

 侵入式攻击的最重要的工具是微探针站。有五大部分:显微镜,工作台,元器件测试座,显微镜操作器和探针。通常显微镜有三到四个物镜来调节不同的放大倍数和聚焦深度。探针可以用来捕获或注入信号,如果直连到示波器,通常就有较大的电容和较低的阻抗。这样就不适合探测芯片内部的信号,除非用在带缓冲的总线上。有源探头就可以连到焊盘上,它有很大的带宽,较低的电容和较高的阻抗。对于大部分应用,1微米精度的工作台已经足够了。

 图5-12 探针站的照片

通常为获得如存储器内容或密钥之类的信息,微探针放在数据总线上。同时观察整个总线是很困难的,有多种方法可以克服它。如存储器的读操作要重复多次,2-4个探针用来观察信号来组合成完整的总线波形。从智能卡中获取信息更困难,它们的软件通常不提供任何访问内部存储器的接口。为获得成功,我们就复用处理器的部分组件如地址计数器或指令解码器来访问所有的存储器单元。程序计数器在每个指令周期都在自动增加,用来读下一个地址。这极为适合存储器扫描。我们所要做的只是防止处理器执行跳转,引用或返回指令,不能让这些指令弄乱程序计数器。对指令解码器或程序计数器进行微小的修改就能达到这种效果。这不是个轻松的活,通常需要部分反向工程处理器的电路。对于现代带顶层网格保护和混合逻辑设计的智能卡更具挑战。

 

5.3.1 激光切割器(Laser cutter)

在硅芯片上,顶层铝互联线被钝化层覆盖着。在探针可靠接触前要除去钝化层。最方便和最容易使用的方法是使用激光切割系统。

 图5-13 安装在显微镜上的激光切割器

 

通常,紫外线激光用来除去聚酰亚胺(Polyimide)或别的有机层,这些经常出现在钝化层顶上。紫外线激光也可用来切割钝化层,绿激光用来切割金属线。红外激光用于切割顶层金属,形成通孔来访问第二层的金属层。

 图5-14 紫外线线激光切掉钝化层后绿激光切掉金属线的照片

 

图5-15 用红外线激光切掉表面层的金属,露出下一层的金属

 

5.3.2 FIB工作站(Focused Ion Beam workstation)

对于0.5微米及以下的半导体器件需要更有效的工具来建立与内部线路的连接。这种工具就是FIB工作站。不仅可以制作测试点,也可用来成像和修复。在失效分析中,用来准备切面和缺陷分析。拥有极好的空间分辨率和精度,足以在深亚微米技术的晶粒上制作探测点。

FIB工作站包括一个真空室,与SEM不同的是内有一个电子枪,镓离子从液态阴极出发加速并聚焦成直径为5-10纳米的束流。通过增强离子束的电流,芯片材料可以被除去。通过注入碘之类的蒸汽可以有更好的腐蚀率。可以制作访问底部金属层的窗口而不损伤附近结构。通过注入铂基的有机气体,可以制造新的连接。使用别的化学成分,甚至是绝缘物,可以沉积到底部金属到表面的连接,而不用接触任何覆盖层。

 

 

图5-16 用FIB在芯片表面打孔 

 

图5-17 用FIB切割金属线

  

图5-18 用FIB制作测试点,右侧是光学照片。

 

FIB可以在芯片表面以0.1微米的精度进行移动,而不论芯片表面结构或芯片的平整度。使用红外线成像,可以从芯片的背面定位某个晶体管,

 

5.4 修改芯片

 并非一直需要使用微探测技术来从芯片的内部总线获取信息。有时侯,特别是对于微控制器,可以通过切割掉内部的金属互连线或破坏掉控制电路来屏蔽掉安全保护。FIB很容易将传输安全保护状态的金属线连到地上或电源上。微探针也能做到,但对于埋在芯片内部的金属线就无能为力了。

 

图5-19 切掉PIC12C508A的某根金属线来屏蔽掉安全保护系统。 

 

图5-20 用激光切割器破坏掉PIC16F628的熔丝控制电路来屏蔽掉安全保护系统

 

芯片修改至少需要对芯片进行反向工程来找到可以破解的点,这意味着只有装备精良且训练有素的破解者才有可能获得成功。



第六章

 

半侵入式攻击

 

 这是一种新的攻击类型,在2002年我们提出光学缺陷注入攻击时引入这个概念。半侵入式攻击与侵入式一样,需要打开芯片的封装来访问芯片表面。但芯片的钝化层保持完整---半侵入式攻击不需要与金属表面进行电接触,这样对硅就没有机械损伤。

 随着特征尺寸的缩小和元器件复杂性的增加,对侵入式攻击的要求越来越高,开销也越大。半侵入式攻击不需要昂贵的工具,且能在较短的时间内得到结果,使之变得越来越有吸引力。同时,对所有晶体管或部分区域的晶体管进行半侵入式攻击,这对现代小特征尺寸的芯片比较适合。

 半侵入式攻击不是全新的。通常对裸芯片最容易进行电磁分析;打开封装后,在紫外线下曝光老旧的基于EPROM的微控制器存储器保护位,这些是很久以前的故事了。半侵入式攻击用到以下手段:紫外线,X光,激光,电磁场和热量。可以单独用其中一种或几种合用。

 半侵入式攻击最早用于失效分析。这包括背面成像和对触发器进行单探针探测,但现代的深亚微米元器件不能只靠这些方法。在后期测试时使用半侵入式方法来分析硬件安全性,可以避免一些安全问题,并且比侵入式方法节省时间和金钱。

 使用廉价而简单的设备就可以进行快速而强大的攻击。这些攻击使用计算机控制的工作站就很容易进行自动操作,可以在几个小时内快速完成,而侵入式则需要数天至数周。


6.1 紫外线攻击(UV attacks)

 这几乎是最古老的攻击方式,上个世纪七十年代中期就用来攻击微控制器了。在以前被视为侵入式攻击,但它仅仅需要打开芯片的封装,当然属于半侵入式攻击。它对很多OTP和UV EPROM微控制器有效,那些微控制器在设计上只能抵挡廉价的非侵入式攻击。

 紫外线攻击可以分成两步,找到熔丝,用紫外线复位到未保护状态。通常安全熔丝设计成比程序存储器擦除得要晚,紫外线不能覆盖整个芯片。

 

6.1.1 定位安全熔丝

安全熔丝可以从物理上与主存储器分开,也可嵌入到存储器阵列。

有多种方法可以用来找到熔丝的精确位置。通用的,但耗时耗钱的方法是将整个芯片反向工程。局部反向工程就能省很多时间。例如,用于存储器编程用的高压一般是由外部引脚供应的,可以借此跟踪到所有的存储器单元,包括熔丝。在显微镜下很容易跟踪到低至0.8微米技术制造的芯片的熔丝。线宽更低的,尤其是平面工艺制造的,对其进行光学分析是不可行的,需要反向处理芯片来观察内部结构。

另一种是损伤芯片的不同部分并观察结果。这样处理需要很长时间和很多样品才能成功。

如果熔丝距离存储器很近,或者是嵌入的。对其定位将很困难。同时,用紫外线来擦除熔丝也一样。测试的顺序很简单,芯片的半个表面用不透光的材料挡住,然后将芯片置于紫外线下照射一段时间,如果保护被解除了,那熔丝就在未覆盖部分。否则,交换覆盖和未覆盖区域,对每部分减半后重复进行就可以了。

这种攻击可以在约15次反复后,以10-20微米的精确度定位熔丝,通常耗时不超过3小时。对于熔丝嵌入在主存储器中的情况,需要更高的精确度,要用到紫外线激光或光阻掩模。但有个更有效更简单的方法是用记号笔将不需要紫外线照射的地方涂抹覆盖。别的半侵入式攻击也可以用来寻找熔丝。如激光扫描技术可以用来直接读晶体管的状态。扫描同样的芯片两次,一次是安全位置位,另一次是复位。将扫描结果相比较就可以揭示修改的位置。然后就可以光学检查该区域来标出熔丝。

另一种是用光学缺陷注入来改变芯片内部不同晶体管的状态,寻找影响熔丝状态的位置。

 

6.1.2 定点攻击(Toothpick attacks)

术语“定点攻击”首次出现在赛灵思(Xilinx)的CPLD白皮书上。与我们最近提出的光学缺陷注入攻击类似,与别的未知的廉价攻击一样,越来越常用。为了达到更高的精确度,我们将定点攻击引入到紫外线攻击中。

 图6-1 紫外线定点攻击的工具

 图6-2 激光切除了所涂抹的一部分以暴露所需的EPROM。500X

 

用普通的记号笔涂抹芯片表面后,用木质牙签刮掉所需的区域。数支不同颜色的记号笔在同一存储器芯片上进行测试。测量干净和涂抹的芯片在擦除时间上的差异。结果在列表中

  m

图6-3 紫外线在不同颜色水笔中的透光率

 

红色记号笔是最佳的。芯片表面可以看到精确的位置,同时提供了适当的衰减。擦掉干的印记对下面的钝化层没有任何损伤。有些笔墨轻微导电,小心使用它们,避免涂到焊线区。

处理过程不需要很有经验,可以很快学会,这些窍门有助于快速找到安全熔丝的位置。油墨在每个擦除/涂抹周期后用溶剂除去。

在显微镜下刮擦过的表面几乎不可能达到10微米以下的定位精度。但对于那些安全熔丝远离主存储器的微处理器已经足够了。为了达到更好的效果,涂层可以用激光来切割。紫外线激光最理想了,绿色激光在黑和红的涂层上也能很好工作。 

 所以,用很廉价的工具装备的破解者也能用紫外线成功攻击芯片上所需的区域。但是当今的很多微控制器制造商使用了多种保护技术来抵挡紫外线攻击。这些技术包括在芯片上覆盖一层顶层金属来完全阻挡紫外线,使用不能被紫外线复位的特殊设计单元,以及使用紫外线传感器来防止芯片暴露在紫外线下工作。

 

6.1.3 EEPROM和闪存的问题

如EPROM一样,大部分浮栅类型的存储器也对紫外线攻击敏感。同时,设计者有更多的自由来选择不同的保护方式来阻止攻击。EEPROM和闪存可以双向改变它们的状态,最简单的是用某个单元的擦除状态来指示报警,一个已编程状态来相应屏蔽掉安全特性。这个做法对控制逻辑的修改很少。在很多制造商的闪存型微控制器中广泛使用。紫外线有五种可能的方法来影响浮栅存储单元: 

●  把存储器单元从已编程态改为擦除状态,如果擦除状态对应屏蔽安全特性就会影响安全熔丝。

●  把存储器单元从擦除状态改为已编程态,如果已编程态对应屏蔽安全特性就会影响安全熔丝。

●  把存储器单元从擦除状态或已编程态改为中间态,如果单元控制电路的参考电压在电源供应电压之上时有可能影响安全特性。

●  使存储器单元的晶体管阈值电压漂移出操作电平的范围,这会锁掉单元。这对防紫外线攻击有利,但破解者也可用此定位熔丝。

●  存储器单元的晶体管阈值电压没有漂移到改变状态的程度。

定位攻击能用此来锁定熔丝位置,即使用紫外线也不能将其复位。除非熔丝上有一层金属保护或对紫外线不敏感。尽管如此,缺陷注入攻击仍然可以用来改变熔丝状态,或使用侵入式攻击来永久改变它。

 

6.2 背面成像技术(Backside imaging techniques) 

半导体分析的第一步就是在显微镜下进行目检。晶体管的特征尺寸每年都在缩小,芯片表面的结构越来越难观察。使用0.8微米以上的技术,很容易识别出微控制器的主要部分---ROM;EEPROM;SRAM;CPU以及CPU的指令解码器和寄存器。0.5-0.35微米工艺的芯片,就很难区别ROM;SRAM和闪存。低于0.25微米的芯片,几乎看不出什么。这不仅仅是特征尺寸小,而且芯片表面有多层金属。另外,平面工艺用来填充金属层和金属焊线区的空白区域,这会阻止光线通过。

 6-4 光的波长与硅的透光率          红外灯(左)和普通灯(右)

 

一种方法是使用红外线,不论反射还是直射,从芯片背面观察。硅几乎对波长大于1.1微米的光线透明。但是一些现代芯片使用了高掺杂的硅晶圆(〉1.1019cm-3),对红外线就不透明了。需要更强的光源或灵敏度更高的红外摄像头。

 图6-5 0.35um技术的MSP430F112微控制器的标准光学照片(左)和反射光背面成像照片(右)

 

 

图6-6 透射光拍照示意图,右侧是MSP430F112的透射照片。

 

图像用直射光有很好的效果,不需要很强的光源,甚至标准的低成本单色CCD镜头就可以用来成像。一块空白的硅晶圆用来滤除正常的光线。

反射光有更好的对比度,它不需要通过多层金属。在0.5微米及以下的技术中,可以比正常图片得到更多的信息。需要注意的是从背面获得的图像是正常图像的镜像,实际使用时可以把芯片水平翻转一下。

背面成像的另一个用处就是获取ROM的内容。在正面,晶体管被顶层金属所遮蔽,通过背面就可以很清楚地看到。例如无需使用类似化学腐蚀来检查掩模ROM内容的侵入式攻击,直接观察背面就可以了,而这是种半侵入式技术。这种方法因光学系统的最大解析度而限制了近红外(对于硅是1-1.1微米)区域的分辨率低于0.6微米。

 

图6-7 1.0um技术的MC68HC705P6A微控制器内掩模ROM的标准光学照片(左)和透射光背面成像照片(右)

 

背面成像广泛用于失效分析中,从定位失效晶体管或FIB后观察内部互联。需要说明的是这样的系统成本极高,只有相关的大公司可能提供。但在简陋的实验室里用近红外显微镜和红外敏感的镜头也能做到,就像例子中那样。

 

6.3 主动光探测技术(Active photon probing)

发明半导体晶体管的时候,就发现它对离子辐射比先前使用的电子管(真空管)更敏感。包括核爆炸,同位素辐射,X光和宇宙射线。在六十年代中期,在脉冲激光实验时,发现连续光会导致一些类似现象。激光就被用来模拟离子辐射对半导体的各种效应。

科技获得了惊人的发展,昂贵的基于惰性气体的激光和固态激光被低成本的半导体激光所代替。结果是激光技术走出实验室进入消费电子领域。

如果光子的能量超过半导体的能隙带宽(>1.1eV或<1100nm),激光就可以将半导体集成电路的特定区域离子化。波长为1.06微米的激光(光子能量1.17eV)对于硅有约700微米的穿透深度并有良好的空间离子化均匀度。但是,因为有几微米的散射,聚焦能力受限,并且对于现代半导体元器件来说,不够精确。但是,当从红外移到可见光区域时,光子的吸收能力显著增加,可以使用更为细小的红或绿激光,意味着达到同样离子化能力所需的能量更少。

 

图6-8 激光切割器的外观

 

在CMOS元器件中,有个危险是电路被锁定,会导致开路而永久损坏。对CMOS结构使用辐射时必须考虑到这些。

在主动光子探测中,一束扫描光子束作用到集成电路上。光子的能量大于硅的能带,在半导体中产生电子空穴对。低能量的光子能持续作用到PN结,但只发生热效应,那比光电效应弱得多。

失效分析时使用到多种激光扫描技术。通常使用激光扫描显微镜。尽管这些显微镜在快速扫描方面是个很大的优势,一秒钟可以扫描一帧。但对于小型的研发实验室来讲,它太贵了。因此,在实验中,我们使用便宜些但速度也慢些的激光源,样品在XY电动台上移动。激光器附在探针站显微镜的摄像口上,带芯片的测试座安放在XY电动台上。尽管扫描一个100*100微米的区域需要大约15分钟,这仍然适合做研究。

 

6.3.1 激光扫描技术(Laser scanning techniques)

 在硬件分析中有两种主要激光扫描技术。一种是光束诱导电流(OBIC:Optical Beam Induced Current)用在没有偏压的芯片上,寻找表面激活的掺杂区域。另一种是光束诱导电压变化(LIVA:light induced voltage alteration),用于正在运行中的芯片。在OBIC中,光电流直接用来产生图像。这样,被分析芯片的电源脚可以连接一个电流放大器。它的值可以通过转接卡纪录到计算机里。对于LIVA,光束扫描恒流供电的集成电路表面,监控电压变化就可以得到图像。

 

图6-9 PICF84A安全熔丝区域的标准光学照片(左)和激光扫描照片(右)

 

OBIC技术能被用来附加在标准的光学图像上,就可以定位芯片内的激活区域。我们用MATLAB软件画了个扫描后的结果图像。对照光学图像,激光可以对准芯片正面或背面的有效区域。从正面扫描,可以用红色点状激光(波长约650纳米)作光源,扫描芯片内的安全熔丝区域后的结果。背面扫描用波长为1065纳米的红外激光,从背面扫描芯片的同样区域。从照片可以看出,与正面扫描相比,背面扫描效果更好,因为没有来阻挡激光束的金属层。激光图像能用于掩模ROM的信息提取上,下图是使用类似的方法获的红外背景图像。

 

图6-10 PICF84Aa安全熔丝区域的背面激光成像照片

图6-11 MC68HC705P6A微控制器内掩模ROM的背面激光成像照片

 

6.3.2 读出晶体管的逻辑状态

在侵入式攻击中,传统的读出半导体存储器中数据的方法是使用机械探针,通常用在处理器总线上。这样的攻击是使用微探针与内部电路产生直接的电接触。该方法困难多多,从缩小特征尺寸到使用片上存储器的硬件访问电路都有困难。我们就研究了用半侵入式技术来非破坏地读出存储器单元的状态。以下描述能提取出CMOS SRAM里的内容但无法广泛应用。 

在显微镜下使用红激光聚焦到芯片表面来分析SRAM。650nm波长红激光的能量大于硅的能带,它会将芯片内部的有效区域离子化。如果光子到达PN结附近的区域,因光电效应而会产生光电流。当光子进入P或N区域,会注入自由载流子而降低通道的电阻。

这就使得我们可以读出存储器单元的状态,显而易见的,增大电流就可以使通道导通,几乎可以忽略。将激光束指向合适的晶体管,就能区别两种可能的状态。

在第一次试验中,通过测量激光扫描芯片表面产生光电流来建了一份激活区域的示意图。芯片放在精度0.1微米的电动台上。扫描结果如图。可见激活区域产生的大电流,但大部分被金属层覆盖,激光不能穿透,所以那些区域不能产生电流。我们用这张图片来比较从已上电芯片所获得的结果。

下一个实验是用正在运行的芯片。芯片已编程,可以载入任意值到RAM中,然后停止芯片的运行。扫描载入随机数据的存储器单元结果如图。可以看到存储器单元有不同的状态,内容为1的单元顶层是亮的,内容为0的则是底层亮的。

图6-12 激光扫描未上电(左)和已上电(右)的存储器照片

 

我们的实验结果类似于Sandia Labs发布的结果,但有很大不同。我们从顶层扫描芯片来代替发出通过芯片的恒定电流,我们使用恒压供电,像标准的功耗分析一样来测量电流。

如果重要数据正好在一个时钟周期内在一个位置清楚地出现,那破解者就可以推导出,并冻结这个状态。(可以是物理的,如低温;或用别的方法如停止时钟),那破解者就有可能是用光学的或电磁探测技术读出数据。技能和设备方面的投入明显要比侵入式攻击少很多。

 

6.4 缺陷注入攻击(Fault injection attacks)

 这是个新的攻击方法。照射目标晶体管来影响它的状态,因此产生一个短暂的错误。这种攻击很实用,不需要昂贵的激光器。使用从摄影店购买的二手闪光灯和激光指示器即可。为说明这种攻击的能力,我们研究了在显微镜下置位或复位任意SRAM位。如果没有反制措施,光学探测也能在密钥计算或协议里产生错误,并中断处理器的控制流程。它扩展了现有的噪声和缺陷分析技术。这种攻击会给工业上带来大问题,类似于上世纪九十年代中期的微探测攻击和后期的功耗分析攻击。

 

6.4.1 改变SRAM的内容

尽管有多种方法使用脉冲激光来模拟离子辐射,我们发现没有公开的信息使用它们来控制或改变集成电路的功能。我们决定使用强光源作用半导体芯片,来确定是否会改变存储器单元的状态,以及难易程度。

 

 图6-13 单个SRAM单元的结构(左)和版图(右)

 

第一次试验的目标是SRAM。标准的六管SRAM结构,由两对P和N型的晶体管构成一个触发器,另外两个N型晶体管用来读它的状态和写入新数据。晶体管VT1和VT2构成反向器,其它相似部分一起,构成由晶体管VT3和VT6控制的触发器。

如果晶体管VT1能被外部因素短暂开路,那就会导致触发器改变状态。曝光晶体管VT4,单元的状态可以被改到相反状态。主要的困难是将聚焦离子辐射降到几平方微米并选定适当的强度。

使用PIC16F84来做实验,它有68个字节的片上SRAM。SRAM阵列的位置是在晶粒底部的中间。如图。

 

图6-14 PIC16F84的原始照片和打开封装后的照片,右侧为内部SRAM的照片。

 

因为预算有限,并且使用的激光表现不稳定,我们决定使用廉价的闪光灯。尽管闪光灯的发光度比脉冲激光低,但适当放大后可以达到离子化的等级。将闪光灯固定在视频端口上,放大倍数为1500X。

微控制器已被编程,可以上传或下载它的存储器内容。将整个存储器用恒定值填充,在闪光灯下曝光,然后读出结果,就可以检查那个单元的状态改变了。

通过带孔的铝箔遮蔽光源,光源的输出功率设在最大, 我们只能改变一个单元的状态。单元的最终状态取决于在闪光时暴露的面积。这几乎可以肯定用廉价的半侵入式攻击可以改变SRAM的内容。

最大放大倍数时的SRAM阵列如图6-15。聚焦后的光点如白圈所示,能把单元的状态从1改为0,如果状态是0的话就不会改变。聚焦光点到黑圈,单元的状态能从0改到1,或继续保持状态1。

 

图6-15 1500倍下的SRAM阵列照片 SRAM存储器阵列的数据位

 

从图中可知SRAM阵列被分成八个相同的块。通过曝光不同块里的单元,发现每个块对应信息平面的一位。位平面图如图6-16。

通过在闪光灯下曝光每个单元获得了整个存储器的图,左边对应块的底部。可以看出地址不是连续的,被分成了三组。

图6-16 SRAM存储器阵列中每个位块的物理地址

 

 这个实验表明反向工程中使用半侵入式攻击很容易就获得存储器的地址图。唯一的限制是闪光灯不能产生连续且单色的光,所以很难控制光点将照射的区域。这个问题可以用合适的激光来解决。

 良好设计的现代安全微控制器不容易被单色激光攻击,它们的保护状态取决于物理存储的多个位。但是,很多设计可以通过修改锁定读保护触发器的状态来破解。设计师需要确保单个晶体管的失效也不能破坏芯片的安全规则。

 对智能卡也可以进行类似的攻击。跳转指令冲突是个强大而通用的攻击点。破解者可以使用设置智能卡代码的分支条件来引向错误的方向。例如,减少阻塞密码循环的次数到一至二次,直接恢复密码。

 现有的高端防攻击技术,如顶层金属遮蔽和总线加密,会使得破解者使用这些技术变得更复杂,但这还不够。老练的破解者可以用红外线或X光来对付金属层的遮蔽,直接攻击寄存器就可以跳过总线加密。

 

6.4.2修改非易失存储器的内容

 EPROM, EEPROM和闪存单元对缺陷注入攻击更为敏感。这是因为流进浮栅的电流比流进SRAM单元的要小得多。

 首先假定芯片内有光传感器来防止打开封装,在我们研究过这个问题之后,可以用光注入缺陷到EEPROM存储器中。

安装在探针站显微镜里的20瓦灯泡足以翻转PIC16F84微控制器的安全熔丝状态。光圈全部打开,放大倍数设为1500倍时,光线能聚焦到安全熔丝区域而不影响主存储器。不需要修改现有的设备。将一个已编程,加密的且被打开封装的PIC16F84芯片放在显微镜下的测试座中,与通用烧写器相连。当通过显微镜的目镜定位到安全熔丝后,光功率切换到最大,就可以正常读出存储器的内容。

 从芯片背面进行同样的操作也获得了成功。一方面,从晶粒的背面不容易找到熔丝的位置。另一方面,可以使用机械方法从背面打开封装,这就避免使用强腐蚀的化学试剂。可以使用正面光学照片作参考来定位,或使用红外镜头来定位。

 尽管从卤素灯泡不能得到足够的1到1.1微米区域的红外线来直接从晶粒的背面来离子化晶体管的有效区域,但从硅衬底发出的大量电子空穴对大部分在互相复合前就落到有效区域里了。

 幸运的是,这种攻击不能对付现代低特征尺寸的芯片。顶层金属防止光线到达有效区域,平面化减少了氧化层的透明度,并加强了光的散射。高的掺杂浓度减少了光从背面的透射。更小的晶体管需要更大的辐射来进行开关。

 紫外线EPROM存储器单元对光攻击不太敏感,因为需要更大的电流来切换。但是,事实上闪光灯或通常的灯泡也能用来破解安全熔丝,仍然需要小心设计安全保护方法。例如,安全熔丝不应该放在远离主存储器的地方,这会导致攻击它们很容易。同时,光和辐射传感器可以用来检测离子辐射,在泄漏敏感信息之前就复位芯片。

 

6.5 软件模拟攻击(Modelling the attacks)

 为了研究有效的对策,了解攻击细节是很重要的。在光学缺陷注入和激光扫描攻击中,需要完全理解在硅芯片里发生的过程和原理。模拟这样的攻击受到很多限制。每一步都要解决复杂系统中的多个因素。要计算一束激光对整个芯片的影响是很困难的。但对于一小部分晶体管,是可以模拟的。在TCAD软件中,可以模拟离子辐射对半导体的影响。但这个软件太复杂,太昂贵了,我们使用另一种工具软件DIODE-2D.

 

6.5.1 模拟逻辑状态来读出数据

 如前面所提到的,使用激光扫描就可以读出晶体管的状态。如预想的那样,激光扫描到存储器中P和N型晶体管的源和漏极产生最大的光电流,不透明金属线则对应最低的光电流。扫描的结果明显可以看出SRAM单元中反向器开关状态的光电流大小。这个可以用来确定存储器单元当前的状态。

为解释结果并寻找更适合的扫描参数,用DIODE-2D演示激光脉冲加到反向器时的二维数学模型。模型结构的剖面如图6-17。

m

图6-17 CMOS反向器的剖面图

 

沟道的长度假定为1微米,激光辐射的强度为1.104W/cm2。别的参数,如掺杂浓度,P和N阱的深度,使用的是标准的1微米N型衬底CMOS技术的参数。

我们模拟了反向器在两种状态下,不同波长的激光对不同位置时与电源电流的关系。结果如图。

m

图6-18 不同波长下电源电流与激光扫描位置的关系

 

可以看出曝光关态的晶体管的电流比开态的要大很多。打开关态晶体管的通道所增加的总电流比轻微减少开态通道的电阻还要大。

另一个值得注意的是光电流与激光波长的关系。这会导致减少衬底的寄生光电流,短波长的光子几乎集中在表面。通过计算同一反向器的电源电流与激光波长之间的关系,发现短的波长更有效率。波长越短,0和1状态的电源电流的差就越大。实验也证明了这一点。用650纳米的激光,可以认出反向器不同状态的电源电流。但用805纳米的激光,差异接近于噪声水平。主要的噪声源是衬底的光电流,减少波长就可以降低它的影响。

m

 图6-19 CMOS反向器内PMOS和NMOS的不同逻辑状态的电源电流与不同波长激光的关系

 

模拟的结果确认了使用聚焦激光束可以读出反向器的状态。同时,也说明要选择合适波长的激光。

 

6.5.2 模拟缺陷注入攻击

如上所探讨的,聚焦激光束可以用来改变SRAM单元的状态。该流程可以用DIODE-2D软件模拟出来。

 

图6-20 CMOS反向器的剖面图

 

模型显示影响激光改变反向器状态的主要因素是辐射导致寄生电路的锁定效应。反向器的状态只在所需的激光强度低于内部寄生结构的阈值时才改变。激光焦点在接近晶体管通道区域时翻转是最佳的,但不能排除锁定效应,因为激光产生的电子空穴对会快速充满反向器,并引起内部所有PN结的电流增大。

 

 图6-21 11纳秒的激光脉冲加到0态反向器时的模拟结果

 

激光脉冲加到P型晶体管栅极上约10微米区域,如果输出电压比逻辑1的最小输入电压高就假定发生翻转,这对于正常的反向器阈值电压已经大很多了,但没有芯片内部的精确阈值电压信息。

 

 图6-22 CMOS反向器受0.35nJ和0.36nJ激光照射后输出电压的变化

 图6-23 CMOS器离子化时的等效电路

 

如同我们检查模拟结果那样,很大的面积会响应激光的能量,能充分翻转反向器而不导致锁定效应。这种差异对短波长的激光会更大。这是因为硅会吸收短波长的激光,这会导致晶体管栅极下电子空穴对数量的增加。一方面,它增强了通道的调制能力。另一方面,它减少了N型晶体管的电流,使得寄生结构发生翻转更困难。

 

 第七章

 

硬件安全分析

 

本章介绍如何使用先前章节的破解技术来评估MCU硬件的安全性能。对于半侵入式攻击:一方面它比非侵入式攻击更快得出结果;另一方面,它比侵入式攻击的开销更小。但不能认为这个方法对每个新的微控制器有效,特别是新技术制造出来的。那需要一种特别的方法。在实际上,不可能有一种通用的评估技术来进行硬件的安全分析。在这里只给出一些建议。

 

7.1 评估防紫外线攻击能力

紫外线攻击成功地用于不同制造商的许多代微控制器的破解。本节研究不同的微控制器是如何来防止此类攻击的。

二十年前,极少有人关注微控制器的防破解保护。那时,微控制器用掩模ROM和UV EPROM

来存储程序。基于EPROM的微控制器有个安全熔丝来阻止对存储器进行未经授权的访问。下面给出一些例子介绍微控制器的防紫外线攻击和评估防紫外线攻击的保护等级。

典型的没有任何防紫外线攻击保护措施的微控制器是PIC16C57和PIC12C509。安全熔丝是比较容易发现的,把芯片的不同区域放在紫外线下曝光10到15分钟再检查结果即可。因为安全熔丝离程序存储器比较远,把EPROM盖上不透光的材料,就很容易破解。把熔丝放在存储器边上,就很难找到它,但破解也是相对容易的。如在USB看门狗中常用的赛普拉斯CY7C63001A一样,一些熔丝的单元结构和主存储器非常类似,通过一张分辨率较高的芯片表面数字照片,仔细搜索与主存储器相同的图形,找到熔丝不是很难。尽管熔丝离存储器很近,也可以遮挡照向EPROM的紫外线。有制造商把安全熔丝放在主储存器中,使得有选择地擦除熔丝异常困难。

一旦微控制器制造商认识到它们的产品很容易被紫外线攻破,就开始行动起来。一些基于EPROM的微控制器对存储器进行加密。飞利浦的87C51微控制器有64字节的加密列表来加强熔丝的保护。即使安全熔丝被复位,程序存储器的值将列表中的相应字节XNOR后才被读出。在PIC16C61和PIC16C71中,当安全熔丝有效时,存储器的内容会被加密。加密方法是将存储器的高七位和低七位进行XNOR。即使加密方法很好,破解者可以用定点攻击(toothpick attacks) 来擦掉部分存储器,然后恢复存储器或加密列表的内容。对于旧的PIC微控制器,破解者不需要找到并复位安全熔丝,因为加密的内容可以用合适的烧写器读出。

 

图7-1左侧是原始的PIC16C622A熔丝区域照片右侧是经激光切除顶层金属的熔丝区域照片

 

基于EPROM的微控制器进一步发展就是在熔丝上覆盖一层不透紫外线的金属层。例如,大部分的14位和16位内核的PIC微控制器都这样做了。它不仅仅可以防止熔丝被复位,也使得很难找到熔丝。直到最近,引入缺陷注入攻击,才有两种实用的方法来破解这种保护。一种是激光切割或FIB处理进行反向工程来除掉顶层金属保护层。另一种是修改CPU并用微探针来窃听数据总线。两者都需要不菲的设备投资和训练有素的破解者。

当EEPROM开始用在微控制器中,就可以使用更多的保护功能。除了增加顶层金属,还使用反转存储器单元,这对紫外线更钝感。例如,爱泰梅尔Atmel的AT89C51微控制器,擦除熔丝相应的激活了它,使得安全熔丝不能被复位。但是,如紫外线可以把熔丝丛非安全态转到安全态,这个特性可以用来寻找熔丝。为了避免这点,一些微控制器使用双反转熔丝和顶层金属保护,例如PIC16F628和PIC16F876。

 

7.2 使用半侵入式攻击对不同的安全特性进行分析

很多制造商开始使用防紫外线攻击保护。很难定位安全熔丝并破解之。全反向工程需要巨额的开支。但是,新的半侵入式攻击,如激光扫描和缺陷注入攻击可以帮助我们在适当的时间内定位熔丝。

 

7.2.1 使用激光扫描技术进行分析

激光扫描一个已上电的芯片有助于找到不是嵌入在主存储器中的安全熔丝。攻击时需要执行两种扫描:一是激活安全特性;二是屏蔽安全特性。比较两次扫描的结果,可以知道那些晶体管改变了状态。除去CPU寄存器和SRAM存储器,剩下的就是破解者寻找的。

 

 图7-2 激光扫描上电后安全熔丝状态不一样的PIC16F84芯片表面

 

通过对PIC16F84微控制器的两次扫描,比较它们的结果,可以发现安全熔丝所包含的晶体管。

尽管该技术很快可以得出结果,需要说明一点,它对小特征尺寸和多层顶层金属的现代微控制器作用不大。一个可选的办法是背面激光扫描,但这需要更精确,更昂贵的设备,因为信号里有更高的噪声。

 

7.2.2 使用缺陷注入技术进行分析

缺陷注入可以用来寻找安全熔丝。尽管不能给出安全熔丝的精确位置,尤其是用闪光灯来注入缺陷时。不一定要找到精确位置,因为发现弱点后就可以屏蔽掉安全熔丝。设备非常类似于激光扫描,不同点在于显微镜下是闪光灯而不是激光,打开封装后的芯片放在电机控制台的测试座上。

对着芯片的某一部分用闪光灯曝光,然后测试安全熔丝的状态,就可以发现感光的位置,那儿就可以找到熔丝。不仅仅是熔丝,包括整个控制电路都可能对缺陷注入敏感,那样就不容易找到熔丝。但从破解者的角度来看,这没什么关系,可以从通道上的易攻击点开始。

 

 图7-3 PIC16C622A芯片表面照片,方框内是待测试部分。

 

 图7-4 本图即为上图中的方框部分,圆圈指示对闪光灯敏感的区域。

 

 可以使用相同的步骤进行安全评估,那样芯片表面每一点都可以在闪光灯下曝光用以短时间内确定安全熔丝会不会被屏蔽。

 

 

第八章

 

防破解技术

 

本章探讨可加强微控制器保护能力的技术。 

如果某个项目能被分解成几部分,就可以把每部分放在不同的微控制器中。那破解者就不得不对整个设备的所有部分进行反向工程。但是,这种方法对于成本敏感的大批量产品来讲,不是个好方法。

从基于微控制器的设计转向CPLD/FPGA可能是个好的选择,因为破解CPLD/FPGA需要花费更多。即使是将重要部分放在“不安全”的基于SRAM的FPGA中,其破解难度也相当大。

使用多层板和BGA封装也可以增大破解难度,因为肉眼无法看到内部互联,并且不可能直访问BGA的引脚来进行分析。为了能够访问引脚,芯片必须焊下来,放在特殊的测试适配器上。这就需要特殊的工具和训练有素的工程师。此外,BGA的封装不同于DIP SOIC和QFP之类,它的封装更难被打开。

常用的保护敏感信息的方法是加密数据。但是,更应该需要关注密钥的存储和管理。如果密钥是可编程的或能被随时修改,这非常类似于保存在EEFPROM中的情形。把无格式的信息放在可编程的存储器中,对于系统的安全是个威胁。

半侵入式攻击和缺陷注入式攻击,给微控制器芯片的硬件安全带来巨大威胁,所以我们就研究一些方法来阻止这些攻击。可以用自同步双线电路(Self-timed dual-rail circuit)设计技术,那样逻辑“1”或“0”不是被解码成在单线上的高或低电平,而是一对线上的‘HL’或‘LH’。组合信号‘HH’会产生报警,导致处理器复位。电路可以被设计成即使单个晶体管失效也不会导致安全问题。这种技术会增加功耗分析攻击的难度。

当然,要平衡所需安全等级和保护技术的开销。

(译者注:在使用8031的年代,不得不外扩ROM/RAM。当时有人使用到地址线/数据线的位交错技术,也就是某两位或更多的位线相互对掉。这需要在画板子和写程序的时候同时使用。)

 

8.1 不印字,重新印字和重新封装

对付低级的攻击,业内广泛使用抹掉印字的方法,但它不能阻止信心坚定的对手。一般地,这种方法会增加复制和反向工程的成本。

有两种方法可以找到它的型号。一种是打开封装后在显微镜下观察,大部分芯片上都有制造商的名字和芯片标识。另一种的花费更少,是检查它的信号线,如电源,地,时钟和复位信号线。每种微控制器都有自己特有的引脚排列,确定它们大致的类型是很容易的。 

某些开发者仅仅是抹掉正面的印字。但很多制造商在芯片的背面也有印字,如ATMEL,把芯片的内部编码印在背面。破解者很容易推敲出内部编码和实际型号的对应关系。同样,微芯的PIC内有芯片标识编码,可以通过通用编程器读出来确定芯片。

 一些开发者更进一步,不仅仅抹掉印字,还打上自己的印字,使它看上去像ASI。众所周知,对ASIC进行反向工程花费昂贵,使得只有小部分的破解者能得出实际的型号。

 

图8-1 在游戏机中找到的Ubicom SX48微控制器。上排左侧是被擦掉印字的,上排中间是背面重新打上的印字,右侧是打开封装后的芯片照片,可见两个芯片是一样的。

 

有些开发者重新印字,使之看上去是更安全的芯片。如:我们在一个游戏机种发现一个高安全等级保护的芯片,实际上是重新印字的低安全等级的CPLD。从图中可以看出,正面印字与真正的阿尔卡特芯片略有差异。但从背面看,完全不一样,倒是与赛灵思的印字很像。这种做法触犯了商标法,可能被起诉。

 

 

 图8-2 左侧两个是重新印字的芯片,中间是真正的阿尔卡特印字,右侧是赛灵思的印字。

 

为了达到更好的保护能力,不仅仅可以抹掉印字,也可以把芯片反过来,背面朝上使用。还可以把芯片的某侧的引脚锯掉。

如果需要更好地保护,芯片可以使用非标准的封装,如COB(chip on board),且可以自定义印字。这仅适用于大批量的产品,但一些芯片制造商提供了这种服务。一些制造商也可以对芯片进行预编程,并放置客户定义的标识。

 

8.2 多级和多点保护

在产品中使用不同的安全特性可以达到相对好的保护。这个在智能卡中大量使用,如在付费电视中,特殊的软件升级就可以拒绝伪造的卡。另一个例子是激光打印机的墨盒。打印机制造商从复杂昂贵的产品中赚不到钱,取而代之的是从墨盒和其它附件中赚钱。但墨盒很容易制造且可以被重新装填,所以打印机制造商就开发出保护技术来防止被重新装填和复制。有些制造商在产品中使用标识芯片,使得复制和重新装填很困难。最早的是打印软件检查一下芯片内的简单序列号,然后是写了数据的标准串行存储器。破解这些保护是相对容易的。一旦知道正确的芯片型号,就很容易重新编程或用普通的微控制器取代。在最新的打印机中,制造商开始更多地使用安全芯片,如达拉斯的iButton产品;或使用ASIC,并且在打印机固件中使用多种校验协议。更厉害的是有些特性只在必要时启动。例如:最早的打印墨盒只有序列号作校验。当制造商知道产品被复制了,就可以启用芯片内带EEPROM的保护措施。之后还可以对EEPROM进行加密,使用SHA-1水印签名,可以自动在线升级切换这些功能,而客户一点儿也不知情。

与使用一个熔丝相比,使用多个熔丝可以提升微控制器的安全性。例如:在PIC16F84中,单个安全熔丝控制对程序和数据的读写。在PIC16F628中,两个熔丝决定对程序存储器的访问,数据存储器使用单独的安全熔丝。熔丝的位置彼此距离较远,使得缺陷注入攻击异常困难。

 

 

 图8-3 右上角的圆圈指示PIC16F84安全熔丝的位置

 

更进一步的多熔丝保护是每个安全熔丝有两个单元,仅两个都处于正确状态才屏蔽掉熔丝。这增强了抗脉冲干扰攻击的能力。

 

图8-4 右侧的白色圆圈指示PIC16F628的三个安全熔丝的位置

 

8.3 烧断读写电路以及破坏测试端口

把普通MCU编程用的某些引脚烧断是增加破解成本的一个极为有效的方法。类似的方法也用在一些智能卡中,专门用来作后期生产测试和闪存编程的接口,在测试后会从物理上除去。

大多微控制器是被破解者屏蔽掉安全熔丝后自由读写存储器的。烧断其中的一个引脚后,即使安全熔丝被除去,也可阻止外部访问存储器。同时,在很多基于闪存的微控制器可以通过用户代码区的启动模块来更新程序,无需外部并行烧写器。在烧断之前就把启动模块写入,烧断后不影响程序的升级。

烧断的方法很简单,加电压,不论正负,大约是欲烧断引脚所能承受的最大值,就会有约1A的电流通过。这会造成连到该引脚的晶体管永久的损坏:高端的正电压损坏的是PMOS,低端的负电压损坏的是NMOS。

我们决定分析烧断后的芯片内部到底发生了什么。我们测试了一个用在软件狗里的PIC16F76芯片。通用烧写器认不出芯片,并且发现第28个引脚接触不良。打开封装后用显微镜观察。

我们对芯片也做了化学腐蚀,观察实际的损坏情况。可以看到两个输出的晶体管都完全损坏了。

图8-5高压烧过的芯片引出线焊点。左侧是打开封装后的照片,右侧是化学腐蚀后的照片。

200X。黑色的是碳化后的封装树酯。

如果想恢复该引脚的功能,就需要使用FIB对I/O进行全面的反向工程。另一种方法是使用微探针连到内部数据总线来读出存储器中的信息。这些设备都很昂贵,并需要熟练的破解者花费很多时间。

因为烧断会导致内部结构和钝化层的损伤,在大批量生产中不太适合。芯片的参数会随着时间的流逝而变化,因为水和空气会缓慢的从损伤处渗进芯片,导致芯片性能的劣化。如功耗偏大,寿命缩短,抗ESD电压下降。


8.4 智能卡和防篡改保护

对于开发者来讲,选择安全微控制器或可以得到更好的保护。与大多数微控制器相比,即使是十年前设计的智能卡也能提供更好的保护。但是与微控制器相比,也有劣势:昂贵,小批量的很难买到货。开发工具昂贵,需要和制造商签署保密协定,即使是说明书也要这样。很多制造商仅向特定客户销售大批量的智能卡。

另一个不足是I/O的功能受限,通常只有ISO7816接口,极少有单独的I/O。这使得在大多数应用中不能取代微控制器。仅用于保存敏感的签名数据和版权保护。但是它也适合那些不需要很多I/O的应用,如付费和门禁系统。 

现代的智能卡提供多种防攻击保护,内部电压传感保护免受电源噪声攻击(Power glitch attacks)的过压和欠压。时钟频率传感器防止受到静态分析(Static analysis)的降低时钟频率攻击。同时也可防止时钟噪声(Clock glitch attacks)进行提高时钟频率的攻击。芯片上的随机数发生器使得对密码进行攻击很困难。顶层金属网格和内部总线硬件加密使得微探测攻击是否可行充满疑问。光传感器从功能上防止打开芯片的封装。另外,访问内部存储器需要密码。

攻击智能卡,特别是新设计的,是个需要大量时间和金钱的苦差使。只有装备精良的实验室加资深的工程师有可能成功。

抗篡改元件和模块提供了更好的保护。如达拉斯半导体的iButton,它把芯片放在金属上,作电池和篡改的传感器。一旦检测到篡改,内部储存器就会被擦掉,以防止敏感数据被破解者获得。另一个例子是银行里使用的安全模块,如IBM 4758。它有更出色的防篡改能力,有辐射和低温传感器提供对多种攻击方法的保护。这些产品比智能卡更昂贵,但它提供更好的保护能力。但破解者仍然可以利用软件的缺陷来获得安全密钥。

 

8.5 异步逻辑(Asynchronous logic)

 自同步双线逻辑是最近才发展起来的防破解技术。传统的数字逻辑使用一个时钟来同步操作。但时钟速度的上升使之变得更复杂,这就导致不用时钟的自同步或异步电路设计的兴起。一种方法是在数据线上使用冗余技术。在双线逻辑中,信号0或1不再是单根线上的高或低电压,而是一对线上信号的组合。例如0可能是LH,1可能是HL。使用自同步电路时,LL信号表示静止。这些简单排列的主要缺点是很脆弱:电路缺陷会导致出现不想要得HH状态,它会通过电路迅速蔓延并锁住元器件。

 一种创新是利用这个缺陷,将HH看作错误信号。这个信号可以通过篡改传感器来获得,导致元器件锁定。更感兴趣的是元器件的失效会阻止敏感信息的输出,在将来可能是高安全等级的元器件所要求的。

 双线编码的另一个进展是减少功率消耗,使所有状态有同样的权重。双线编码不能充分保证数据独立于功率信号,不同的线路负荷会有不同的结果,这个可以通过版图布局来控制。

自同步设计可以抵抗时钟噪声攻击。如果串口需要时钟,用敏感电路分离出时钟是相对容易的。电源噪声攻击对异步电路很少能够成功,但是如EEPROM之类的就不能受到保护,可能会被破解。

 双线设计可以可靠地从篡改传感器得到报警信号,并且阻止元器件运行。结果可以是删除敏感数据并发出全局报警,这可以防止缺陷注入攻击。为了获得成功,破解者必须同时注入两个失效状态,使传输线的状态从LH切换到HL,这会导致传输线瞬间进入HH状态并且立即触发报警电路。

 

后 记

 

在翻译的过程中,发现原作者在很多地方打了“埋伏”,也许是因为跟安全方面相关吧。

本译文也就依葫芦画瓢了。 

尽管译者有一定的失效分析经验,但面对涉猎极为精深的破解著论,不得不叹:吾乃井底之蛙也。



打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 相关推荐
  • m

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分