ARMv8-M

文.凌立民

保护软体资产不被滥用

在过去的MCU应用产品开发过程中,最令独立软体开发商或系统整合商头痛的,就是如何确保MCU内部软体资产能受到严谨保护,同时兼顾合作厂商在软体开发上一定的弹性。正如图1中的例子,A​​RMv8-M架构可以把有价值的通讯协定放到TrustZone区域内,基于通讯协定的上层应用能够以不同记忆体位置来放置,方便不同的开发团队进行协同开发,依各自专长领域进行软体制作。此类应用包含短距离通讯协定、音讯编码器、生物辨识核心演算法⋯等。

图1 TrustZone for ARMv8-M可保护有价值的中介软体
图1 TrustZone for ARMv8-M可保护有价值的中介软体

确保每个MCU应用产品都受到信任与保护

在可预期的未来联网环境世界里,连上网路的装置只会愈来愈多,这些装置都会是一个个潜在的破坏入侵点,虽说联网装置不一定需要储存敏感资料而配备安全晶片等级的MCU ,但必须保证功能正常。

有了TrustZone区域,可以把单颗MCU的ID、加解密的Key、软体升级都保护在安全区内,而每一次开机时亦都可进行自我检查,确保装置本身内部运行软体没有遭到窜改,即从开机根源点就是一个可信任(Trusted)的进入点,如此才能称得上是功能正常保证。图2的说明给了示意范例,此类应用包含跟媒体版权有关,如DRM(Digital Right Management),支付及联网环境中的节点间之识别与通讯等应用。

图2 TrustZone for ARMv8-M提供Root of Trust
图2 TrustZone for ARMv8-M提供Root of Trust

安全地使用MCU控制周边装置

在未来的智慧生活环境里,可预见的是愈来愈多基于MCU开发的应用产品都有可能透过远端指令进行操作,而这些负责控制的MCU要担负的工作除了驱动真实环境中连接的硬体单元,更要确保指挥驱动的软体正确地运行,所以驱动程式跟周边单元互动必须有安全保证(如图3)。

图3 TrustZone for ARMv8-M确保安全的控制周边
图3 TrustZone for ARMv8-M确保安全的控制周边

发生在去年的第一银行ATM盗领案便是一例,由于大部分的银行ATM网路连线作业都被视为安全的内网环境,只要是内网环境的程式发出命令,机器就必须执行动作的机制已充分凸显安全不足,针对一银的例子,如能增加一道针对周边驱动执行前判别是否命令为恶意程式发出,则可阻止ATM机器远端受控吐钞,甚至可以主动发现问题而揪出遭骇客植入系统的恶意程式,除了能做到资讯安全(Security)更实现了功能安全(Safety)。

保障核心软体的完整性

近年来由于MCU的市场由传统的8、16往32位元移动,愈来愈强大的运算能力也配备了丰富的周边资源,如更高容量的Flash、RAM记忆体,使得小型MCU应用跑作业系统(Operating System, OS)的机会变多了,这些核心软体不管是OS或Firmware都可能有被恶意程式攻击的风险,再者由于在嵌入式系统中,对于软体本身并无统一的纯软体安全检验标准,大多为产业界标准,如车界的ISO 26262,工业界的IEC 61508,其余如医疗用品之FDA,未来可能会发展的智慧型电表⋯等,这些标准都使软体开发人员必须花费相当的心力。

有了TrustZone for ARMv8-M后,虽说无法马上依靠该功能做到符合所有业界规范标准,但其内建硬体TrustZone的做法可以相当程度地减轻软体开发人员的心力,让核心软体的建构与维护更加有效率,因为ARMv8-M的TrustZone架构可让通过认证的软体受到安全的保护,因其对不需要认证的部分或委外开发的部分提供了缓冲区(Sandboxing),这也方便软体人员针对不同应用的技术支持,例如:可授权予上层应用软体开发商对产品的技术服务,如图4。

图4 TrustZone for ARMv8-M具有Sandboxing Certified Software机制
图4 TrustZone for ARMv8-M具有Sandboxing Certified Software机制

适用并提升MCU多核心系统应用

在未来可见的联网世界里,将会有许多不同规格的晶片需求,对于可能会有的双核心或是多核心MCU架构,有了TrustZone的功能,则能轻易分隔在不同核心上运行的软体权限,轻松地让不同CPU做到负责不同的周边控制,如图5的示意说明,这样的应用譬如MCU搭配一些特殊的类比感测元件、短距离的无线通讯射频前端或触控感测元件等。

图5 TrustZone for ARMv8-M—Leveraging Helper Processor
图5 TrustZone for ARMv8-M—Leveraging Helper Processor

两颗MCU整合成一颗

承前段所述,既然有可能支援多核心,那是否有可能把两颗CPU才能做到的事合并成一颗呢?笔者认为可行性颇高,以未来跟3G/4G/5G有关的物联网通讯的识别与收费问题举例说明,我们知道传统的手机收费方式都是透过SIM卡(UICC Card)识别门号租用对象,人手一支的手机可由人更换SIM卡,但装置本身如果是配置在特定的区域,又或为数量众多或不允许打开机构之设计,那该如何处里更换网路服务商?

