网络安全

芯片是最后一道防线,但它真的守得住吗:硬件安全入门——从调试接口、固件提取到侧信道攻击

2026-08-25 #硬件安全#JTAG#SWD#UART#固件提取#侧信道#故障注入#ChipWhisperer#JTAGulator

电影里总有这样的桥段:特工拆开一台「绝对安全」的机器,发现密码写在电路板背面的便利贴上。现实中的剧情更离谱——密码不是写在便利贴上,而是写在芯片的每一个引脚和每一次电流波动里。

软件漏洞可以打补丁、可以上 WAF、可以加零信任。但当攻击者手里拿到一块电路板时,前面所有的防线都变成了纸糊的。今天我们从「硬件攻防」的视角,把这块电路板从头到尾拆一遍:从最容易踩的调试接口,到玄学一样的侧信道攻击。

一、为什么软件补丁堵不完的洞,电路板上一根针就能捅开

先看一张攻防对照表,理解硬件攻击的「入场券」逻辑:

攻击层次 攻击者需要什么 攻击难度 修复成本
Web 层 一个 URL 低 低(打补丁即可)
系统层 一次代码执行 中 中(加固、更新)
固件层 一个调试接口 中高 高(改设计)
芯片层 示波器 + 物理接触 高 极高(换芯片)

过去十年,互联网公司把 Web 层的洞补得越来越密:DevSecOps、漏洞管理、供应链审计。攻击者发现正面攻不进去,开始绕后——直接买设备、拆设备、读固件。你的智能门锁、路由器、摄像头、车机、支付终端,全都是目标。

这也是为什么硬件安全研究成了近几年安全圈最热的洼地:一套几百块的硬件工具,往往能撬开价值几万块的设备。而国内的黑客大会(GeekPwn、GEEKCON)上,从门锁到无人机到智能车,硬件破解几乎年年霸榜。

二、第一站:寻找调试接口——UART / JTAG / SWD

拿到一块陌生电路板,攻击者做的第一件事不是上电,而是找调试接口。芯片在设计时为了开发和售后调试,几乎都预留了「后门」——统称片上调试(On-Chip Debug, OCD)接口。

UART:最不起眼,最容易被忽视

串口(UART)是嵌入式世界最古老的调试通道。硬件工程师用它打印日志、跑控制台。问题是:很多产品的生产固件里根本没删掉调试功能,或者删了但留下了一个可以中断启动的 bootloader。

典型玩法:

  1. 找到电路板上的 UART 测试点(通常是 4 个针脚:TX、RX、VCC、GND)。
  2. 用逻辑分析仪或穷举波特率,找到通讯参数(常见 9600 / 115200)。
  3. 接上串口终端,按任意键打断启动流程——如果 bootloader 没锁,直接进 u-boot 或厂商 shell。
  4. 在 shell 里:cat /etc/passwd、改启动参数、dump 文件系统、甚至直接写固件。

路由器、摄像头、机顶盒历史上大量中招。很多「硬改刷机」教程,本质就是 UART 进控制台。

JTAG 与 SWD:芯片的「上帝模式」

如果说 UART 是工程师的键盘,那 JTAG(IEEE 1149.1 边界扫描)就是芯片的「上帝模式」——它最初用于芯片出厂测试,可以读写芯片内部寄存器、访问片上存储,直接读取固件。

ARM 系芯片通常还带 SWD(Serial Wire Debug),只有两根线(SWDIO、SWCLK),但功能一样:读写内存、控制 CPU、dump Flash。

问题来了:调试接口通常不会写在 PCB 上,而是藏在测试点、过孔、元件焊盘之间。于是就有了专门的「寻针」工具。

JTAGulator:帮你「摸」出调试接口

美国硬件黑客 Joe Grand(Grand Idea Studio)开源了 JTAGulator(github.com/grandideastudio/jtagulator,802 star,CC BY-SA 4.0),专门干这件事:

把 JTAGulator 的 24 个 I/O 引脚用杜邦线接到待测电路板的可疑焊盘上,它就会自动穷举这些引脚之间可能的 JTAG / SWD / UART / I2C 组合,一旦探测到有效协议就锁定。硬件上还会通过 LED 指示哪些引脚是目标。

