3、签名绕过攻击概述:攻击面分析、常见攻击向量、攻击成功后的收益
签名验证,说白了就是固件安全的最后一道门。你前面做了加密、做了混淆、做了反调试,但如果签名校验被绕过了,那前面的一切都白费。我在做嵌入式安全评估时,见过太多产品把精力花在花里胡哨的混淆上,结果签名校验就写了个 if 判断——嗯,一锤子买卖。
这一章,我们来聊聊签名绕过攻击的整体面貌。不急着上手工具,先搞清楚:攻击面在哪?常见打法有哪些?打进去了能干嘛?
3.1 攻击面分析:签名校验的薄弱环节
签名校验不是铁板一块。它是一条链,每个环节都可能出问题。我个人习惯把攻击面分成四个层面:
| 攻击层面 | 典型弱点 | 攻击难度 |
|---|---|---|
| 实现层 | 校验逻辑缺陷、条件竞争、返回值未检查 | 低 - 中 |
| 密钥层 | 硬编码密钥、弱密钥、密钥泄露 | 低 - 高 |
| 算法层 | 算法误用、哈希碰撞、降级攻击 | 中 - 高 |
| 启动链层 | 单点校验、链式信任断裂、回滚攻击 | 高 |
你想想看,这四个层面里,实现层是最容易出问题的。为什么?因为写代码的人往往默认「签名校验肯定能过」,不会刻意去测试「如果校验失败会怎样」。我曾经在一个 IoT 网关的固件里发现,它的签名校验函数返回值根本没被检查——校验函数跑完了,不管结果如何,bootloader 都直接跳转到固件入口。这叫什么?这叫形同虚设。
核心观点:签名绕过攻击的本质,不是破解密码学算法,而是找到校验逻辑中「人」犯的错。算法本身很难攻破,但实现算法的人很容易犯错。
3.2 常见攻击向量:六种主流打法
做固件逆向这些年,我总结出六种最常见的签名绕过攻击向量。每一种我都见过真实案例,有些甚至是在同一款设备上同时存在多个。
-
直接跳过校验
最粗暴也最有效。攻击者通过逆向找到校验函数入口,用 patch 工具直接 NOP 掉调用指令,或者把条件跳转改成无条件跳转。我在一个智能门锁的固件里就这么干过——找到那个 cmp 指令,改成 mov r0, #0,校验就永远返回成功了。
-
返回值劫持
不跳过校验函数,而是篡改它的返回值。比如校验函数返回 0 表示成功,攻击者就把返回 0 的路径固定下来。这种方式比直接跳过更隐蔽,因为校验函数确实被执行了,只是结果被篡改了。
-
密钥提取与重签名
如果攻击者能从固件中提取出私钥或对称密钥,那就可以用自己的固件重新签名。这种情况通常发生在密钥硬编码在固件里,或者通过侧信道攻击(如功耗分析、电磁分析)提取出来。我记得有个路由器固件,私钥就明晃晃地放在 .rodata 段里,连加密都没做。
-
哈希碰撞攻击
针对使用弱哈希算法(如 MD5、SHA-1)的签名方案。攻击者可以构造一个与原固件哈希值相同的恶意固件。虽然这种攻击的计算成本较高,但在某些资源受限的嵌入式设备上,哈希长度截断(比如只取前 32 位)使得碰撞变得可行。
-
降级攻击
利用固件更新机制中的版本号检查缺陷。攻击者伪造一个「合法」的旧版本固件,该固件存在已知漏洞或根本没有签名校验。很多设备只检查签名不检查版本,或者版本号可以轻易篡改。
-
链式信任攻击
针对多级启动链(如 BootROM → Bootloader 1 → Bootloader 2 → OS)。攻击者只需要攻破链中最弱的一环。比如 BootROM 的签名校验很严格,但第一级 Bootloader 的校验有漏洞,那攻击者就可以通过第一级 Bootloader 加载任意固件。
实战技巧:拿到一个固件后,我通常会先搜索字符串 "signature"、"verify"、"check"、"auth" 等关键词。很多时候,校验函数的名称会直接暴露在符号表里,省去了大量逆向时间。
3.3 攻击成功后的收益
搞清楚了怎么打,还得知道打了能拿到什么。签名绕过攻击成功后的收益,取决于设备所处的上下文。我把它分成三个层级:
| 收益层级 | 具体收益 | 典型场景 |
|---|---|---|
| 设备级 | 任意固件执行、root shell、持久化后门 | 路由器、摄像头、智能家居 |
| 网络级 | 横向移动、数据窃取、僵尸网络节点 | IoT 网关、工业控制器 |
| 供应链级 | 固件投毒、OTA 劫持、批量设备控制 | 车机、医疗设备、关键基础设施 |
设备级收益是最直接的。你绕过了签名校验,就能在设备上执行任意代码。我见过最典型的案例是:攻击者通过签名绕过,在路由器上植入挖矿程序,设备性能下降 80%,用户还以为是网络问题。
网络级收益更可怕。一台设备被攻破,往往意味着整个网络有了突破口。工业场景里,一个 PLC 被拿下,整个产线都可能被控制。
供应链级收益是最高层级的。如果攻击者能攻破 OTA 更新服务器,或者截获并篡改固件分发通道,那就能批量控制所有接收更新的设备。这种攻击的隐蔽性极强,用户完全察觉不到。
⚠️ 注意:签名绕过攻击的收益是累积的。一次成功的绕过,可能只是整个攻击链的第一步。但这一步一旦迈出去,后续的攻击就畅通无阻了。所以,签名校验不是「有就行」,而是「必须正确实现」。
3.4 知识体系总览
下面这张图,把签名绕过攻击的整体知识结构串起来了。你可以把它当作本章的思维导图,后续章节会逐一深入每个分支。