×
嵌入式 > 集成电路 > 详情

MCU解密全攻略 为何所有MCU都能被破解(四)

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

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

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

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

存储器的种类

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

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

  图1-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纳米宽,很难确定它们的状态。基于反熔丝的技术,提供了很高的安全性。

安全保护的类型

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

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

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

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

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

  安全熔丝在主存储器中可以提供提供更好的保护,这很难找到并屏蔽它们。主存储器和熔丝可以通过位线(Bit line)接在一起。如zilog的Z86E33微控制器,或通过字线(Word line)接在一起,如意法的ST62T60。有趣的是MC68HC705C9A使用了多种安全措施。熔丝单元放在主存储器单元之间,合用位线。如果熔丝被紫外线擦除了,主存储器也会被擦掉。对存储器进行反向工程,发现很难分辨哪部分属于存储器,哪部分属于熔丝。但同时,半侵入式攻击可以很好工作,因为熔丝有分开的控制电路,这很容易被破解而不影响主存储器。

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

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

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

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

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




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
创建并移植K10 BSP包的具体步骤和方法(一)