2、硬件安全基础:嵌入式系统安全模型、攻击面分析、故障注入在安全评估中的角色

嵌入式系统早已渗透到汽车电子、工业控制、医疗设备、智能家居与航天航空等关键领域。然而,与通用计算平台不同,嵌入式系统长期运行在物理可接触的环境中,攻击者不仅可以通过软件漏洞发起远程攻击,更可以通过电源、时钟、电磁干扰、激光照射等物理手段,对芯片内部状态进行非侵入式或半侵入式干扰,从而绕过安全机制。理解嵌入式系统的安全模型、攻击面以及故障注入在安全评估中的定位,是开展硬件安全测试的认知前提。本章将系统梳理嵌入式系统的分层安全架构、攻击面分类方法,并明确故障注入技术在整个安全评估流程中的角色与价值。

嵌入式系统安全模型与故障注入角色 分层安全模型 应用层安全(App/OS) 固件/驱动层(Bootloader/RTOS) 硬件层(SoC/安全元件/总线) 物理层(电源/时钟/封装/引脚) 攻击面分类 软件攻击面(网络/固件/API) 物理攻击面(UART/JTAG/SPI/I2C) 侧信道攻击面(功耗/电磁/时序) 故障注入攻击面(电压/时钟/激光/EM) 故障注入在安全评估中的角色 安全机制验证(绕过Boot保护) 固件提取/代码泄露测试 安全启动/信任根评估 密钥/证书保护强度验证 故障注入安全评估流程 威胁建模 → 攻击面识别 → 故障注入测试 → 安全机制验证 → 风险评估 → 加固建议 1. 威胁建模 资产/攻击者/目标 2. 攻击面识别 接口/引脚/总线/电源 3. 故障注入测试 电压/时钟/激光/EM 4. 安全机制验证 Boot/加密/访问控制 5. 评估 风险/加固 故障注入是连接物理攻击面与安全机制验证的关键桥梁 电压毛刺 时钟毛刺 激光注入 电磁干扰

2.1 嵌入式系统安全模型:从分层防御到信任根

嵌入式系统的安全模型不能简单照搬IT服务器的“边界防护”思路,因为其物理环境、资源约束和生命周期差异巨大。一个实用的嵌入式安全模型通常采用分层防御(Defense in Depth)架构,从底层的物理安全到顶层的应用安全逐层设防。每一层都有独立的安全机制,即使某一层被突破,攻击者仍需面对后续层级的防护。

安全层级典型机制故障注入关注点
物理层芯片封装、防拆检测、屏蔽罩激光切割、探针台、去封装
硬件层安全元件(SE)、TPM、eFuse、调试接口锁定电压毛刺绕过安全状态机、时钟毛刺扰动总线仲裁
固件/驱动层安全启动(Secure Boot)、签名校验、JTAG熔断跳过Boot校验、篡改固件加载流程
应用层加密存储、访问控制、安全更新故障注入获取解密密钥或绕过认证

在分层模型中,信任根(Root of Trust)是安全的基础。通常信任根固化在芯片内部的ROM或一次性可编程(OTP)存储中,负责验证后续加载的每一级固件。故障注入攻击的核心目标之一,就是破坏信任根到应用层的信任链传递。例如,攻击者可以在CPU执行Boot ROM中的签名校验指令时,通过电压毛刺使比较器输出错误结果,从而加载未签名的恶意固件。

核心原理:嵌入式安全模型的关键在于“信任链”的完整性。每一级引导代码必须验证下一级代码的签名或哈希,而信任链的起点(信任根)必须物理不可篡改。故障注入正是针对信任链中的“验证点”进行干扰,使验证逻辑在特定时刻产生错误判断。

2.2 攻击面分析:从物理接触到逻辑漏洞

攻击面是指系统所有可被攻击者利用的入口点。嵌入式系统的攻击面远比纯软件系统广泛,因为攻击者可以直接接触硬件。完整的攻击面分析应覆盖以下四个维度:

  • 物理接口攻击面:包括UART、JTAG、SWD、SPI、I2C、USB、以太网等调试和通信接口。这些接口往往暴露在PCB上,攻击者可通过逻辑分析仪、调试探针直接读写内存或控制CPU。
  • 侧信道攻击面:通过测量设备的功耗、电磁辐射、运行时间等物理量,推断内部密钥或敏感数据。例如,在AES加密过程中采集功耗曲线,通过差分功耗分析(DPA)恢复密钥。
  • 故障注入攻击面:通过外部干扰使芯片产生计算错误、控制流跳转或状态机紊乱。常见手段包括电压毛刺(VCC Glitch)、时钟毛刺(Clock Glitch)、电磁脉冲(EMI)、激光照射(Laser)等。
  • 供应链与生命周期攻击面:包括固件更新机制、调试接口的出厂配置、废弃设备的存储残留等。攻击者可能通过伪造更新包或利用旧版本固件的已知漏洞实施攻击。

