固件安全威胁分析
做固件防护这么多年,我见过太多产品因为安全意识不足而翻车。说白了,不了解敌人,怎么打仗?这一章我们就来聊聊固件面临的主要威胁。我个人习惯把威胁分成四类:逆向工程、篡改攻击、克隆盗版,还有侧信道攻击。咱们一个一个说。
核心观点:固件安全不是防君子,是防小人。你得假设攻击者手里有你的芯片、有调试器、有耐心。
固件逆向工程
逆向工程是攻击者的基本功。他们拿到你的设备,第一件事就是想办法把固件读出来。怎么读?
- 通过调试接口:JTAG、SWD、BDM 这些接口,如果没锁死,直接就能 dump 整个 Flash。
- 通过 BootROM 漏洞:有些芯片的 BootROM 有后门,比如按住某个引脚上电就能进入工厂模式。
- 通过物理拆解:用酸腐蚀封装,用探针直接读 Flash 引脚上的数据。
- 通过协议分析:监听 SPI Flash 的通信,把固件传输过程抓下来。
我的经验:有一次客户的产品被抄了,后来发现是 JTAG 没禁用。攻击者用 OpenOCD 花了 10 分钟就把整个固件读走了。从那以后,我设计的板子量产前必做一件事:熔断 JTAG/SWD 保险丝。
固件拿到手之后,攻击者会用反汇编工具(比如 IDA Pro、Ghidra)分析代码逻辑。他们找什么?找密钥、找算法、找通信协议。你想想看,如果 SM2 的私钥明文存在 Flash 里,那跟没加密有什么区别?
固件篡改攻击
篡改攻击比逆向更直接。攻击者不改你的代码逻辑,而是改几个关键字节。举个例子:
// 原始代码:校验固件签名
if (verify_signature(firmware, signature) == PASS) {
execute_firmware();
} else {
halt();
}
// 篡改后:跳过校验
if (verify_signature(firmware, signature) == PASS) { // 改成 NOP
execute_firmware();
} else {
halt(); // 改成跳转到 execute_firmware
}
这种攻击在物联网设备上特别常见。攻击者改掉固件里的升级校验逻辑,然后刷入恶意固件。我曾经见过一个智能门锁,攻击者篡改了固件里的密码比对函数,让任何密码都能通过验证。嗯,这很可怕。
注意:篡改攻击不一定需要逆向整个固件。攻击者可以用差分分析:对比原版固件和篡改后固件的二进制差异,快速定位关键代码位置。
SM2 签名机制能有效防御篡改攻击。只要固件被改过,签名校验就会失败。但前提是——签名公钥必须安全存储,不能被替换。
固件克隆与盗版
克隆攻击说白了就是「复制粘贴」。攻击者把固件从设备 A 读出来,直接烧到设备 B 上。这在嵌入式领域太常见了。
| 攻击场景 | 典型手法 | 危害程度 |
|---|---|---|
| 山寨硬件 | 抄板 + 读固件,批量生产仿冒品 | 高 |
| 固件移植 | 把高端设备的固件刷到低端硬件上 | 中 |
| 授权绕过 | 克隆已授权设备的固件,绕过激活机制 | 高 |
| 固件转售 | 提取固件后单独售卖 | 中 |
我遇到过最离谱的一次:客户发现市场上出现了和自己产品一模一样的设备,连 PCB 走线都抄得一模一样。唯一区别是对方卖得更便宜。后来查出来,是代工厂偷偷多烧了一批固件,自己卖去了。
SM2 的解决方案是什么?绑定。把固件和硬件绑定在一起。每个芯片有唯一的 ID,固件用这个 ID 参与签名验证。固件被克隆到别的芯片上,签名校验就过不了。
侧信道攻击简介
侧信道攻击,这个词听起来高大上,其实原理很简单:攻击者不直接破解算法,而是通过「旁路信息」来推断密钥。
常见的侧信道攻击类型:
- 功耗分析(SPA/DPA):芯片执行不同指令时,功耗波形不一样。通过分析波形,可以猜出密钥位。
- 电磁辐射分析(EMA):芯片工作时会辐射电磁波,不同操作辐射特征不同。
- 时序分析:某些操作的执行时间与密钥相关,比如乘法运算时间随操作数变化。
- 故障注入:用激光、电磁脉冲或电压毛刺干扰芯片运行,让芯片在错误状态下泄露信息。
关键点:侧信道攻击不依赖固件漏洞,而是利用物理实现层面的信息泄露。SM2 算法本身是安全的,但如果实现时不加防护,密钥照样能被偷走。
举个例子,SM2 的点乘运算如果直接用「双倍-加」算法,功耗波形上就能看出密钥的每一位是 0 还是 1。攻击者只需要一条干净的功耗曲线,就能把私钥还原出来。
避坑指南:我曾经帮一个团队排查问题,他们的 SM2 实现跑在 ARM Cortex-M4 上,功耗分析一打一个准。后来加了随机延时和掩码技术,才把侧信道泄露压下去。记住:算法安全 ≠ 实现安全。
侧信道攻击的防御手段包括:
- 使用恒定时间算法(执行时间与密钥无关)
- 加入随机掩码(每次运算的中间值随机化)
- 功耗平衡技术(让不同操作的功耗波形相似)
- 主动屏蔽层(防止电磁辐射泄露)
这四种威胁不是孤立的。攻击者经常组合使用:先用侧信道拿到密钥,再用逆向分析固件结构,最后篡改或克隆。所以我们的防护方案也得是体系化的,不能只防一种。
再次强调:不要以为用了 SM2 就万事大吉。密钥怎么存、怎么用、怎么防侧信道,这些细节决定最终安全性。后面几章我会详细讲 SM2 在固件保护中的具体落地方法。