本文来源:智车科技
01
前言
早期的汽车电子是一个封闭的系统,不与外界互联,然而随着汽车电子智能化和网联化的发展,信息安全正在占据重要的位置。信息安全ISO21434也随之出台,汽车电子对信息安全的要求也越发的严格,相关的需求日益增多。
安全启动正是汽车电子信息安全环节中的重要一环,安全启动(secure boot)可以有效防止攻击者恶意修改软件,保护用户的隐私。安全启动保证启动的软件是可信任的软件,是安全的,没有被篡改的软件。目前MCU侧安全启动的主流技术方向有以HSM安全硬件支撑的安全启动方案以及不使用安全硬件的软件级安全启动方案。
本文主要讲述MCU侧安全启动机制的原理,简要介绍了可信根和信任链,并简要介绍软件安全启动方案对可信根的论证分析。最后简要介绍基于安全硬件的安全启动方案以及使用不使用安全硬件的软件级安全启动方案。
02
MCU如何保证软件的安全启动
2.1可信根
不论MCU还是SOC,均有一个“信任根”,“信任根”是信息安全信心的来源。“信任根”是密码系统中始终可以信任的来源。信任根是一个不可变的过程或身份,用作信任链中的第一个实体。因此,没有祖先实体可以为信任根的初始代码和数据状态提供可信任的证明(以摘要或其他方式)。换句话说,嵌入式开发人员的信任根是一个不可更改的身份和最小的软件集,可以成功地验证自己并促进系统上的安全操作。
最终归纳一下:必须有一段程序或者硬件可以看作不会被攻破的一个实体,那么这段程序或硬件被称为信任根。
2.2信任链
如下图所示(图片来源网络),信任根(Root of Trust)验证Secure BootLoader是否可信任,本质上是验证Secure BootLoader是否被篡改,专业术语为验证Secure BootLoader的完整性,如果Secure BootLoader可信任,那么信任根和Secure BootLoader均是可信任的,Secure BootLoader验证Secure App是否是可信的,如果可被信任,那么信任根、Secure BootLoader、Secure App三者均是可信任的,这三者层层相连,下层验证上层,保证上层可信,组成了一个链条,链条上的每一个环节均是可信的,那么这个可信的链条就成为信任链。
2.3实现安全启动的要点
上述分析可知,要实现安全启动,需要两点:1.可信根的确定 2.确定验证方法,形成信任链。
2.3.1 可信根的确定
由于MCU一般不直接与网络相连接,网络很难直接攻击可信根,因此,MCU侧安全启动的可信根可分为两种方案。
方案一:利用芯片的安全模块或者其他安全硬件。简单归纳为:利用安全硬件作为可信根。例如英飞凌Tc3xx系列的HSM模块。这个基本上不用做太多TARA分析,也不用向OEM做过多解释。当然这种方式属于土豪方案,软硬件都需要花钱,优点也是很明显:有独立的核来保证可信,是真正硬件上的可信!!!!!!
方案二:根据ISO21434进行TARA分析,得出使用软件的最底层BootLoader作为可信根的结论。这种方案优点很明显:便宜,好扩展。缺点也很明显:不是硬件可信,是一个纯软件方案,需要得到OEM的确任。
这种方案不是没有可取之处的。首先MCU在实车上一般不联网,其次刷新流程是固定的,并且不是所有Pflash的地址均可以被刷新,进一步说,程序也是有模式控制的,工厂模式,开发模式,运输模式,下线模式,售后模式,正常模式等等,不同的模式对应着不同的软件,模式的切换(安全刷新)也是可信的(这点一般由TARA分析得出)。此外,一方面,由于部分汽车机械结构的特殊设计,控制器可能会和机械结构焊死,一旦强拆会导致汽车直接无法正常使用,一般黑客也不会做物理强拆。另外一方面,一般都需要关闭芯片的debug功能,使得芯片无法连接调试器,不会在任何模式下被轻易的更改软件,以英飞凌Tc3xx为例,关闭芯片debug功能又是由OTP(刷写一次就不可更新的存储)保证的,很难被攻破。当然电路上也可以强行做保护,比如说,强行连接调试器会导致控制器供电直接中断或者外狗直接复位软件进而断开调试器连接。
从上述分析,基本可得出一个结论:机械物理上无法使用debug线连接控制器,即使被拆卸下来,也由于电路保护、debug口的密码保护,使得调试器无法正常连接。通信端连接由于安全模式切换以及安全刷新的存在,最底层的BootLoader无法被更新。因此,最底层的BootLoader在开发、生产、销售、售后任何一个环节等不会被篡改,可作为可信任根。
2.3.2 验证方法
一般要形成信任链,就缺不了密码学的参与。其实不管是软件方案还是硬件方案,本质还是靠密码学形成信任链的。前文说过,验证方法本质上是验证完整性,因此,安全启动一般使用MAC校验。
MAC检验是Message Authentication Codes的缩写,也称消息认证码,用于检查消息的完整性以及身份验证,保证消息不被篡改。
常见的MAC算法有:HMACMD5、HMACSHA1、HMACSHA256、CMAC-AES128、CMAC-AES256等等。
简而言之,验证方法一般是使用MAC校验保证上层软件的完整性,从而实现信任链。
03
安全启动方案详解
3.1 Tc3xx的芯片启动流程简述
Tc3xx芯片手册中的芯片启动流程叫SSW,英飞凌的BootRom的启动核为Cpu0,其他核处于Halt状态。BootRom是英飞凌的Boot,跳转到用户空间的第一条指令是由用户选择的启动配置决定。我们正常用到的启动模式就是BMI Header,BMI Haeder可以配置在4个位置,分别为0xA0000000,0xA0020000,0xA000FFE0,0xA001FFE0。
整体的流程如下图所示,BootRom会按照顺序查找这四个位置的BMI Header的配置,并检查其有效性。如果配置有效,则根据配置跳转到用户代码。BMI Header配置信息为: 用户空间启动地址,Boot Mode Index信息,Boot Mode Header ID,StartAddress(PFlash的起始地址),EndAddress(PFlash的结束地址),CRCRange(PFlash的CRC值),CRCRange取反,CRC header(ABM Haeder CRC值),CRC header取反。
设计多个BMI Header是为了做冗余备份,保证在一个或多个损坏时,芯片仍然可以正常启动。
在跳转进用户空间地址后,程序会按照设计的启动流程启动,一般情况下,用户空间分为BootLoader + BSW两个层级,英飞凌的BootRom会先跳转进BootLoader,BootLoader运行之后,再跳转进BSW运行,然后初始化外设,启动Autosar OS。
简要概括一下英飞凌系列的启动流程为:
1.启动时,BootRom会根据用户配置,选择启动方式,一般是BMI Header方式启动。
2.BMI Header存在芯片PFlash的4个位置中, BootRom按序寻找第一个有效的BMI Haeder。
3.寻找到第一个有效的BMI Haeder之后,BootRom跳转进用户空间的地址。
4.跳转进用户空间运行BootLoader,检查BSW有效之后,跳转进BSW。
5.运行BSW,启动Autosar OS,完成整个控制器启动。
3.2基于Tc3xx的HSM安全启动方案
英飞凌Tc3xx系列支持硬件安全模块HSM,当采用HSM时,启动流程有了一些变化,英飞凌Tc3xx的BootRom除了正常查询BMI Header之外,还会等待HSM启动以及HSM对配置区域完整性校验的完成,然后Signal HSM to start user code handling,之后再跳进用户空间的地址。此外,还需注意一点,Tc3xx的EEPROM会被强制分配一部分到HSM,导致总的EEPROM大小变小,这些EEPROM本质上就是HSM的安全存储所用的空间,完整性校验预存的MAC值,就存储在此处。使用HSM的英飞凌启动流程如下图所示,
图片来源网络
我们在采用HSM作为安全启动方案时,我们一般会有两种选择:
方案一:英飞凌的BootRom等待HSM完成之后,再跳转进用户空间地址
方案二:英飞凌的BootRom不等待HSM完成之后,直接跳转进用户空间地址,在用户空间检查HSM的安全校验是否正常。
HSM对于设置区域的完整性校验和正常的代码启动是并行的。正常情况下,采用方案一作为安全启动的方案,但是某些情况下,基于HSM安全启动方案的系统鲁棒性、降低控制器变砖的可能性以及减少启动时间,可以选择方案二。
方案一是标准的安全硬件支持下的安全启动方案,方案二是有一定的概率被黑客攻击,修改跳转到用户空间的地址。
整个HSM在启动过程中主要流程如下图所示,主要是对配置的Block区域即设定的需要校验的区域进行MAC计算,得出的MAC值与预存在HSM的MAC值比较,若相等则代表验证成功,否则校验失败。
3.3基于Tc3xx的软件安全启动方案
基于Tc3xx的软件启动方案不使用HSM安全硬件,节约了一大笔费用。Tc3xx启动流程还是按照正常的流程启动,BootRom寻找BMI Header,跳转进用户空间。但是整个软件方案需要特殊处理。
Pflash的用途需要特殊划分,有一块区域必须用作信任根,作为永久性ROM固化在控制器中,这是一块人为划分的不可刷新区域,至少对客户是不开放的,我们称为Start Boot,作用相当于英飞凌的BootRom。Start Boot需要一小块EEPROM存放密钥,预存的MAC校验值等等,这块EEPROM是软件划分的产物,实现软件隔离,从软件以及驱动层级无法访问这块区域。Start Boot是控制器用户空间启动的起点,在Start Boot中,会初始化电源,初始化必需的外设,初始化EEPROM驱动等等。
Start Boot启动校验的流程和HSM保持一致,本质上安全启动的流程大多大差不差,区别在于使用了安全硬件还是采用了纯软件方案模拟。然而,作为软件供应商或者自身可以可控的软件方案,为了适应客户需求,这边有一些变型的方案,像极了上学时老师讲的变型题。变型的重要需求如下:
1.为了满足启动时间的的要求,则缩短安全启动校验时间,那么采用部分校验方案。
2.MAC校验存储的EEPROM为非安全存储,需要对存储做安全策略。
3.为了满足整体的安全启动需求,则将整体软件的校验挪至BSW。
上述需求第一和第三点,整体的安全启动策略变更如图所示,将安全启动划分成两次完成,第一次计算最为核心代码区域的MAC值,计算范围为0x8110 0000 ~ 0x813F FFFF,计算范围客户可自行调整配置,所得到的MAC值和预存的MAC1比较,相等则允许跳转。此方案缩短了启动时间,又保证了软件是大概率可靠的。跳转到BSW之后,采用周期性校验法,在软件平稳运行时,分段累积计算MAC值,计算完成后与MAC2相比较,若发生篡改,则软件直接复位停留在Customer Boot等待刷新。
上述需求第二点,对于安全存储,一般会采用分散存储,熟称加盐。此外还会加密存储,密钥一般写死在代码中。以2K EEPROM,存储32字节的MAC值为例,如下图所示,每个单元格代表16个字节,MAC值的每个字节按照一定的自定义算法散布在各个单元格中,每个单元格内,单字节的MAC值,又拆分成高字节和低字节两部分,按照头部加密的信息散布在16字节中。
04
总结
通过TARA分析,可以得出结论:在不使用的HSM安全硬件的情况下,完全可以通过软件方案实现安全启动,实现降本增效。