它最大的价值不是「能读固件」,而是自动化找接口——把原本靠人眼排线、试错的活变成了几秒钟的扫描。它的贡献者列表里还有著名的安全研究员 Samy Kamkar(samyk)——对,就是写 IKs 蠕虫、造 KeySweeper 键盘嗅探器那位。

顺带一提:JTAG 封堵也是近年厂商的功课,很多新芯片默认关闭调试口或需要授权码,但存量设备的调试口大多还开着——这正是攻击面所在。

三、固件提取:接口找不到,就从「嘴」上偷

调试接口被关了怎么办?攻击者还有备选路线——绕过 CPU,直接从存储芯片上读。

方案一:SPI Flash 在线嗅探

很多嵌入式设备的固件放在 SPI NOR Flash(比如 Winbond 25Q 系列)里,CPU 启动时通过 SPI 总线读它。攻击者做两件事:

  1. 用逻辑分析仪的探针夹在 SPI Flash 的引脚上(不需要焊下来,在线监听);
  2. 上电让设备启动,把 CPU 读取 Flash 的全部 SPI 通讯抓下来;
  3. 离线重组成完整的固件镜像。

工具链上,flashrom(开源刷写工具)可以直接通过 SPI 编程器读、写、校验 Flash 芯片,几十块钱一个编程器就能开始。

方案二:直接拆芯片读

在线嗅探有时会因时序干扰失败,那就物理直读:

  • 热风枪把 SPI Flash 芯片吹下来;
  • 装进编程器(如 CH341A、RT809H)直接 dump;
  • 用 binwalk(固件分析神器)解开文件系统,搜硬编码密钥、API 地址、账号密码。

这条路线的核心武器是 binwalk——开源固件分析工具,能自动识别固件里的文件系统(SquashFS、JFFS2、CPIO 等)、压缩包、固件头,一条命令把固件「拆」成源码级资产。无数路由器后门、摄像头硬编码凭据,都是 binwalk + 字符串搜索挖出来的。

典型实战:2017 年 GeekPwn(极棒)现场,安全团队演示破解多款智能门锁,其中就有直接拆锁、读固件、还原出开锁指令的案例——用户花几千块买的「安全门锁」,固件里的通信协议和密钥被连锅端。而到了 2018 年 GeekPwn,研究员更是在现场接连破解三款主流智能门锁:有的通过嗅探无线信号重放,有的直接降级固件绕过高安全模式。「硬件安全」四个字,在极棒舞台上从来不是理论。

四、侧信道:不看逻辑,看「电流」

如果固件读出来了还是解不开(有加密),或者连 Flash 都焊不下来,攻击者还有一张终极底牌:侧信道攻击。

所谓「侧信道」,指的是不攻击芯片本身,而是攻击芯片运行时的物理泄漏——功耗、电磁辐射、时序、声音。芯片在执行不同指令时,消耗的电流大小有细微差别,这些差别会泄露它正在处理的数据。

功耗分析:SPA 与 DPA

  • SPA(简单功耗分析):直接看一条功耗波形。算法里「判断分支」「是否执行某操作」会导致波形明显不同,等于把程序流程写在波形里。
  • DPA(差分功耗分析):统计攻击。采集几千上万条功耗轨迹,按某个猜测的中间值分组求平均,用统计相关性把密钥「算」出来。当年 DPA 论文一出,直接把「芯片不可攻破」的神话打穿——因为密码学的安全性假设是「攻击者看不到内部状态」,而功耗分析证明内部状态在物理上就是可见的。

ChipWhisperer:一千块就能开的实验室

加拿大公司 NewAE Technology 把整套侧信道研究工具链开源了——ChipWhisperer(github.com/newaetech/chipwhisperer,1.6k star),三个层次全部开源:

层次 内容
硬件 ChipWhisperer-Lite 采集板 + 多种目标板,原理图/PCB 全部开放
固件 采集板 USB 控制器(C)、FPGA 高速采集(Verilog)、目标设备示例固件
软件 ChipWhisperer Capture(采集功耗轨迹)+ ChipWhisperer Analyzer(分析),都是 Python API

它的核心价值:

  • 功耗采集:同步触发、高速采样,把目标芯片运行时的功耗轨迹精准采下来;
  • 分析:内置 SPA / DPA / CPA 等全套统计分析算法,教程齐全;
  • 故障注入:除了被动测功耗,还能主动给芯片「捣乱」——见下一节。

