2、硬件安全基础:嵌入式系统安全模型、攻击面分析、故障注入在安全评估中的角色
嵌入式系统早已渗透到汽车电子、工业控制、医疗设备、智能家居与航天航空等关键领域。然而,与通用计算平台不同,嵌入式系统长期运行在物理可接触的环境中,攻击者不仅可以通过软件漏洞发起远程攻击,更可以通过电源、时钟、电磁干扰、激光照射等物理手段,对芯片内部状态进行非侵入式或半侵入式干扰,从而绕过安全机制。理解嵌入式系统的安全模型、攻击面以及故障注入在安全评估中的定位,是开展硬件安全测试的认知前提。本章将系统梳理嵌入式系统的分层安全架构、攻击面分类方法,并明确故障注入技术在整个安全评估流程中的角色与价值。
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)等。
- 供应链与生命周期攻击面:包括固件更新机制、调试接口的出厂配置、废弃设备的存储残留等。攻击者可能通过伪造更新包或利用旧版本固件的已知漏洞实施攻击。
进行攻击面分析时,建议采用以下操作流程:
- 硬件拆解与识别:打开设备外壳,识别主控芯片型号、外部存储器、电源管理IC、时钟源、调试接口位置。
- 接口枚举:使用万用表、逻辑分析仪或JTAGulator等工具,探测PCB上的测试点、排针、未连接焊盘,确认可用的调试接口。
- 固件提取尝试:通过UART Bootloader、SPI Flash读取、JTAG调试等方式尝试获取固件镜像。
- 总线嗅探:在设备正常运行时,监听内部总线(如SPI、I2C)上的数据流,寻找明文密钥或未加密的通信内容。
- 故障注入可行性评估:根据芯片封装类型(DIP、QFP、BGA)、电源引脚分布、时钟源位置,判断电压/时钟/激光注入的可行性和最佳注入点。
2.3 故障注入在安全评估中的角色:验证与突破
故障注入在安全评估中扮演着双重角色:一方面,它是验证安全机制有效性的关键测试手段;另一方面,它也是攻击者突破安全防护的实用技术。对于安全评估人员而言,故障注入的目标不是简单地破坏设备,而是回答以下问题:
- 安全启动(Secure Boot)是否能在电压波动、时钟抖动等异常条件下仍然可靠?
- 固件中的签名校验逻辑是否存在可被故障注入跳过的窗口期?
- 安全元件(SE)在遭受激光攻击时,是否仍能保护密钥不被读出?
- 系统在故障注入后是否进入安全状态(如死机、复位),还是落入不安全状态(如跳过认证、开放调试接口)?
故障注入安全评估的典型流程包括:
| 阶段 | 具体工作 | 输出物 |
|---|---|---|
| 目标分析 | 确定攻击目标(如绕过Boot、提取密钥)、分析芯片架构和时钟/电源树 | 攻击目标清单、芯片资料汇总 |
| 参数扫描 | 调整电压毛刺幅度、宽度、触发延迟;时钟毛刺频率、占空比;激光功率、位置 | 故障注入参数-效果映射表 |
| 效果分类 | 将故障结果分为:无影响、设备复位、程序跑飞、安全机制绕过、数据损坏 | 故障效果分类统计 |
| 漏洞验证 | 对可重复的“安全机制绕过”效果进行多次验证,确认其稳定性和可利用性 | 漏洞报告、PoC代码 |
| 风险评估 | 结合攻击成本、所需设备、攻击时间,评估该故障注入路径的实际威胁等级 | 风险评估报告 |
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时,芯片偶尔会出现“校验通过但实际加载了未签名固件”的现象。
实际操作步骤:
- 使用ChipWhisperer的Trigger引脚连接STM32的NRST,设置上升沿触发。
- 编写Python脚本,控制毛刺参数(宽度、幅度、延迟)进行自动扫描,每次注入后检查芯片是否进入用户程序(通过观察LED闪烁模式判断)。
- 在参数扫描过程中,记录每次注入的参数和结果。经过约2000次注入,发现约3%的概率出现“LED以非预期模式闪烁”,表明安全启动被绕过。
- 对成功绕过的样本进行重复验证,确认该参数组合(宽度5ns、幅度1.2V、延迟150μs)的成功率约为2.8%。
- 在成功绕过安全启动后,通过修改用户程序中的串口初始化代码,将固件内容通过UART导出。
结果对比:
| 测试条件 | 注入次数 | 成功绕过次数 | 成功率 |
|---|---|---|---|
| 无毛刺(对照组) | 100 | 0 | 0% |
| 毛刺宽度3ns,幅度0.8V | 500 | 0 | 0% |
| 毛刺宽度5ns,幅度1.2V | 2000 | 56 | 2.8% |
| 毛刺宽度8ns,幅度1.5V | 300 | 12 | 4%(但芯片损坏3块) |
风险与代价:在测试过程中,由于毛刺幅度过大(1.5V以上)导致3块芯片永久损坏。此外,成功绕过的概率较低,需要大量重复注入,测试耗时约6小时。该漏洞的实际利用需要攻击者具备物理接触设备的能力,且需要定制毛刺注入设备,因此综合威胁等级评定为“中高”。
复盘经验:
- 故障注入参数存在“有效窗口”,并非幅度越大越好。过大的毛刺容易导致芯片直接复位或损坏,而适当的参数组合才能精准干扰特定指令。
- 触发点的选择至关重要。在本案例中,延迟150μs恰好对应签名校验函数的比较指令执行时刻,这需要结合芯片的启动时序和固件大小进行估算。
- 安全评估不仅要证明“可绕过”,还要评估“可利用性”。本案例中虽然成功绕过了安全启动,但攻击者仍需将恶意固件写入Flash,这需要额外的写入通道(如SPI Flash编程器),实际攻击链比单纯故障注入更长。
2.5 常见误区与总结复盘
在嵌入式系统安全评估中,初学者常陷入以下误区:
- 误区一:认为故障注入是“暴力破坏”。实际上,精准的故障注入需要深入理解芯片架构、指令执行时序和电源/时钟树,是一种精细的“外科手术式”攻击。
- 误区二:只关注软件漏洞,忽视物理攻击面。许多安全评估报告只做固件逆向和网络渗透测试,完全忽略UART、JTAG、电源引脚等物理入口,导致严重的安全隐患未被发现。
- 误区三:故障注入测试“一次成功”就结束。故障注入具有概率性,单次成功可能只是偶然。必须进行多次重复测试,统计成功率,并分析失败案例的原因(是参数偏移还是芯片个体差异)。
- 误区四:忽略故障注入后的系统状态。有些故障注入虽然导致设备死机或复位,但攻击者可以利用这种异常状态(如复位后进入Bootloader模式)进一步攻击。评估时应记录所有故障后的系统行为,而不仅仅是“是否绕过安全机制”。
总结:嵌入式系统安全模型强调分层防御与信任根,攻击面分析需要覆盖物理、逻辑、侧信道和供应链多个维度。故障注入在安全评估中扮演着“验证者”和“突破者”的双重角色,其核心价值在于发现传统软件测试无法覆盖的硬件安全漏洞。对于安全工程师而言,掌握电压毛刺、时钟毛刺和激光注入的基本原理与操作流程,是构建完整嵌入式安全评估能力的关键一步。在实际项目中,建议将故障注入测试纳入安全开发生命周期(SDL),在产品设计阶段就考虑抗故障注入的硬件加固措施(如电压监测电路、时钟失效检测、冗余校验),从而在源头提升系统的物理安全韧性。