所以GSMA制定了embedded SIM或较为广义的eUICC(SIM或MIM: Machine Identification Module)规范,让远端更新eUICC的内容可实现,方便安全的空中管理(Over-the-air)所服务的手机或机器,且不需要人员亲自到门市或派人员到现场进行任何卡片更换,图6举一个租用电信网路服务的ePOS机器为例。不过这个模式的运用是否能达成更有成本优势(Cost Down)或方便产品设计则仍需视实际状况来决定。

图6 采用ARMv8-M架构,内建TrustZone安全技术–eUICC应用范例
图6 采用ARMv8-M架构,内建TrustZone安全技术–eUICC应用范例

以上述ePOS为例,若以TrustZone的Secure区域拿来当模拟eUICC卡用途,non-Secure区域作为产品本身周边控制的主控MCU,则仍需考量是否需要整合后的单颗晶片要过eUICC所需要的认证、成本上是否较现已非常成熟的SIM卡产品有优势则仍待观察,但如物联网是未来趋势,采用ARMv8-M架构,内建ARM的TrustZone安全技术将可提供一个这样的使用模式,毕竟ARM只是IP供应商,MCU供应商还是可以依市场需求发展出适用的产品。

内建安全性有利创新应用

综观前述的多项可能应用场景,可以看出采用ARMv8-M架构,内建ARM的TrustZone安全技术的通用型MCU(General Purpose MCU),可以从零组件的角色通过方便的多方合作开发转变成方案提供者角色(Solutions Provider);再者,其硬体切换Secure和non-Secure的做法,也能提供联网装置在软体开发上达成资料和软体资产安全性的防护,适合未来MCU各类应用的需求,相信此设计将带领MCU应用设计迈向一个便捷、创新、可实现系统安全的未来。

(作者为新唐科技微控制器应用事业群技术经理)

新通讯2017年7月号197期《技术前瞻》

围观 530

ARM® TrustZone® 是针对片上系统(SoC)设计的系统级安全技术,它基于硬件,内置于CPU和系统内核,为半导体芯片设计师设计设备安全性能(如可信根)量身打造。TrustZone可用于任何基于ARM Cortex®-A的系统,随着全新Cortex-M23和Cortex-M33处理器的发布与升级,Cortex-M也已经支持该技术。

从尺寸最小的微控制器(搭载针对Cortex-M处理器优化的TrustZone技术),到高性能处理器(搭载针对Cortex-A处理器优化的TrustZone技术),设计师们终于可以从设计初始就着手打造出色的安全性能了。

TrustZone技术的核心理念是将可信资源与非可信资源在硬件上实现隔离。在处理器内部,软件只能安装于安全或非安全域其中一处;在两个域间切换则必须经过Cortex-A处理器的软件(后文称安全监视器)和Cortex-M处理器的硬件(核心逻辑)处理才能执行。这种将安全(可信)域和非安全(非可信)域隔离理念的实现不仅涉及CPU,还涵盖存储、片上总线系统、中断、周边设备接口和SoC上的软件。

针对ARMv8-M处理器(Cortex-M)的TrustZone技术

ARMv8-M架构将TrustZone技术拓展至Cortex-M级系统,实现了对所有成本点的安全防护。为Cortex-M度身设计的TrustZone技术可以保护固件和周边设备,并为安全启动、可信更新以及可信根执行实现隔离。该架构具备嵌入式解决方案应有的确定性实时响应能力。同时,因为安全与非安全域间的上下文切换在硬件中完成,所以更快实现转换及更高的电源效率。该架构无需安装任何安全监视器软件,因为处理器本身就能完成切换任务,不仅可以减少存储足迹,还能降低代码执行的动态功率。

在继续讨论编程之前,我们先介绍以下几个概念:

1.地址定义安全

2.新增执行状态

3.跨域调用

概念1:地址定义安全

第一个需要了解的概念是:地址定义安全,即每一个地址都与一个特定的安全状态相关。Cortex-M处理器采用全新引入的安全属性单元来检查地址的安全状态。根据整体SoC设计,系统级接口可以重写该属性。选择此状态后,该地址还会通过一个存储保护单元(视系统配置而定)。


地址定义安全图解

概念2:新增执行状态

第二个概念是“新增执行状态”。ARMv7-M和ARMv6-M架构定义了两种执行模式:管理者模式(handler mode)和线程模式(thread mode)。管理者模式是特权模式,可以接入SoC的所有资源;而线程模式则可以设定为特权或非特权两种。凭借TrustZone安全拓展技术,我们可以对处理器模式进行镜像处理,构造安全和非安全两种状态,每种状态都各自包含管理者模式和线程模式。安全状态和处理器模式是正交的,因此可形成4种状态和模式的组合。在安全的存储器中运行软件时,处理器自动设定为安全状态;反之,在非安全存储器中运行软件时,处理器自动设定为非安全状态。这种设计消除了本来用于管理状态切换的安全监控软件的必要性,从而实现减少存储足迹和功耗的目的。