一套 ChipWhisperer-Lite 板子约一千多人民币,NewAE 官方教程里甚至有一节「用功耗分析攻破 AES-128 加密」,从零开始手把手。这意味着侧信道攻击已经从国家实验室级别,降级成了个人爱好者的周末项目。

侧信道为什么「防不胜防」:三个根本原因

很多人第一次听说”看电流就能偷密钥”时,会觉得不可思议。这里把侧信道”为什么这么难防”讲清楚,因为它揭示了密码学一个被长期忽视的假设:

  1. 密码学的”安全性”建立在”黑盒假设”上:AES、RSA 这些算法的数学安全性,是严格证明过的——前提是”攻击者只能看到输入和输出,看不到中间过程”。但侧信道攻击直接打穿了这个假设:它证明”中间过程”在物理上是可见的——通过功耗、电磁、时序泄漏出来。

  2. 物理泄漏是”算法无意识”的:芯片设计者让算法跑得又快又省电,但从没想过”跑得快、跑得省”本身会泄露信息。算法每执行一步,功耗曲线的形状都在”告诉”攻击者”我刚刚做了什么运算”。这不是算法的”漏洞”,而是物理实现的”先天缺陷”。

  3. 软件补丁堵不住物理泄漏:你可以给算法加”恒定时间”实现(让每步耗时一样)、加”掩码”(随机化中间值),但这些都是在”和物理较劲”——攻击者只要用更灵敏的示波器、更多的采样、更强的统计,就能在更高的精度上重新看到泄漏。这是一场没有终点的军备竞赛。

当年 DPA 论文(Kocher 等人,1999 年)之所以震动整个密码学界,就是因为它第一次证明:“密码学上安全的算法”和”物理上安全的芯片”是两回事。 你在数学上无懈可击,但在功耗曲线上,可能一败涂地。

一个简化的 DPA 攻击流程

为了让”差分功耗分析”不再神秘,这里给一个高度简化的流程,感受一下攻击者是怎么”算”出密钥的:

1
2
3
4
5
6
7
8
① 目标:芯片在跑 AES 加密,密钥未知
② 采集:让芯片加密几千组已知明文,同时用示波器记录每次的功耗曲线
③ 猜测:攻击者猜密钥的第 1 个字节(256 种可能)
④ 模拟:对每个猜测,用已知明文 + 猜测的密钥字节,算出"理论中间值"
⑤ 分组:按"理论中间值"的某一位,把几千条功耗曲线分成两组
⑥ 求差:两组功耗曲线做差分平均
⑦ 命中:正确的猜测会让差分曲线出现一个明显"尖峰",错误的猜测则没有
⑧ 重复:对密钥的每个字节重复 ③-⑦,最终拼出完整密钥

这个流程的关键在于第 ⑥⑦ 步:只有”正确的密钥猜测”,才会和真实的功耗产生统计相关性。所以 DPA 不是”暴力穷举”,而是”用统计把正确密钥从 256 种可能里’筛’出来”。它需要的不是超算,而是耐心 + 足够的功耗采样 + 正确的统计方法——而这三点,ChipWhisperer 都帮你做好了。

五、故障注入:给芯片「捣乱」

侧信道是「偷看」,故障注入是「动手」。攻击者故意在芯片运行的某个瞬间制造异常(电压毛刺、时钟毛刺、电磁脉冲),让芯片跳过安全检查:

  • 跳过「校验签名」的指令 → 未签名固件也能跑;
  • 绕过「密码比对」的分支 → 直接进入特权模式;
  • 让安全芯片在错误的状态下输出密钥。

最著名的案例之一就是Xbox 360 的 Reset Glitch Hack:通过给 CPU 注入电压/时序毛刺,让它在特定时刻重置,绕过签名校验,跑自制系统——微软前后花了数年、多个版本硬件(Jasper、Trinity、Corona)才逐步堵上,但每一代都被新的毛刺方法重新攻破。这就是硬件攻防的军备竞赛:厂商修一次,研究者换一种毛刺波形再打一次。

ChipWhisperer 把「故障注入」和「功耗分析」做在了同一块板子上,两类攻击可以用同一套平台研究。官方教学里甚至有「用毛刺攻击破解 PIN 码校验」「用毛刺跳过 bootloader 签名」的完整实验。

