固件安全威胁分析

做固件防护这么多年,我见过太多产品因为安全意识不足而翻车。说白了,不了解敌人,怎么打仗?这一章我们就来聊聊固件面临的主要威胁。我个人习惯把威胁分成四类:逆向工程、篡改攻击、克隆盗版,还有侧信道攻击。咱们一个一个说。

核心观点:固件安全不是防君子,是防小人。你得假设攻击者手里有你的芯片、有调试器、有耐心。

固件安全威胁全景图 固件安全威胁 逆向工程 篡改攻击 克隆与盗版 侧信道攻击 反汇编分析 固件提取 代码注入 配置篡改 批量复制 密钥窃取 功耗分析 四种威胁往往组合使用:先逆向提取固件,再篡改或克隆,侧信道则用于窃取密钥 SM2 防护方案需要同时应对这四类攻击

固件逆向工程

逆向工程是攻击者的基本功。他们拿到你的设备,第一件事就是想办法把固件读出来。怎么读?

  • 通过调试接口: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 在固件保护中的具体落地方法。