newaetech/chipshouter-picoemp
GitHub: newaetech/chipshouter-picoemp
基于 Raspberry Pi Pico 的低成本开源电磁故障注入工具,专为零基础学习和爱好者研究设计。
Stars: 708 | Forks: 82
# ChipSHOUTER-PicoEMP
[][cc-by-sa]

PicoEMP 是一款低成本的电磁故障注入 (EMFI) 工具,专为自学和爱好者研究而设计。在安全屏蔽罩下,它看起来是这样的:

你可以在[介绍视频](https://www.youtube.com/watch?v=nB5arJi-tVE)中看到该设计的一些细节。
## 背景
[ChipSHOUTER](http://www.chipshouter.com) 是由 [NewAE Technology](http://www.newae.com) 的 Colin 设计的高端电磁故障注入 (EMFI) 工具。虽然它不是第一个 commercially available 的 EMFI 工具,但 ChipSHOUTER 是第一个“容易购买”(即使价格昂贵)且拥有大量公开文档的工具。该工具*不是*开源的,但在[用户手册](https://github.com/newaetech/ChipSHOUTER/tree/master/documentation)中确实包含了关于设计和架构的各种详细描述。ChipSHOUTER 的设计优化大致按以下顺序进行:(1) 安全操作,(2) 高性能,(3) 易用性,最后是 (4) 成本。这导致该工具覆盖了许多用例,但对许多人来说可能有些大材小用(且成本过高)。此外,获取安全测试/认证并不便宜,必须计入产品销售价格中。
PicoEMP 试图填补 ChipSHOUTER 在低端市场留下的空白。这个 PicoEMP 项目*不是* ChipSHOUTER。相反,它旨在展示一个“精简版”工具,其设计优化大致按以下顺序:(1) 安全操作,(2) 成本,(3) 易用性,(4) 性能。尽管专注于安全和低成本,但它的效果*出奇地*好。它也*不*作为成品出售——你需要自己负责构建它,确保其符合相关的安全要求/认证,我们对之后发生的一切完全免责。请**仅**在你自己构建和控制 PicoEMP,并完全了解其操作和风险的情况下使用它。它*不是*为专业或教育环境设计的,因为这些环境期望工具符合安全认证(ChipSHOUTER 是为这些用例设计的)。
作为一个开源项目,它也收集了社区各成员的意见,并欢迎你的贡献!它还有各种变体版本,包括:
* TODO 链接到人们的修改版。
## 构建 PicoEMP
PicoEMP 使用 Raspberry Pi Pico 作为控制器,灵感来自 @nezza 将其用于 debug-n-dump 工具。你也可以使用 Arduino 或其他微控制器。你基本上只需要几样东西:
1. 用于驱动高压变压器的 PWM 输出。
2. 用于产生脉冲的脉冲引脚。
3. 用于监控高压状态的状态引脚。
构建 PicoEMP 有两种选择:(1) 完全从头构建,或 (2) 简易组装构建。
### 从头构建
PCB *主要*是单层的。其原始版本是在 Bantam PCB 铣床上铣削的,最终的“生产”版本设计为仍允许这种简单的铣削工艺。你可以在 [gerbers](hardware/gerbers) 文件夹中找到详细信息,包括 Bantam 优化的文件,这些文件移除了一些较小的过孔(用于安装孔),并要求你表面贴装 Raspberry Pi Pico。这是经过一些修改测试的 PCB 'rev3' 版本:

如果你有时间,也可以从 [gerbers](hardware/gerbers) 订购“真正的”PCB。
BOM 和构建细节在 [hardware](hardware) 文件夹中有描述。如果你找不到塑料屏蔽罩(使用的是 Hammond 1551BTRD 的上半部分),你也可以找到简单的 3D 打印屏蔽罩。官方屏蔽罩成本低廉,可从 Digikey/Mouser/Newark 购买,因此你可以与你需要的所有其他东西一起购买。
**重要提示**:塑料屏蔽罩对于安全操作至关重要。虽然输出本身与输入连接隔离,但你仍然很容易在暴露的高压电容器和电路上**触电**。**切勿**在没有屏蔽罩的情况下操作设备。
### 简易组装构建
简易组装版使用“基本完整”的 SMD 电路板,你需要焊接 Raspberry Pi Pico、开关和通孔接头。目前仅在 [NewAE Store](https://store.newae.com/chipshouter-picoemp) 有售。我们正在努力将其列入 Mouser,以便提供更便宜的全球运输(NewAE 商店的费率不佳,且由于加拿大邮政系统在国际运输方面的问题,主要通过 DHL 报价)。
### 编程 PicoEMP
你需要使用 [firmware](firmware) 目录中的固件对 PicoEMP 进行编程。你也可以在微控制器上运行其他任务。
### 构建 EM 注入探头(探针 / 线圈)
你还需要一个“注入探头”,通常由铁氧体磁芯和一些缠绕在其上的导线制成。你可以在 ChipSHOUTER 套件中看到此类磁芯的示例。下图显示了一些自制和商用探头:

你可以使用合适的 SMA 连接器、漆包线和铁氧体磁芯材料自制。请参阅 [injection_tips](hardware/injection_tips) 文件夹以获取更多示例和构建探针的详细信息。
*读者注:请通过向此仓库提交 pull-request 来提交你自己的示例,如果有更多探针几何形状的示例就太好了*
你可以在研究论文中找到自制磁芯的更多示例,例如:
* A. Cui, R. Housley, "BADFET: Defeating Modern Secure Boot Using Second-Order Pulsed Electromagnetic Fault Injection," USENIX Workshop on Offensive Technologies (WOOT 17), 2017. [论文链接.](https://www.usenix.org/conference/woot17/workshop-program/presentation/cui) [幻灯片链接.](https://github.com/RedBalloonShenanigans/BADFET)
* J. Balasch, D. Arumí and S. Manich, "Design and validation of a platform for electromagnetic fault injection," 2017 32nd Conference on Design of Circuits and Integrated Systems (DCIS), 2017, pp. 1-6. [论文链接.](https://upcommons.upc.edu/bitstream/handle/2117/116688/bare_conf.pdf)
* J. Toulemont, G. Chancel, J. M. Galliere, F. Mailly, P. Nouet and P. Maurine, "On the scaling of EMFI probes," 2021 Workshop on Fault Detection and Tolerance in Cryptography (FDTC), 2021. [论文链接.](https://ieeexplore.ieee.org/abstract/document/9565575) [幻灯片链接.](https://jaif.io/2021/media/JAIF2021%20-%20Toulemont.pdf)
* LimitedResults. "Enter the Gecko," 2021. [博客链接](https://limitedresults.com/2021/06/enter-the-efm32-gecko/)
* C. Gaine, J-P. Nikolovski, D. Aboulkassimi, J-M. Dutertre. "New probe design for hardware characterization by ElectroMagnetic Fault Injection," EMC Europe 2022 [论文链接.] (https://hal-cea.archives-ouvertes.fr/cea-03657852/file/article_archivesouvertes.pdf)
*
### 有用的参考资料
如果你不知道从哪里开始 FI,你可能会发现 [Hardware Hacking Handbook](https://nostarch.com/hardwarehacking) 中的几章很有用。
你可以在这个 [TI CC SimpleLink 攻击演示](https://github.com/KULeuven-COSIC/SimpleLink-FI/blob/main/notebooks/5_ChipSHOUTER-PicoEMP.ipynb)中看到 PicoEMP 用于真实攻击的演示。
## 使用 PicoEMP
PicoEMP 的一般用法如下:
1. 按下“ARM”按钮。红色的“ARMING”LED 会立即亮起,告诉你它正在尝试给高压充电。
2. 红色的“HV”LED 会在几秒钟后亮起,表示它已充电至“某个电压”。
3. 将探针尖端放置在目标上方。
4. 按下“Pulse”按钮。
你可以在[介绍视频](https://www.youtube.com/watch?v=nB5arJi-tVE)中看到更多相关示例。
你甚至可以使用 Raspberry Pi Pico 攻击 Raspberry Pi "普通版"!这是一个在 Raspberry Pi 上攻击 RSA 签名的演示(演示代码取自 Colin 的 [Remoticon 2021 演讲](https://github.com/colinoflynn/remoticon-2021-levelup-hardware-hacking/tree/master/rpi-glitching)):

**警告**:高压将施加在 SMA 连接器两端。如果存在注入探头(线圈),它将吸收大部分功率。如果你让 SMA 连接器开路,你将在该 SMA 上施加高压脉冲,并可能触电。作为一般的“最佳做法”,请勿触摸输出 SMA 尖端,并将输出视为带有高压。
完整的 ChipSHOUTER 会检测到连接器尖端缺失并拒绝开启高压,PicoEMP 没有此故障保护功能!
## 关于高压隔离
大多数 EMFI 工具产生高压(类似于相机闪光灯)。许多以前的开源 EMFI 工具设计运行良好,但[让用户暴露在高压下](https://github.com/RedBalloonShenanigans/BADFET)。只要你正确使用该工具,这没问题,但当然总是存在抓住带电工具的风险!这种常见的设计选择是因为设计 EMFI 工具最简单的方法是使用“低侧开关”(如果你好奇,在我的[书](https://www.nostarch.com/hardwarehacking)中也提到了这些设计选择的简短说明)。使用低侧开关时,输出连接器总是“带电的”,这带来了严重的触电危险。
PicoEMP 通过浮置高压侧来解决这个问题,这意味着 EMFI 探针输出和输入电压地之间没有电气路径。有了隔离的高压输出,我们可以安全地使用简单的“低侧开关”。由于高频尖峰,仍然会有一些电流流过,所以这并不*完美*,但它在实践中效果很好(好到你触电的几率会降低)。
这里的警告是,为了使其工作,你还需要隔离你的栅极驱动。有多种[解决方案](https://www.analog.com/en/technical-articles/powering-the-isolated-side-of-your-half-bridge-configuration.html),其中最简单的是栅极驱动变压器 (GDT)。PicoEMP 使用变压器架构,并进行了一些简化以进一步减少 BOM 数量。
更多设计细节可在 [hardware](hardware) 文件夹中找到。
### 用于验证隔离的耐压测试
简易组装版已经过耐压测试。该测试验证隔离是否存在,且未被 PCB 上残留的助焊剂等物质破坏。
该测试在 SMA 连接器焊盘与短接在一起的低压信号之间施加高压 (1000V)。测试在 1000V DC 下进行,如果在 60 秒的测试期间流过的电流小于 1 uA,则测试通过。请注意,此限制*远*低于大多数行业标准限制。
### ChipSHOUTER 和 PicoEMP 之间的技术差异
从技术角度来看的主要区别:
* ChipSHOUTER 使用更强大的高压电路和变压器(高达 ~30W vs ~0.2W),这使其具有几乎无限的 Glitch 交付能力,通常仅受限于你的探针尖端。PicoEMP 恢复较慢,通常 Glitch 之间约 1 到 4 秒。
* ChipSHOUTER 具有更大的内部能量存储和更强大的输出驱动器。
* ChipSHOUTER 具有从 150V 到 500V 的可控高压设置。PicoEMP 产生 ~250V,有一些反馈但未经校准。
**注意**:PicoEMP 允许通过控制驱动信号来控制输出脉冲大小。这不太可靠(输出变异性较大),但符合使用最低成本控制方法的目标。
## 许可证
本作品根据 [Creative Commons Attribution-ShareAlike 3.0 International License][cc-by-sa] 授权。
ChipSHOUTER 是 NewAE Technology Inc. 的商标,在美国、欧盟和其他司法管辖区注册。
PicoEMP 是 NewAE Technology Inc. 的商标。
标签:ChipSHOUTER, DIY硬件, EMFI, meg, MicroPython, NewAE, PicoEMP, 低成本, 侧信道攻击, 信息安全, 安全研究工具, 客户端加密, 客户端加密, 嵌入式安全, 开源硬件, 故障攻击, 物联网安全, 电磁故障注入, 硬件安全, 硬件黑客, 脉冲发生器