
电磁故障注入(EMFI)攻击简介
# 面向初学者的故障注入攻击简介:解密电磁故障注入(EMFI)
**目录**
- [故障注入攻击简介](#故障注入攻击简介)
- [什么是电磁故障注入(EMFI)?](#什么是电磁故障注入emfi)
- [EMFI 的工作原理:从理论到实践](#emfi-的工作原理从理论到实践)
- [了解电磁干扰](#了解电磁干扰)
- [EMFI 对集成电路(IC)的影响](#emfi-对集成电路ic的影响)
- [紧凑的 EMFI 设置:组件和组装](#紧凑的-emfi-设置组件和组装)
- [所需设备](#所需设备)
- [典型设置图](#典型设置图)
- [安全注意事项](#安全注意事项)
- [EMFI 实战:现实世界中的攻击场景](#emfi-实战现实世界中的攻击场景)
- [案例研究 1:提取加密密钥](#案例研究-1提取加密密钥)
- [案例研究 2:对安全微控制器的故障攻击](#案例研究-2对安全微控制器的故障攻击)
- [案例研究 3:嵌入式系统芯片上的 EMFI](#案例研究-3嵌入式系统芯片上的-emfi)
- [使用 EMFI 检测漏洞](#使用-emfi-检测漏洞)
- [扫描故障响应](#扫描故障响应)
- [使用 Python 和 Bash 自动化故障注入测试](#使用-python-和-bash-自动化故障注入测试)
- [缓解故障注入攻击:防御措施](#缓解故障注入攻击防御措施)
- [提升您的知识:资源和社区](#提升您的知识资源和社区)
- [结论](#结论)
- [参考资料](#参考资料)
---
## 故障注入攻击简介
故障注入攻击是一类硬件攻击,其中攻击者在设备的功能上故意引入错误(故障),其目标是绕过安全检查、提取敏感数据或普遍破坏系统的可信度。随着从智能卡到物联网设备的嵌入式系统上运行的安全应用的激增,这种技术尤为相关。
故障注入可通过多种方法执行:
- 电压/时钟故障
- 激光故障注入
- **电磁故障注入(EMFI)**
- 温度/环境操控
在这些方法中,**EMFI** 作为一种灵活的、非接触式技术脱颖而出,它利用短时间的电磁(EM)能量脉冲来破坏硅片的目标区域,导致暂时故障。这篇文章重点介绍在网络安全研究和实际攻击中使用的 EMFI。
---
## 什么是电磁故障注入(EMFI)?
**电磁故障注入(EMFI)** 是一种先进的技术,其中一束受控的电磁能量被引导至集成电路(IC)或微控制器的特定部位。其目的是通过引入故障(如位翻转、时间违例或指令跳过)来干扰设备的正确操作。
### 关键特性:
- **非侵入性**:无需打开封装或物理接触内部硅片。
- **精确**:可针对芯片内部的特定功能单元(如CPU核、I/O)。
- **可重复**:适当的设置可以实现一致、可重复的故障注入。
- **强大**:对具有安全功能(如安全启动、加密引擎或防篡改)的芯片尤为有效。
### 概念概述

*图:电磁故障注入的原理(简化)*
EMFI 技术通常:
- 使用基于线圈的探针(自制或商用)集中 EM 场。
- 使用 EM 脉冲发生器产生纳秒级的高电压脉冲。
- 与系统时钟同步,以最大化在敏感计算阶段造成有意义故障的概率。
**来源:** [arXiv:2509.18341v1](https://arxiv.org/html/2509.18341v1),[关于紧凑型 EMFI 的 Ledger 博客](https://www.ledger.com/blog/compact-em)
---
## EMFI 的工作原理:从理论到实践
### 了解电磁干扰
**电磁干扰(EMI)** 发生在外部电磁场干扰电子电路的正常操作时。在故障注入的背景下,这种攻击是有焦点的、故意的且高度受控的。
**EMFI 背后的物理学:**
- 麦克斯韦方程描述了 EM 场的传播和与材料的相互作用。
- 快速、高能瞬态在受害电路中产生不需要的电流。
- 在数字系统中,这些可以在关键的门电路或存储单元的精确时刻引起电压(或电流)浪涌,导致故障。
### EMFI 对集成电路(IC)的影响
当精准制作的 EM 脉冲发射到设备上时,可能的攻击效果包括:
- **时间违例**:数据未正确锁存,或控制序列出错。
- **指令跳过**:CPU 无意间跳过指令。
- **位翻转**:由于引入电流,存储或寄存器中的位发生翻转。
- **安全性突破**:安全检查或条件分支可以被破坏。
**示例:**
一个微控制器正在执行密码验证代码。EMFI 攻击可以翻转该验证的结果,从而绕过身份验证并授予未经授权的访问权限。
---
## 紧凑的 EMFI 设置:组件和组装
在发起攻击之前,让我们了解安全实验室中的典型 EMFI 设置。
### 所需设备
1. **脉冲发生器** — 生成快速、精确的高压脉冲(通常高达数百伏,宽度可小至数纳秒)。
2. **EM 注入探针** — 通常是一个小型线圈(环形探针),放置在目标芯片上方。
3. **示波器/逻辑分析仪** — 用于监视系统响应并协助时序校准。
4. **触发和同步设备** — 确保在正确的时间注入故障。
5. **目标设备** — 要测试的嵌入式系统、微控制器或 SoC。
6. **定位系统** — XYZ 微定位仪用于精确探针对准。
7. **屏蔽和安全设备** — 防止附带干扰和伤害。
**注意:** 一些高级设置使用电动台、计算机可控延迟,甚至机器学习来自动化流程。
### 典型设置图
```plaintext
+---------------------+ 同轴电缆 +-----------------------+
| 脉冲发生器 |--------------------->| EM 探针(环形/线圈) |
+---------------------+ +-----------------------+
|
V
+-----------+
| 目标设备 |
+-----------+
|
v
+---------+ 触发/同步 +-------------+ USB/串口 +-----------+
| 主机 PC |<--------------------->| 示波器/逻辑分析仪 |--------------->| 主机 PC |
+---------+ +-------------+ +-----------+
(控制,定时) (监视响应)
安全注意事项
- 高电压:脉冲发生器可以输出危险电压;极其谨慎地操作。
- EM 场:需要进行屏蔽以局限攻击并最小化辐射。
- 设备损坏:重复的高能量脉冲可能永久损坏目标 IC。
EMFI 实战:现实世界中的攻击场景
案例研究 1:提取加密密钥
攻击概念
许多设备依赖于内部存储的加密密钥(例如,AES、RSA 密钥)。通过在加密计算期间(如 RSA 中的乘法)扰乱执行,攻击者可以引入故障,从而生成可以用来数学恢复秘密密钥的“错误输出”。
示例
- 目标:运行 RSA 签名计算的智能卡。
- 过程:在私钥计算期间应用 EMFI,以选择性地造成关键位的故障。
- 结果:使用多个错误输出和原始密文,通过一种称为差分故障分析的技术重建密钥。
差分故障分析流程
flowchart TD
A[设备执行加密算法] --> B[EMFI 在计算中引入故障]
B --> C[捕获输出(错误的密文/签名)]
C --> D[攻击者使用已知方程和多个错误输出]
D --> E[通过代数技术恢复密钥]
案例研究 2:对安全微控制器的故障攻击
用于支付卡、TPM 或身份验证令牌的现代微控制器包括安全功能——但 EMFI 可以绕过这些功能,暴露其秘密。
示例:跳过身份验证检查
假设目标代码段执行密码检查:
if (input_hash == stored_hash) {
grant_access();
}
EMFI 脉冲在比较过程中适时地执行,可以损坏 CPU 的控制流寄存器或标志,跳过条件,迫使错误地授予访问权。
演示:可视化控制流操作
| 周期 | 操作 | 寄存器状态 | EMFI 效果 | 输出 |
|---|---|---|---|---|
| T1 | 载入 input_hash | input_hash in R1 | - | - |
| T2 | 比较 input_hash 和 stored_hash | R1, R2 | EM pulse | 错误的比较结果 |
| T3 | 条件分支(如果相等则分支) | 条件检查 | 跳过 | 授予访问! |
案例研究 3:嵌入式系统芯片上的 EMFI
对于 SoC(例如,ARM Cortex-M,A53),EMFI 开启了广泛的攻击面:
- 启动 ROM
- 安全飞地(s)
- 实时代码解密
- 运行时数据认证
示例:对安全启动的攻击
SoC 可能会在启动时检查固件完整性。攻击者将 EMFI 脉冲与 CRC 验证例程同步,导致验证被跳过或错误地计算。设备随后引导攻击者修改的(恶意)固件。
现实世界参考:
在Creach Labs 研讨会中,研究人员展示了如何使用 EMFI 来妥协运行受信执行环境的 SoC。
使用 EMFI 检测漏洞
安全研究人员通常使用 EMFI 来表征新设备中的漏洞。过程包括系统性地探测、故障注入和观察设备响应。
扫描故障响应
步骤-by-步骤 过程:
- 识别敏感代码:应该在哪里进行攻击(例如,密码比较,加密例程)?
- 同步脉冲:使用 GPIO、串行输出或调试行以确保准确的时序。
- 变化参数:探索脉冲宽度、振幅、时间偏移和探针位置。
- 收集输出:存储设备响应、错误密文或调试日志以进行分析。
- 分类故障:使用脚本解析输出,并按故障类型进行分类——跳过的指令、位翻转、设备完全重置等。
扫描脚本示例(Bash + Python):
假设您的设备通过 UART 输出诊断信息,您想自动化故障分类。
Bash: 启动故障扫描,捕获每次注入的串行日志:
for delay in $(seq 0 100 5000); do
echo "Injecting at delay $delay ns"
./trigger_pulsegen --delay $delay --width 10 --voltage 200
cat /dev/ttyUSB0 > log_${delay}.txt &
sleep 0.5
pkill -f "cat /dev/ttyUSB0"
done
Python: 解析日志以查找故障模式(例如,寻找“FAULT DETECTED”):
import glob
for logfile in glob.glob("log_*.txt"):
with open(logfile) as f:
content = f.read()
if "FAULT DETECTED" in content:
print(f"{logfile}: Fault observed")
elif "RESET" in content:
print(f"{logfile}: Device reset detected")
else:
print(f"{logfile}: No fault")
使用 Python 和 Bash 自动化故障注入测试
大规模研究涉及将所有设备与软件自动化集成:
- 自动化探针定位(通过马达)
- 编程控制脉冲参数
- 实时数据采集和处理
- 基于观测结果的自适应目标设定
简单的 Python 自动化示例:
假设您有一个脉冲发生器和示波器的 API:
import pulsegen
import oscilloscope
# 连接设备
pulse = pulsegen.connect("COM4")
scope = oscilloscope.connect("USB0::0x1AB1::0x0588::DS1ET141904883")
delays = range(1000, 5000, 200) # 单位为 ns
for d in delays:
pulse.setup(delay=d, width=10, voltage=250) # 设置注入参数
pulse.fire() # 注入!
trace = scope.capture()
# 保存、分析或可视化捕获的踪迹:
filename = f"trace_{d}ns.csv"
with open(filename, "w") as f:
f.write(trace)
注意: 实际的自动化可能涉及复杂的库、错误处理和与探针定位器的集成。
缓解故障注入攻击:防御措施
随着 EMFI 的成熟,反制措施也在进步——硬件制造商现在正在设计具有故障抵抗力的芯片:
- 传感器:用于检测强 EM 场或电压异常的片上检测器。
- 冗余计算:关键逻辑被复制,并比较结果(双模块冗余,DMR)。
- 随机延迟/混淆:增加执行时间的噪声,增加精确定位的难度。
- 物理屏蔽:在 IC 敏感区域上加导电、吸收 EM 的屏障。
- 软件检测:软件监视不可能的状态(例如,逻辑中不可能的跳转)。
软件示例:三重计算进行验证:
// 伪代码
result1 = calc_hash(input);
result2 = calc_hash(input);
result3 = calc_hash(input);
if ((result1 == result2) && (result2 == result3))
use(result1);
else
trigger_alert();
提升您的知识:资源和社区
如果您渴望超越基础知识,以下资源和社区是无价的:
- 研究论文:
- 研讨会和工作坊:
- 开源工具:
- 博客和教程:
- 会议:
- CHES(加密硬件和嵌入式系统)
- COSADE(建设性侧信道分析与安全设计)
- RECON, Hardwear.io
结论
电磁故障注入(EMFI) 是硬件安全研究领域一种引人入胜的—尽管具挑战性的—工具。从最初的学术好奇心发展而来,现在已成为任何设计安全微控制器或芯片的人必须考虑的关键风险。即使是最基本的设备和脚本,攻击者(和研究者)也能进行精确、可重复且高度破坏性的硬件级入侵。
正如您已看到的:
- EMFI 可以绕过、降级或提取加密机密。
- 实际设置在许多实验室和专业人士的能力范围内。
- SoC 安全启动、智能卡和安全元件中现实世界的漏洞证明了 EMFI 的严重性。
- 防御性研究和安全芯片设计必须不断适应。
对于新手和老手来说,EMFI 既是一种需要管理的威胁—也是为我们数字世界进行未来保障的强大诊断工具。
参考资料
- 面向初学者的故障注入攻击简介(arXiv:2509.18341v1)
- 紧凑型电磁故障注入设置 — Ledger 博客
- 不要信任现代系统芯片——对 SoC 的电磁故障注入攻击 — Creach Labs 研讨会
- ChipWhisperer 项目
- 麦克斯韦方程组和电磁干扰基础 — 维基百科
- 故障注入与对策 — Embedded.com
您觉得这篇长篇指南有帮助吗?如果有,请与您的安全团队或硬件工程同事分享!欲了解更多高级技术或示例,请参阅上面资源和最新的硬件与嵌入式安全会议论文。
[如需反馈、纠正或贡献,请参阅原始 ArXiv 预印本和开源安全研究社区。]
