3、签名绕过攻击概述:攻击面分析、常见攻击向量、攻击成功后的收益

签名验证,说白了就是固件安全的最后一道门。你前面做了加密、做了混淆、做了反调试,但如果签名校验被绕过了,那前面的一切都白费。我在做嵌入式安全评估时,见过太多产品把精力花在花里胡哨的混淆上,结果签名校验就写了个 if 判断——嗯,一锤子买卖。

这一章,我们来聊聊签名绕过攻击的整体面貌。不急着上手工具,先搞清楚:攻击面在哪?常见打法有哪些?打进去了能干嘛?

3.1 攻击面分析:签名校验的薄弱环节

签名校验不是铁板一块。它是一条链,每个环节都可能出问题。我个人习惯把攻击面分成四个层面:

攻击层面 典型弱点 攻击难度
实现层 校验逻辑缺陷、条件竞争、返回值未检查 低 - 中
密钥层 硬编码密钥、弱密钥、密钥泄露 低 - 高
算法层 算法误用、哈希碰撞、降级攻击 中 - 高
启动链层 单点校验、链式信任断裂、回滚攻击 高

你想想看,这四个层面里,实现层是最容易出问题的。为什么?因为写代码的人往往默认「签名校验肯定能过」,不会刻意去测试「如果校验失败会怎样」。我曾经在一个 IoT 网关的固件里发现,它的签名校验函数返回值根本没被检查——校验函数跑完了,不管结果如何,bootloader 都直接跳转到固件入口。这叫什么?这叫形同虚设。

核心观点:签名绕过攻击的本质,不是破解密码学算法,而是找到校验逻辑中「人」犯的错。算法本身很难攻破,但实现算法的人很容易犯错。

3.2 常见攻击向量:六种主流打法

做固件逆向这些年,我总结出六种最常见的签名绕过攻击向量。每一种我都见过真实案例,有些甚至是在同一款设备上同时存在多个。

  1. 直接跳过校验

    最粗暴也最有效。攻击者通过逆向找到校验函数入口,用 patch 工具直接 NOP 掉调用指令,或者把条件跳转改成无条件跳转。我在一个智能门锁的固件里就这么干过——找到那个 cmp 指令,改成 mov r0, #0,校验就永远返回成功了。

  2. 返回值劫持

    不跳过校验函数,而是篡改它的返回值。比如校验函数返回 0 表示成功,攻击者就把返回 0 的路径固定下来。这种方式比直接跳过更隐蔽,因为校验函数确实被执行了,只是结果被篡改了。

  3. 密钥提取与重签名

    如果攻击者能从固件中提取出私钥或对称密钥,那就可以用自己的固件重新签名。这种情况通常发生在密钥硬编码在固件里,或者通过侧信道攻击(如功耗分析、电磁分析)提取出来。我记得有个路由器固件,私钥就明晃晃地放在 .rodata 段里,连加密都没做。

  4. 哈希碰撞攻击

    针对使用弱哈希算法(如 MD5、SHA-1)的签名方案。攻击者可以构造一个与原固件哈希值相同的恶意固件。虽然这种攻击的计算成本较高,但在某些资源受限的嵌入式设备上,哈希长度截断(比如只取前 32 位)使得碰撞变得可行。

  5. 降级攻击

    利用固件更新机制中的版本号检查缺陷。攻击者伪造一个「合法」的旧版本固件,该固件存在已知漏洞或根本没有签名校验。很多设备只检查签名不检查版本,或者版本号可以轻易篡改。

  6. 链式信任攻击

    针对多级启动链(如 BootROM → Bootloader 1 → Bootloader 2 → OS)。攻击者只需要攻破链中最弱的一环。比如 BootROM 的签名校验很严格,但第一级 Bootloader 的校验有漏洞,那攻击者就可以通过第一级 Bootloader 加载任意固件。

实战技巧:拿到一个固件后,我通常会先搜索字符串 "signature"、"verify"、"check"、"auth" 等关键词。很多时候,校验函数的名称会直接暴露在符号表里,省去了大量逆向时间。

3.3 攻击成功后的收益

搞清楚了怎么打,还得知道打了能拿到什么。签名绕过攻击成功后的收益,取决于设备所处的上下文。我把它分成三个层级:

收益层级 具体收益 典型场景
设备级 任意固件执行、root shell、持久化后门 路由器、摄像头、智能家居
网络级 横向移动、数据窃取、僵尸网络节点 IoT 网关、工业控制器
供应链级 固件投毒、OTA 劫持、批量设备控制 车机、医疗设备、关键基础设施

设备级收益是最直接的。你绕过了签名校验,就能在设备上执行任意代码。我见过最典型的案例是:攻击者通过签名绕过,在路由器上植入挖矿程序,设备性能下降 80%,用户还以为是网络问题。

网络级收益更可怕。一台设备被攻破,往往意味着整个网络有了突破口。工业场景里,一个 PLC 被拿下,整个产线都可能被控制。

供应链级收益是最高层级的。如果攻击者能攻破 OTA 更新服务器,或者截获并篡改固件分发通道,那就能批量控制所有接收更新的设备。这种攻击的隐蔽性极强,用户完全察觉不到。

⚠️ 注意:签名绕过攻击的收益是累积的。一次成功的绕过,可能只是整个攻击链的第一步。但这一步一旦迈出去,后续的攻击就畅通无阻了。所以,签名校验不是「有就行」,而是「必须正确实现」。

3.4 知识体系总览

下面这张图,把签名绕过攻击的整体知识结构串起来了。你可以把它当作本章的思维导图,后续章节会逐一深入每个分支。

签名绕过攻击知识体系 签名绕过攻击 攻击面分析 实现层 · 密钥层 · 算法层 · 启动链层 常见攻击向量 ① 直接跳过校验 ② 返回值劫持 ③ 密钥提取与重签名 ④ 哈希碰撞 · ⑤ 降级 · ⑥ 链式信任 攻击收益 设备级 · 网络级 · 供应链级 任意代码执行 · 横向移动 · 批量控制 防御措施(后续章节展开) 安全启动链 密钥保护方案 运行时完整性校验 防回滚机制 核心思路:攻击面 → 攻击向量 → 攻击收益 → 防御措施 每个环节都有对应的实战技术和案例分析,后续章节逐一深入