进行攻击面分析时,建议采用以下操作流程:

  1. 硬件拆解与识别:打开设备外壳,识别主控芯片型号、外部存储器、电源管理IC、时钟源、调试接口位置。
  2. 接口枚举:使用万用表、逻辑分析仪或JTAGulator等工具,探测PCB上的测试点、排针、未连接焊盘,确认可用的调试接口。
  3. 固件提取尝试:通过UART Bootloader、SPI Flash读取、JTAG调试等方式尝试获取固件镜像。
  4. 总线嗅探:在设备正常运行时,监听内部总线(如SPI、I2C)上的数据流,寻找明文密钥或未加密的通信内容。
  5. 故障注入可行性评估:根据芯片封装类型(DIP、QFP、BGA)、电源引脚分布、时钟源位置,判断电压/时钟/激光注入的可行性和最佳注入点。
风险提示:攻击面分析过程中,不当操作可能导致设备永久损坏。例如,过高的电压毛刺可能击穿芯片内部晶体管,激光注入可能烧毁金属层。建议在测试前准备多块相同型号的备用设备,并先从低强度、短时长的注入参数开始尝试。

2.3 故障注入在安全评估中的角色:验证与突破

故障注入在安全评估中扮演着双重角色:一方面,它是验证安全机制有效性的关键测试手段;另一方面,它也是攻击者突破安全防护的实用技术。对于安全评估人员而言,故障注入的目标不是简单地破坏设备,而是回答以下问题:

  • 安全启动(Secure Boot)是否能在电压波动、时钟抖动等异常条件下仍然可靠?
  • 固件中的签名校验逻辑是否存在可被故障注入跳过的窗口期?
  • 安全元件(SE)在遭受激光攻击时,是否仍能保护密钥不被读出?
  • 系统在故障注入后是否进入安全状态(如死机、复位),还是落入不安全状态(如跳过认证、开放调试接口)?

故障注入安全评估的典型流程包括:

阶段具体工作输出物
目标分析确定攻击目标(如绕过Boot、提取密钥)、分析芯片架构和时钟/电源树攻击目标清单、芯片资料汇总
参数扫描调整电压毛刺幅度、宽度、触发延迟;时钟毛刺频率、占空比;激光功率、位置故障注入参数-效果映射表
效果分类将故障结果分为:无影响、设备复位、程序跑飞、安全机制绕过、数据损坏故障效果分类统计
漏洞验证对可重复的“安全机制绕过”效果进行多次验证,确认其稳定性和可利用性漏洞报告、PoC代码
风险评估结合攻击成本、所需设备、攻击时间,评估该故障注入路径的实际威胁等级风险评估报告
经验之谈:在实际评估中,电压毛刺是最容易上手的故障注入手段。建议初学者从电压毛刺开始,掌握故障注入的基本参数调整方法后,再逐步尝试时钟毛刺和激光注入。激光注入虽然精度最高,但设备成本昂贵(数十万至百万元级),且对操作者的封装技术(如化学去封装、FIB切割)要求极高。

2.4 案例拆解:通过电压毛刺绕过STM32F4安全启动

下面通过一个典型的评估案例,展示故障注入在安全评估中的完整应用过程。

背景与目标:某工业控制器使用STM32F407芯片,启用了安全启动功能(通过读取Option Bytes中的RDP级别2来禁止调试接口)。安全评估团队的目标是验证能否通过电压毛刺绕过安全启动,从而读取固件。

初始现象:在正常条件下,芯片上电后执行Boot ROM代码,验证用户Flash中的固件签名。由于RDP级别2已锁定,JTAG/SWD接口完全不可用,无法直接读取Flash。

关键参数与测试环境:

  • 芯片工作电压:3.3V,内核电压1.2V(由内部LDO提供)
  • 故障注入设备:ChipWhisperer-Lite(支持电压毛刺和时钟毛刺)
  • 触发方式:通过监测芯片的NRST引脚上升沿作为触发信号,延迟设定为Boot ROM执行到签名校验指令的时间点
  • 毛刺参数初始范围:毛刺宽度 1-10ns,毛刺幅度 0.5-1.5V(叠加在3.3V上形成下冲)

