微控制器(MCU)破解秘笈--背景知识

2.1 硅芯片安全措施的演变

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

微控制器(MCU)破解秘笈--背景知识

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

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

微控制器(MCU)破解秘笈--背景知识

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

从七十年代后期开始,微控制器提供一种基于CPU的控制板的非常好的取代方法。它们不仅有内部存储器和通用I/O接口,还有一些保护措施以防止未经授权访问内部存储器的内容。

不幸的是,早期的MCU没有提供非易失存储能力,重要的数据不得不存在MCU外部的分离芯片上,因此很容易被读出数据。最近销售的一些廉价USB狗也用此法来进行软件保护,如图2-3所示。

微控制器(MCU)破解秘笈--背景知识

图2-3   Aladdin HASP4 USB狗

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

微控制器(MCU)破解秘笈--背景知识

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

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

微控制器(MCU)破解秘笈--背景知识

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

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

下一步增强安全保护的措施就是增加一个硬件安全熔丝(security fuse译者注:安全熔丝就是寄存器)来禁止访问数据。这很容易做到,不需要完全重新设计MCU架构,仅利用熔丝来控制编程接口的回读功能,如图2-6所示。缺点是熔丝位很容易被定位并进行入侵攻击。

例如:熔丝的状态可以通过直接把熔丝位的输出连到电源或地线上来进行修改。有些例子中仅仅用激光或聚焦离子束来切断熔丝的感应电路就可以了。用非侵入式攻击也一样可以成功。因为一个分离的熔丝版图异于正常的存储阵列。可以用组合外部信号来使熔丝位处与不能被正确读出的状态,那样就可以访问存在内部芯片上的信息了。用半侵入式攻击可以使破解者快速取得成功但需要打开芯片的封装来接近晶粒。一个众所周知的方法就是用紫外线来擦掉安全熔丝。微控制器(MCU)破解秘笈--背景知识

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

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

微控制器(MCU)破解秘笈--背景知识

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

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

微控制器(MCU)破解秘笈--背景知识

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

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

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

微控制器(MCU)破解秘笈--背景知识

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

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

微控制器(MCU)破解秘笈--背景知识

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

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

微控制器(MCU)破解秘笈--背景知识

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

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

微控制器(MCU)破解秘笈--背景知识

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

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

微控制器(MCU)破解秘笈--背景知识

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

微控制器(MCU)破解秘笈--背景知识

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

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

2.2 存储器的种类

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

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

微控制器(MCU)破解秘笈--背景知识

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

微控制器(MCU)破解秘笈--背景知识

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

微控制器(MCU)破解秘笈--背景知识

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

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

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

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

上一篇:Andrew Ng机器学习课程笔记--week5(上)


下一篇:Python3面向对象编程实例