新增正交态

概念3:跨域调用

ARMv8-M为实现Cortex-M的性能专门设计,具备确定性实时运行功能。换言之,只要遵守以预先设定的安全状态接入点为基础的特定规则,任何状态下的任何功能都可以直接调用其他状态下的任何其他功能。此外,每个状态都有一个独特的堆栈集和对应的堆栈指示器,用来保护安全域资产。由于无需使用API层管理调度,成本大幅减少。基于预先设定的接入点,调度可以直接读取被调函数


跨域调用

应用案例简述

如下图表介绍了一个使用案例简述。该环境下,用户应用和I/O驱动都处于非安全状态,而系统的启动代码和通讯堆栈则处于安全状态。用户应用调度并转入通讯堆栈以传输、接收数据,而该堆栈将使用非安全状态的I/O驱动来完成界面上的数据传输和接收。

所有相似系统环境下,示例软件配置都可以得益于TrustZone技术的安全状态功能:

非安全应用不能接入安全资源,除非通过事先定义好的安全服务功能接入点

安全固件既可以接入安全存储,也可以进入非安全存储

安全和非安全代码可以用不同的定时器制定独立的时间进度

每根中断线都可以设置为安全或非安全。安全软件和非安全软件的中断向量表也可以分开。

尽管处理器硬件可以为安全软件提供核心保护,但安全软件依然需要谨慎的编写,才能确保整个系统的安全。以下是软件开发商在设计安全软件时必须牢记的三个内容:

使用最新的ARM C语言拓展(ACLE)技术

验证非可信指示

为异步非安全存储修改专门设计

建议1:使用最新的ARM C语言拓展技术

经过优化,ARMv8-M的TrustZone技术引入了全新指令,支持安全状态转换。软件开发商再也无需创建封装器来生成这些指令了,他们现在可以使用ARM C语言拓展功能(ACLE)中定义的全新编译器,让软件工具理解上述功能的安全使用,并生成所需的最佳代码。ACLE功能由多家编译器厂商实现并支持,代码非常便捷易用。

比如说,在创建可以从非安全状态调度的安全API时,应该使用一个名为“cmse_nonsecure_entry”的全新功能属性来做函数声明。安全状态调度功能使用结束时,处理器中的寄存器仍可能保留一些秘密信息。凭借正确的功能属性,编译器便可自动插入代码,清空R0-R3、R12和应用程序状态寄存器(APSR)中仍保留秘密信息的寄存器,但是寄存器将结果返还给非安全软件的情况除外。寄存器R4到R11有不同的处理方式,因为它们的内容在函数边界保持不变。如果它们的值在函数执行过程中改变,那么就必须在返还非安全调度功能之前改回原值。

建议2:验证非可信指标

有时候,非安全代码会提供错误的设计指示,试图接入安全存储。为了彻底杜绝这一可能,ARMv8-M引入了一个全新指令——测试目标(TT)指令。TT指令可以将一个地址的安全属性返还,安全软件即可由此判断该指示指向安全还是非安全地址。

为了提高指示检查效率,每个存储区都有一个安全配置定义的区域号。软件可以用区域号判断相邻的存储区是否具有类似的安全属性。

TT指令将来自地址值的安全属性和区域号(还有MPU的区域号)返还原软件。如果在存储段的起始和终止地址上使用TT指令,并确定两个地址都处于同一个区域号内时,软件便可迅速判断存储范围(如数据阵列或数据结构)是否完全位于非安全空间。


检查指示是否指向安全的区域边界

使用上述机制,凭借API调度进安全侧的安全代码即可判断,非安全软件区域发起的指示请求是否具备符合该API的安全属性。通过这种方法,我们可以阻止非安全软件在安全软件中使用API来读取或破坏安全信息。

建议3:为异步非安全存储修改专门设计

非安全中断服务程序可以修改正在被安全软件处理的非安全数据。因此,已经通过安全API验证的输入数据可以在经过验证之后被一个非安全的ISR更改。避免这种情况的一个方法就是在安全存储中为那份输入数据建立一个本地副本,并用安全副本进行处理(包括输入数据的验证)以避免非安全存储读取;无法创建该副本时(如在特定存储区域中处理大量数据),则可以选择另一种方法,即对安全属性单元进行编程,以确保该存储区域的安全。

总结

确保整个系统的安全性并阻止安全数据泄漏至非安全侧,是安全软件开发商的责任。为实现这一目标,我们向安全软件开发商介绍TrustZone 技术3大关键理念与3个重要使用建议——保护调度函数寄存器数据的ACLE技术、验证指示的TT指令;最后一点开发商也必须牢记,非安全侧可能会通过干扰安全侧来修改数据。欲知更多详情,请点此浏览,为协助您在ARMv8-M处理器上开发安全固件,我们精选了相关文件以供参考。

围观 337
订阅 RSS - ARMv8-M