故障注入的「时间窗口」艺术

故障注入听起来像”暴力捣乱”,但它真正的技术含量,在于**”在正确的时间、打一个正确的毛刺”**:

  • 太早/太晚都没用:如果毛刺打在”校验还没开始”或”校验已经结束”的瞬间,芯片根本不受影响,该拒绝还是拒绝。故障注入不是”随便电一下”,而是精准地命中”正在校验的那一瞬间”。
  • 打对地方才有意义:攻击者的目标是”跳过校验”这条分支,而不是”让芯片死机”。所以毛刺的幅度、宽度、位置都要精细调——太小了没效果,太大了芯片直接崩溃重启,前功尽弃。
  • 这是”经验 + 仪器”的活:ChipWhisperer 这类工具的价值,就是帮你”反复尝试不同参数、自动化地找那个正确的时间窗”。它把原本需要”顶尖硬件实验室 + 大量经验”的故障注入,变成了”可以参数化扫描”的工程问题。

Xbox 360 的 Reset Glitch Hack 之所以经典,正是因为它把这个”时间窗”问题玩到了极致:攻击者要在一个纳秒级别的窗口里,让 CPU 的某个信号在错误的时间复位——一旦成功,签名校验就被”跳过”,自制系统就能运行。微软每修一次,研究者就重新找一个新的”正确时间窗”,这场猫鼠游戏持续了好几年。

六、现实中的硬件攻击全景

把上面的手段串起来,看几个真实场景:

目标 攻击链路 后果
智能门锁 UART 进 shell → dump 固件 → 还原开锁指令(GeekPwn 2017/2018 现场演示) 陌生人开门
路由器 SPI Flash 嗅探 → 提取固件 → 挖出后门账号 全屋流量被控
车机/ECU 调试接口读取 → 刷写固件 / 逆向通信协议 车辆控制、里程篡改
支付终端 侧信道功耗分析 → 还原加密密钥 卡数据泄露
无人机 固件降级/篡改 → 绕过禁飞与图传限制 黑飞、劫持(见 《被一句谎话拐走的天空之眼:无人机射频安全》)

再往大了说,卫星地面站、电网设备、基站设备这些「关键基础设施」,固件几乎都是老嵌入式平台,调试口、弱口令、无签名校验是常态。你之前看过的 《一键日卫星》是真的吗:卫星攻击史 里,攻击者砸向地面站的很多手段,本质就是硬件层攻击的放大版。

而电磁层面的侦察与反侦察,和你读过的 《你的车里藏着”眼睛”:电磁反侦察》 是同一枚硬币的两面——那边是「用 SDR 抓设备的无线信号」,这边是「直接捅进设备的物理接口」。一远一近,把设备的秘密榨干。

七、硬件攻击 vs 防御对照表

攻击面 攻击手段 防御措施
调试接口 UART shell、JTAG/SWD 读内存 量产时熔断调试口(efuse)、加访问授权
固件提取 SPI 嗅探、Flash 直读、binwalk 分析 加密存储、固件签名 + 验签、防拆传感器
侧信道 SPA/DPA/CPA 功耗分析、电磁分析 掩码(masking)、随机化、恒定时间算法
故障注入 电压毛刺、时钟毛刺、激光注入 电压/时钟监控、双重校验、冗余计算
供应链 芯片/模组被植入后门 供应链审计、安全启动链、硬件信任根(TPM/HSM)

注意一个残酷的规律:大多数防御都能被更贵的设备、更久的时间、更狠的物理手段绕过。硬件安全的本质不是「绝对安全」,而是「把攻击成本抬到超过资产价值」。

一张表看「防御 vs 更狠的攻击」的军备竞赛

对照表里每个「防御措施」的右边,其实都站着一个「更狠的攻击」在等它。把这个军备竞赛摊开看,会更清楚”为什么没有绝对安全”:

防御措施 它防住了什么 下一个更狠的攻击
熔断调试口(efuse) UART/JTAG 直接读固件 SPI Flash 直读(绕过 CPU 直接读存储)
固件加密 + 签名 读出来的固件是密文 侧信道攻破解密密钥
掩码/恒定时间 抵挡 SPA/DPA 统计 更高阶的 DPA(高阶掩码也能破)
电压/时钟监控 检测普通毛刺 更精准的激光注入、电磁注入
硬件信任根(HSM/TPM) 供应链植入后门 芯片级逆向(离子束/探针台)

