作者:Stephen Evanczuk
编者按:随着物联网设备应用的激增,确保这些设备的安全是人们一直要持续关注的问题;在某种程度上,若要在工业物联网 (IIoT) 和任务关键型应用中采用联网设备,安全挑战可能会成为阻碍;这是因为如果攻击成功,就可能导致企业和个人数据泄露。确保物联网应用安全可能是一项非常艰巨的任务,但在现实中,物联网设备的安全可以建立在一些相对简单的原则之上,并使用硬件安全设备加以支撑。只要遵循完善的安全实践,这些问题就能得到解决。本系列文章由多个部分组成,文中将提供一些实用的指导,以帮助开发人员确保从一开始就遵循相关的最佳实践。第 1 部分探讨底层安全设计的加密算法。第 2 部分探讨私钥、密钥管理和安全存储在安全物联网设计中所起的作用。第 3 部分(文本)检查安全处理器的内建机制,以缓和物联网设备所面临的其他类型威胁。第 4 部分明确并展示如何在高级处理器中应用安全机制,帮助确保进行必要的隔离,以缓解对物联网设备运行时环境进行的攻击。第 5 部分介绍如何在将物联网设备连接到物联网云资源时,通过采用更高级别安全措施,让这些设备实现持续的物联网安全。
通过组合使用,基于硬件的加密技术与安全存储可提供实现安全物联网 (IoT) 设计所需的基本功能。但是,物联网设备一旦部署,就会面临多种威胁,这些威胁会破坏这些设备,发起即时攻击,或造成更微妙和高级的持续性威胁。
本文描述了开发人员应如何使用基于底层安全机制构建的信任根来增强物联网设备的安全性,这个信任根在 Maxim Integrated、Microchip Technology、NXP Semiconductors 和 Silicon Labs 等厂商推出的安全处理器上可为软件执行提供一个可信任的环境。
什么是信任根,为什么需要信任根?
加密方法和安全密钥是确保任何互联设备安全性的关键促进因素。如本系列文章的第 1 部分和第 2 部分所述,它们提供了更高层次协议所用的基本机制,以保护数据和通信。要保护系统本身,需要开发人员解决可能影响嵌入式系统中的系统操作和软件执行的漏洞。
在典型的嵌入式系统中,由于电源故障或关键软件异常导致的系统复位最终会引起软件引导过程,从非易失性存储器重新加载固件映像。通常,软件重新引导是一种重要的安全机制,用于恢复被意外或有意打破稳定性的系统功能。在互联系统中,黑客使用各种黑帽工具来破坏软件,而安全专家通常建议通过重新引导,来应对影响软件执行的入侵行为。例如,FBI 在 2018 年曾建议消费者和企业主重新启动路由器,以阻止所发生的大规模黑客攻击活动。
实际上,重新引导并不能保证系统完整性。在固件映像被盗用的情况下重新引导后,系统仍处于黑客的控制之下。为了缓和此类威胁,开发人员需要确保其软件在信任链上运行,而该信任链则基于引导时建立的信任根所构建,并延伸至软件执行环境的所有层面。能否达到此安全级别关键取决于,确保使用可信的固件开始引导过程。
验证固件映像进行安全引导
在嵌入式系统中,主机处理器将固件映像从闪存加载到主存储器中并开始执行(或者直接从具有芯片内执行 (XIP) 功能的闪存开始执行)。如果黑客已盗用固件映像,则引导过程将会导致系统被劫持。
为了在引导之前验证固件的完整性,开发人员使用了一个从供应链早期开始的代码签名过程。在安全的设施内,通过使用椭圆曲线数字签名算法 (ECDSA) 之类的加密稳健算法创建的私钥-公钥对,可对系统的固件映像进行签名。尽管私钥从未离开过设施,但系统公钥会随系统一起发运。在引导过程中,处理器会在使用映像之前运用此系统公钥来验证固件签名。
当然,在上述过程中,公钥本身容易受到攻击,而且在扩展时,这会使系统固件容易遭到未经授权的替换。如果公钥在嵌入式系统中继续不受保护,黑客可能会用自己生成的私钥-公钥对中的公钥来替换它。如果他们以自己拥有的相关私钥签名的恶意固件替换了系统的固件映像,则被盗用的固件签名将会通过验证过程,并继续引导过程,从而导致系统被劫持。
因此,安全系统依赖于在安全设施内的安全元件中预配置的有效公钥。Maxim Integrated 的 DS28C36 和 Microchip Technology 的 ATECC608A 这类安全 IC 不仅可以安全地存储传统安全元件,还能安全地执行 ECDSA 等认证算法进行固件签名认证。
例如,在引导之前,主机处理器可通过串行接口将固件发送到 DS28C36。DS28C36 随即使用先前在安全设施中预配置的系统公钥,来验证固件签名是否确实由同一安全设施中的关联私钥创建。最后,DS28C36 将验证结果发送至主机处理器,如果签名有效,主机处理器会继续加载固件映像(图 1)。
图 1:开发人员可以使用 Maxim Integrated 的 DS28C36 这类安全 IC 来验证固件签名,以防止主机处理器引导被盗用的固件。(图片来源:Maxim Integrated)
更安全的引导过程可保护固件映像,以消除密钥或映像被盗用造成的问题。通过使用安全存储和加密加速器,有效的安全引导功能已内置到越来越多的处理器中,包括 Silicon Laboratories 的 Gecko 系列 2 处理器、NXP 的 LPC55S69JBD100、Maxim Integrated 的 MAX32520 和 Microchip Technology 的 ATSAML11D16A 等等。利用这些功能,此类安全处理器可以提供所需的信任根,以创建用于系统和应用软件执行的可信环境。
通过安全引导提供信任根
此类安全处理器提供安全引导选项,旨在确保信任根所依托的固件映像的完整性。例如,Silicon Laboratories 的 EFR32MG21A 和 EFR32BG22 Gecko 系列 2 处理器分别通过基于硬件安全元件和虚拟安全元件 (VSE) 的多级引导过程来构建此信任根(图 2)。
图 2:Silicon Laboratories 的 Gecko 系列 2 EFR32MG21A 处理器在多级引导过程的第一级使用集成的硬件安全元件(如本图所示),而 EFR32BG22 则使用虚拟安全元件来启动多级引导过程。(图片来源:Silicon Laboratories)
在 EFR32MG21A 中,专用处理器内核提供加密功能以及用于安全密钥存储的硬件安全元件。在此专用功能的支持下,处理器使用只读存储器 (ROM) 中存储的代码发起引导过程,以验证第一级引导程序 (FSB) 代码。完成验证后,FSB 代码即会运行,接着又会验证第二级引导程序 (SSB) 的代码签名。引导序列继续执行经验证的 SSB,后者进而会验证应用程序代码的签名,而该代码通常包括系统级代码和更高级别的应用程序代码。最后,经验证的应用程序代码运行,系统根据应用程序的要求继续执行操作。
由于此过程从 ROM 代码开始,而且仅运行经验证的 FSB、SSB 和应用程序代码,因此该方法将产生经验证的信任链来执行代码。由于此信任链中的第一环依赖于无法修改的 ROM 代码,因此信任链中后续的每一环都会延续此可信环境。与此同时,这种方法还允许开发人员安全地更新应用程序代码,甚至是第一级和第二级引导程序代码。只要每个代码包都提供经验证的签名,可信环境就能保持完好。
使用信任根提供这种安全引导的处理器,通常支持多种模式和选项。例如,Silicon Laboratories 的 Gecko 系列 2 处理器提供了更强大的基于证书的安全引导功能。
证书可用于常规公钥基础结构 (PKI) 事务处理,包含公钥以及对一个或多个相关证书的引用,这些证书最终指向证书颁发机构 (CA) 授予的根证书。此链中的每个证书均用于验证其下面的证书,从而形成基于值得信赖的 CA 的信任链。在传输层安全性 (TLS) 的认证阶段,浏览器依靠此信任链来确认 Web 服务器的身份。嵌入式系统可采用相同的方法使用证书来确认引导程序或应用程序代码源的身份。在这里,按照前述方式执行多级引导过程,但需要额外验证与每一级相关的证书(图 3)。
图 3:Silicon Laboratories 的 Gecko 系列 2 处理器通过在引导过程每一级的签名验证期间验证所用公钥的证书,来增强系统安全性。(图片来源:Silicon Laboratories)
NXP 的 LPC55S69JBD100 等其他处理器支持多种不同的固件映像选项。除了签名的固件映像外,这些处理器还支持使用可信计算组织推出的设备标识符组合引擎 (DICE) 行业标准的引导映像。第三个选项允许开发人员将映像存储在支持 PRINCE 加密的处理器闪存特殊区域内,其中 PRINCE 加密是一种低延迟的分组加密,能够在小得多的硅面积内达到与其他加密相当的安全强度。在 LPC55S69JBD100 中可实现 PRINCE 加密,这种技术能对处理器专用的 PRINCE 闪存区中存储的加密代码或数据执行实时解密。由于解密使用的密钥仅供 PRINCE 加密引擎访问,因此该解密过程仍然是安全的。实际上,这些密钥由 LPC55S69JBD100 的物理不可克隆功能 (PUF) 生成的密钥加密密钥 (KEK) 提供保护。(有关 PUF 和 KEK 用法的更多信息,请参见第 2 部分。)
这种方法使开发人员能够存储更多固件映像,而这是在避免“封闭”设备的风险情况下,为物联网设备提供固件无线 (FOTA) 更新方法所需的功能。如果处理器只能使用一个位置来存储固件映像,则有缺陷的固件映像会将处理器置于不确定或锁定的状态,从而锁定或阻塞设备。通过将固件映像存储在 LPC55S69JBD100 中启用了 PRINCE 的闪存区内,开发人员可使用回退策略,即如果新版本引导进入无法工作状态,则还原固件的上一个正常工作版本。
由于所有这些新固件映像都必须通过基础引导过程中所需的签名验证检查,所以开发人员可充分利用安全 FOTA,在不影响系统或其信任链的情况下添加新功能或修复错误。
总结
系统和应用级别的安全性需要一个只允许授权软件运行的执行环境。尽管代码签名验证是实现此类环境的基本功能,但安全系统还需要利用更全面的功能集来构建必要的信任链,以确保执行的是受信任的软件。这些可信环境的基础在于信任根,而信任根可通过安全处理器所支持的安全引导机制提供。使用此类处理器,开发人员可以实现安全的物联网设备,使其能够抵御企图破坏系统中的软件执行或完全劫持系统的攻击行为。