一种特别阴险的恶意软件形式是通过rootkit(或bootkit)攻击注入系统的固件,因为它在操作系统启动之前加载并且可以隐藏普通的反恶意软件。Rootkit 也很难检测和删除。防御 rootkit 攻击的一种方法是使系统能够使用安全启动设备,该设备旨在检测预操作系统环境中的未授权固件。
使用硬件信任根进行安全启动至关重要,因为它可以在威胁加载到系统之前保护系统免受威胁。安全引导过程仅允许系统使用制造商信任的软件引导。什么使安全启动安全?安全引导有两个主要方面:
• 安全引导加载程序存储在不可变的内存中 - 换句话说,它无法更改
• 安全引导加载程序在系统内执行第一阶段固件引导加载程序之前对其进行身份验证,以验证它是否已由受信任的原始设备制造商 (OEM) 签名。
让我们研究一下安全启动,以及如何在支持安全启动的嵌入式和 PC 平台中将嵌入式控制器用作主启动加载程序(即信任根)。
嵌入式控制器
嵌入式控制器长期以来一直是个人计算机 (PC) 移动平台的一部分,包括笔记本电脑、上网本和平板电脑。嵌入式控制器也是服务器、工业、电信和工业领域嵌入式设计不可或缺的一部分。当今的嵌入式控制器具有高度可配置性,OEM 使用它为其系统实现差异化功能,包括待机电源排序、热监控、风扇控制和电池充电。
嵌入式控制器还用作系统中的信任根或信任锚,以支持安全启动。图 1 显示了系统及其基本组件的示例。
系统中可能有许多嵌入式处理器用于执行固件。任何执行可在系统中更新的固件的处理器都必须经过固件身份验证,然后才能允许运行。嵌入式控制器安全引导加载程序是存储在ROM中的不可变代码,是系统中执行的第一个代码。它负责验证和执行存储在系统闪存中的 OEM 第一阶段固件引导加载程序。
由于 OEM 第一阶段引导加载程序驻留在闪存中,并且可以在系统中更新,因此此代码不能被视为不可变或信任根。在支持安全启动的系统中执行之前,必须对其进行身份验证。安全启动可防止恶意或未经授权的代码在系统中执行。一旦系统完全运行并且主 CPU 正在执行代码,它就可以使用本地受信任的平台模块或远程服务器来验证或证明硬件平台的完整性。
系统启动顺序
当系统通电时,不可变的安全启动加载程序初始化嵌入式控制器子系统,然后加载并验证存储在系统闪存中的 OEM 固件。OEM 固件通过验证下一层固件(如系统 BIOS)来维护信任链,配置系统并启动使系统退出重置的过程。每一层固件都对下一层进行身份验证,直到安全启动过程完成。引导过程完成后,主系统 CPU 将从重置中释放并开始执行操作系统。
UEFI(统一可扩展固件接口规范)是广泛接受的标准,用于描述固件启动顺序和系统操作系统之间的接口。
安全启动身份验证
安全启动是在执行之前对系统中的所有固件或软件进行身份验证的操作。恶意软件的一种形式是通过 rootkit 攻击注入系统的固件,它可以取代 OEM 的第一阶段固件引导加载程序并隐藏反恶意软件,加载正常操作系统,没有任何迹象表明存在任何问题并且无法检测到(参见图 2a)。
图 2a:UEFI 引导序列示例。
图 2b:具有硬件信任锚的 UEFI 启动序列示例。
Microchip的嵌入式控制器是固件信任根。它的工作是验证 OEM 第一阶段引导加载程序的数字签名。OEM 的第一阶段引导加载程序将对第二阶段固件加载程序进行身份验证,后者又将验证要在系统中运行的下一个固件或软件代码。这称为信任链。嵌入式控制器安全引导加载程序是链中的第一个环节,称为信任锚。
数字签名
数字签名
提供两个功能:完整性检查和身份验证。使用数字签名的公钥预配的信任根或信任锚可以验证固件映像是否是 OEM 批准的代码映像,以便在系统中使用。
若要创建数字签名,OEM 首先生成满足所选签名算法(如 RSA-2048 或椭圆曲线)要求的非对称密钥对。消息(即代码消息)通过散列算法(例如SHA-384)进行处理,并使用私钥进行签名(参见图3)。
为了验证数字签名,消息(即代码图像)通过用于对图像进行签名的相同哈希算法进行处理。数字签名使用生成的非对称公钥与签名期间提供的公钥进行比较进行验证。如果两个结果相同,则图像的真实性已经过验证,表明消息未被更改,并且与最初签名的消息相同(请参阅图 4)。
图 4:验证数字签名。
Microchip的嵌入式控制器安全引导加载程序
Microchip最近宣布推出一款新的支持加密技术的微控制器(MCU),即带有Soteria-G2定制固件的CEC1712 MCU,旨在阻止rootkit攻击为从外部串行外设接口(SPI)闪存启动的系统注入的恶意恶意软件。
Microchip嵌入式控制器安全引导加载程序是指存储在EC只读存储器(ROM)中的固件,该固件执行用于加载、验证和执行配置和打开系统电源的 OEM 第一阶段引导加载程序的受信任代码。
Microchip的嵌入式控制器被假定为可信的(即信任锚)。Microchip的嵌入式控制器引导ROM负责加载、验证和执行存储在外部SPI闪存中的OEM引导固件,同时保持系统复位。根据设计,嵌入式控制器是平台中第一个上电的组件。安全引导加载程序(在ROM中硬编码)使系统的其余部分处于复位状态,直到它加载并验证负责初始化系统、电源排序和使系统退出复位的OEM应用程序固件。
首次通电时,应用处理器和更高级别的组件将保持复位状态,直到嵌入式控制器启动 ROM 加载、验证并执行 OEM 启动固件(参见图 5)。
图 5:系统中 Microchip 的嵌入式控制器。
OEM 使用签名映像对外部 SPI 闪存进行编程。映像使用 OEM 的私钥、SHA-384 哈希算法和椭圆曲线数字签名算法 (ECDSA) 进行签名。使用的椭圆曲线是NIST标准的P-384椭圆曲线。OEM 必须始终对此密钥保密。OEM 在嵌入式控制器的 OTP(一次性可编程)存储器中对用于验证签名的公钥进行编程。嵌入式控制器安全引导加载程序使用存储在 OTP 中的 ECDSA 公钥对 OEM 固件映像进行身份验证,作为嵌入式控制器安全启动序列的一部分。
嵌入式控制器安全启动顺序
下面总结了Microchip在多个器件(包括CEC1712)中实现的嵌入式控制器安全启动序列:
1. 在POR或芯片复位后,RSMRST#引脚为三态,并在外部拉低以保持系统复位。
2. 嵌入式控制器引导ROM初始化设备(即采样带,清除内存等)。
3. 嵌入式控制器引导 ROM 执行安全引导加载程序,用于验证 SPI 闪存映像的 ECDSA 签名。
4. 如果映像加载成功(成功 = 有效真实映像),启动 ROM 将保护设备(例如,清除加密内存、锁定密钥等)并跳转到固件应用程序代码(即 OEM 启动代码)。
5. 如果映像未成功加载(即签名检查失败),引导 ROM 将保护设备(例如,清除加密内存、锁定密钥等)并等待 POR 事件。系统无法引导。
随着 5G 蜂窝基础设施的快速增长、不断增长的网络和数据中心支持不断扩展的云计算,开发人员需要新的方法来确保操作系统保持安全和不受影响。
Microchip在其功能齐全的CEC1712 Arm® Cortex-M4®微控制器上推出的新型Soteria-G2定制固件,可为从外部SPI闪存启动的操作系统提供预启动模式下的硬件信任根保护的安全启动。
审核编辑:郭婷
全部0条评论
快来发表一下你的评论吧 !