这张表的结论很清醒:防御的价值,不在于”永远攻不破”,而在于”把攻击成本抬高到不值得”。 一台几十块的路由器,不值得攻击者动用几百万的芯片逆向实验室;但一块价值连城的密钥(比如支付终端的根密钥),就值得攻击者下血本。安全,从来是一个”投入产出比”的经济学问题,而不是”能不能绝对防住”的工程神话。

八、普通人需要知道什么

如果你是设备用户:

  1. 别买「贴牌安全」:宣称「军工级安全」的智能设备,先看它有没有固件签名、调试口熔断、安全启动——没有这些,所谓安全只是壳子好看。
  2. 二手设备先重置:二手路由器、摄像头、门锁可能残留前任的固件后门或调试口,重置固件到最新版。
  3. 固件更新=安全补丁:厂商发布的固件更新,很多就是在堵硬件层的洞,别嫌麻烦。
  4. 能开 TPM/安全启动就开:电脑的 TPM 芯片、安全启动(Secure Boot)就是在给「物理接触攻击」加门槛。

如果你刚好对硬件安全研究感兴趣,入门路线很清晰:先买一块几十块的 SPI 编程器 + flashrom 读固件,再上 ChipWhisperer-Lite 做功耗分析,最后用 JTAGulator 练接口识别——总成本两三千块,能覆盖全球大部分消费级设备的攻击面。

一份「从零到上手」的硬件安全学习路线

把上面散落的知识点串成一条可执行的学习路径,按「成本从低到高、难度从易到难」排序:

阶段 做什么 需要的工具 成本 收获
① 拆机 + 找接口 买一台二手路由器/摄像头,拆开找 UART 测试点 螺丝刀、撬片、万用表 ¥50-100 掌握「识别 GND/TX/RX」的基本功
② 串口进 shell 接 USB-TTL 转接板,读启动日志、进 bootloader CH340/FT232 转接板 ¥10-20 看到设备「内部」长什么样
③ 固件提取分析 用 flashrom + SPI 编程器 dump,binwalk 拆解 CH341A 编程器 ¥30-50 挖出硬编码密码、后门、密钥
④ 蓝牙/无线抓包 用 nRF52840 或 SDR 抓设备无线通信 nRF52840 Dongle / RTL-SDR ¥100-300 理解「设备怎么和外界对话」
⑤ 侧信道进阶 ChipWhisperer-Lite 做功耗分析 + 故障注入 ChipWhisperer-Lite ¥1500+ 攻破「加密」这一层

这条路线的一个关键心法:前四步的成本加起来不到 500 块,却已经覆盖了绝大多数消费级设备的攻击面。第 ⑤ 步的侧信道是「进阶天花板」,它需要的是耐心和统计思维,而不是更贵的设备。硬件安全的大门,其实比你想象的低得多。

最后一句话总结全文立场:硬件安全不是一个”小众的极客爱好”,而是所有”软件安全”最终都会撞上的那堵墙。你可以在应用层、系统层、网络层做得滴水不漏,但只要攻击者拿到了你的电路板,前面的防线就都得重新算账。芯片,既是最后一道防线,也是最后一块会被撬开的地方。

素材来源

  • ChipWhisperer 官方仓库 README(github.com/newaetech/chipwhisperer):1.6k star;完整开源工具链——采集板+目标板硬件、C/C/Verilog 固件、Python 采集与分析 API;面向侧信道功耗分析与故障注入(glitching);原理图/PCB 全开源;NewAE Technology 提供官方教学。
  • JTAGulator 官方仓库 README(github.com/grandideastudio/jtagulator):802 star;CC BY-SA 4.0;自动识别 JTAG / SWD / I2C / UART / SUMP 等片上调试接口;由 Joe Grand(Grand Idea Studio)设计,现由 EXPLIoT 维护;贡献者含 Samy Kamkar。
  • GeekPwn / GEEKCON 历届硬件破解议题(门锁、摄像头、无人机、智能车),素材经多方交叉核实。
  • Xbox 360 Reset Glitch Hack、DPA 论文(Kocher et al., 1999)为安全社区公认史实。
评论
分享

评论