分析判断过程:团队首先通过查阅STM32F407参考手册,确认Boot ROM中签名校验代码位于0x00000000地址附近,且校验过程大约需要几百微秒。通过多次尝试,发现当毛刺宽度为5ns、幅度为1.2V、延迟为Boot启动后约150μs时,芯片偶尔会出现“校验通过但实际加载了未签名固件”的现象。

实际操作步骤:

  1. 使用ChipWhisperer的Trigger引脚连接STM32的NRST,设置上升沿触发。
  2. 编写Python脚本,控制毛刺参数(宽度、幅度、延迟)进行自动扫描,每次注入后检查芯片是否进入用户程序(通过观察LED闪烁模式判断)。
  3. 在参数扫描过程中,记录每次注入的参数和结果。经过约2000次注入,发现约3%的概率出现“LED以非预期模式闪烁”,表明安全启动被绕过。
  4. 对成功绕过的样本进行重复验证,确认该参数组合(宽度5ns、幅度1.2V、延迟150μs)的成功率约为2.8%。
  5. 在成功绕过安全启动后,通过修改用户程序中的串口初始化代码,将固件内容通过UART导出。

结果对比:

测试条件注入次数成功绕过次数成功率
无毛刺(对照组)10000%
毛刺宽度3ns,幅度0.8V50000%
毛刺宽度5ns,幅度1.2V2000562.8%
毛刺宽度8ns,幅度1.5V300124%(但芯片损坏3块)

风险与代价:在测试过程中,由于毛刺幅度过大(1.5V以上)导致3块芯片永久损坏。此外,成功绕过的概率较低,需要大量重复注入,测试耗时约6小时。该漏洞的实际利用需要攻击者具备物理接触设备的能力,且需要定制毛刺注入设备,因此综合威胁等级评定为“中高”。

复盘经验:

  • 故障注入参数存在“有效窗口”,并非幅度越大越好。过大的毛刺容易导致芯片直接复位或损坏,而适当的参数组合才能精准干扰特定指令。
  • 触发点的选择至关重要。在本案例中,延迟150μs恰好对应签名校验函数的比较指令执行时刻,这需要结合芯片的启动时序和固件大小进行估算。
  • 安全评估不仅要证明“可绕过”,还要评估“可利用性”。本案例中虽然成功绕过了安全启动,但攻击者仍需将恶意固件写入Flash,这需要额外的写入通道(如SPI Flash编程器),实际攻击链比单纯故障注入更长。

2.5 常见误区与总结复盘

在嵌入式系统安全评估中,初学者常陷入以下误区:

  • 误区一:认为故障注入是“暴力破坏”。实际上,精准的故障注入需要深入理解芯片架构、指令执行时序和电源/时钟树,是一种精细的“外科手术式”攻击。
  • 误区二:只关注软件漏洞,忽视物理攻击面。许多安全评估报告只做固件逆向和网络渗透测试,完全忽略UART、JTAG、电源引脚等物理入口,导致严重的安全隐患未被发现。
  • 误区三:故障注入测试“一次成功”就结束。故障注入具有概率性,单次成功可能只是偶然。必须进行多次重复测试,统计成功率,并分析失败案例的原因(是参数偏移还是芯片个体差异)。
  • 误区四:忽略故障注入后的系统状态。有些故障注入虽然导致设备死机或复位,但攻击者可以利用这种异常状态(如复位后进入Bootloader模式)进一步攻击。评估时应记录所有故障后的系统行为,而不仅仅是“是否绕过安全机制”。

总结:嵌入式系统安全模型强调分层防御与信任根,攻击面分析需要覆盖物理、逻辑、侧信道和供应链多个维度。故障注入在安全评估中扮演着“验证者”和“突破者”的双重角色,其核心价值在于发现传统软件测试无法覆盖的硬件安全漏洞。对于安全工程师而言,掌握电压毛刺、时钟毛刺和激光注入的基本原理与操作流程,是构建完整嵌入式安全评估能力的关键一步。在实际项目中,建议将故障注入测试纳入安全开发生命周期(SDL),在产品设计阶段就考虑抗故障注入的硬件加固措施(如电压监测电路、时钟失效检测、冗余校验),从而在源头提升系统的物理安全韧性。