硬钱包固件降级攻击:更新后不及时擦除旧版本可能留下安全后门

安全与风控中心 / 浏览:3

在虚拟币世界里,私钥就是一切。硬件钱包之所以被信任,是因为它把私钥锁进了一个离线的安全芯片,让联网的电脑无法直接触碰。但很多人忽略了一件事:硬件钱包本身也是一台微型计算机,它运行固件,而固件会更新。更新意味着旧版本被替换,但如果替换不彻底——旧固件没有被真正擦除,而是残留在闪存的某个角落——攻击者就可能利用这一点,把设备“降级”回一个有漏洞的旧版本,从而绕过新版本的安全修复。这就是硬钱包固件降级攻击的核心逻辑,也是当前虚拟币安全领域一个被低估的风险点。

为什么固件降级攻击在虚拟币场景下格外危险

传统IT系统里,固件降级通常被视为中等风险:攻击者需要物理接触设备,或者需要绕过签名校验,利用成本较高。但在硬件钱包场景下,风险被放大了数倍,原因有三。

第一,硬件钱包的“信任模型”高度依赖固件完整性。用户之所以敢在设备屏幕上确认一笔大额转账,是因为相信设备运行的固件没有恶意逻辑。一旦攻击者能把设备降级到一个已知存在漏洞的旧固件——比如某个早期版本在签名流程中缺少二次确认,或者某个版本对侧信道攻击的防护不足——那么用户看到的屏幕信息、按下的确认键,都可能被攻击者操控。

第二,硬件钱包的生命周期很长。一枚硬件钱包可能用三到五年,期间固件会经历十几次甚至几十次更新。每一次更新都会在闪存里留下旧版本的痕迹,如果厂商的更新流程只是“写入新固件 + 标记旧区域为可用”,而没有执行真正的擦除操作,那么旧固件的数据块就可能一直躺在闪存里,等待被重新激活。

第三,虚拟币交易不可逆。传统银行转账可以冻结、可以申诉,但链上交易一旦广播,私钥一旦泄露,资产就永远消失。这意味着固件降级攻击的成功窗口不需要很大——攻击者只需要在某个时刻让设备运行一个有漏洞的旧固件,完成一次签名或一次私钥导出,就足以造成不可挽回的损失。

固件更新流程中的“擦除盲区”

要理解降级攻击是怎么发生的,需要先看硬件钱包固件更新的典型流程。大多数硬件钱包使用MCU内置闪存或外挂SPI闪存,固件更新通常采用“双区切换”或“原地覆盖”两种模式。

双区切换模式会保留两个固件分区:A区和B区。当前运行A区时,新固件写入B区,写入完成后切换启动标志,下次启动从B区运行。这种模式的好处是更新失败可以回滚,但坏处是旧固件分区并不会被立即擦除——它只是被标记为“非活动”。很多厂商为了节省擦写次数、延长闪存寿命,会保留旧分区内容,直到下一次更新时才覆盖。这就留下了一个时间窗口:如果攻击者能触发设备回滚到旧分区,或者利用引导程序的逻辑缺陷强制从旧分区启动,就能让设备运行旧固件。

原地覆盖模式更直接:新固件直接写入旧固件所在的地址范围。但闪存的物理特性决定了“覆盖写”并不是真正的擦除——闪存必须先擦除整个扇区才能写入新数据。如果厂商的更新代码只擦除了新固件实际占用的大小,而没有擦除整个扇区,那么扇区尾部残留的旧固件数据仍然可以被读取。更隐蔽的情况是,某些MCU的闪存在擦除后仍会留下可检测的电荷痕迹,通过特定手段可以恢复部分数据。

还有一种常见情况是“引导程序保留区”。很多硬件钱包的引导程序(bootloader)本身不参与常规固件更新,它负责验证固件签名并跳转执行。如果引导程序没有严格检查固件版本号,或者允许“降级到任意已签名版本”,那么攻击者只需要让设备进入引导模式,刷入一个旧版本的官方固件——这个固件本身是合法的、有签名的,但存在已知漏洞——就能完成降级。而旧固件之所以还能被刷入,恰恰是因为它没有被从设备中彻底擦除,或者引导程序允许从备份区恢复。

降级攻击的几种现实路径

路径一:利用引导程序的版本回滚漏洞

这是最直接的降级方式。部分硬件钱包的引导程序在验证固件时只检查签名是否有效,不检查版本号是否低于当前版本。攻击者物理接触设备后,通过调试接口或USB进入引导模式,刷入一个旧版本的官方固件。由于旧固件有厂商签名,引导程序放行。设备重启后运行旧固件,而旧固件可能存在签名流程缺陷、随机数生成器弱点或调试接口未关闭等问题。攻击者利用这些漏洞提取私钥或篡改交易内容。

这种攻击的前提是引导程序允许降级。如果厂商在引导程序中加入了防回滚计数器(monotonic counter),每次更新递增版本号,引导程序拒绝加载版本号低于计数器的固件,那么这种路径就被堵住了。但现实是,很多中低端硬件钱包并没有实现防回滚计数器,或者实现得不完整——比如计数器存储在可擦写的闪存区域,攻击者可以先用故障注入手段篡改计数器值。

路径二:闪存残留数据被重新激活

这种路径更隐蔽。设备在更新固件时,新固件写入新区域,旧固件区域被标记为“空闲”,但内容没有被擦除。攻击者通过物理手段(比如探针读取闪存芯片,或者利用MCU的调试接口读取闪存内容)可以提取旧固件镜像。虽然这本身不直接构成降级攻击,但它为攻击者提供了旧固件的完整副本,便于分析漏洞。更进一步,如果攻击者能通过故障注入(电压毛刺、时钟毛刺)让引导程序跳转到旧固件区域执行,或者篡改分区表让旧分区重新变为活动分区,就能让设备在下次启动时运行旧固件。

这种攻击对设备物理安全的要求较高,但在虚拟币场景下并非不可行。针对高价值目标的定向攻击中,攻击者愿意投入成本进行物理接触和故障注入。而旧固件残留恰恰降低了攻击门槛——攻击者不需要自己构造恶意固件,只需要让设备运行一个已知有漏洞的官方旧版本即可。

路径三:更新中断导致的“半更新”状态

固件更新过程中如果断电或被人为中断,设备可能处于“半更新”状态:新固件只写入了一部分,旧固件的一部分仍然保留。某些设备的恢复机制会尝试从备份分区启动,而备份分区可能正是旧固件。攻击者可以故意制造更新中断,诱导设备回滚到旧固件。如果厂商的恢复逻辑没有验证备份分区的版本号,降级就成功了。

这种路径在用户日常使用中也可能意外触发——比如更新时USB线松动、电脑休眠导致供电中断。用户以为设备只是更新失败,重新插拔后设备正常启动,但实际上它可能已经回滚到了旧固件。用户不会察觉,因为设备界面看起来正常,版本号显示可能也被篡改。

厂商为什么容易忽略擦除环节

从工程角度看,固件更新后不擦除旧版本,往往不是故意留后门,而是多种因素叠加的结果。

成本与寿命考量。闪存的擦写次数有限(通常每个扇区1万到10万次),厂商为了延长设备寿命,会尽量减少不必要的擦除操作。保留旧固件分区、只做标记,可以节省擦写次数。但这种优化在安全场景下是危险的——硬件钱包的闪存寿命通常远超设备实际使用年限,省下来的擦写次数换不来多少实际收益,却留下了安全隐患。

更新逻辑的复杂度。实现“安全擦除”需要更新代码精确知道旧固件占用了哪些扇区、哪些扇区需要完整擦除、擦除后如何验证。如果固件分区大小不固定(比如不同版本固件大小不同),擦除逻辑就容易出错。很多厂商的更新代码只擦除新固件将要写入的区域,对旧固件区域“不管不问”,因为从功能角度看,旧区域不被使用就不会影响运行。但从安全角度看,不被使用不等于不被读取。

测试覆盖不足。固件更新的功能测试通常关注“新固件能否正常启动”“功能是否正常”“签名验证是否通过”,很少测试“旧固件是否被彻底擦除”“降级是否被阻止”。安全测试中,降级攻击往往被归为“物理攻击”类别,而物理攻击在威胁模型中被认为需要攻击者具备较高能力,优先级被排后。结果就是,防降级机制在设计中存在,但在实现中没有被充分验证。

用户能做什么:识别与缓解

对于普通用户来说,完全防御固件降级攻击并不容易,因为攻击需要物理接触设备,而用户无法控制厂商的固件更新实现。但可以采取一些措施降低风险。

关注厂商的更新公告和安全审计报告。如果厂商在更新说明中明确提到“防回滚机制”“安全擦除”“引导程序版本锁定”等特性,说明其对此有意识。相反,如果厂商从不提及固件更新后的擦除策略,或者更新日志只写“修复bug、提升稳定性”,就需要多一分警惕。

更新固件时确保供电稳定。使用原装USB线、连接稳定的电源、避免在更新过程中操作电脑。更新完成后,主动在设备设置中查看固件版本号,确认版本号与官方发布的一致。如果设备支持,检查引导程序版本是否也被更新。

对于高价值资产,考虑使用支持“防回滚计数器”的硬件钱包型号。这类设备在引导程序中维护一个单调递增的版本计数器,拒绝加载低于计数器的固件。即使攻击者物理接触设备,也无法通过刷旧固件来降级。目前部分高端型号已经实现了这一机制,但并非所有产品都有。

物理保管同样重要。固件降级攻击大多需要物理接触设备,因此把硬件钱包存放在安全的地方、不随意借给他人、不使用来源不明的USB线或充电器,可以降低被物理攻击的概率。

行业层面的改进方向

从行业角度看,固件降级攻击的防御需要厂商在设计和实现两个层面同时发力。

设计层面,防回滚计数器应该成为硬件钱包的标配,而不是高端选配。计数器应存储在一次性可编程(OTP)区域或受保护的闪存区域,防止被篡改。引导程序在加载固件前必须同时验证签名和版本号,拒绝任何低于计数器的固件。更新流程中应包含“安全擦除”步骤:在新固件写入并验证通过后,对旧固件占用的所有扇区执行完整擦除,并读回验证擦除结果。

实现层面,固件更新代码需要经过严格的安全测试,包括降级测试、中断测试、故障注入测试。测试应覆盖“更新过程中断电”“更新后旧固件区域是否可读”“引导程序是否拒绝旧版本”等场景。第三方安全审计应把固件更新流程作为重点审计对象,而不仅仅审计签名算法和密钥存储。

标准层面,硬件钱包行业可以借鉴智能卡和TEE(可信执行环境)领域的经验,建立固件更新安全规范,明确防回滚、安全擦除、更新完整性验证的最低要求。目前硬件钱包的安全认证(如EAL5+、EAL6+)主要关注芯片层面,对固件更新流程的覆盖不够细。推动认证标准细化到固件生命周期管理,有助于倒逼厂商补齐这块短板。

写在最后:旧固件不是“历史文件”,而是“待引爆的雷”

在虚拟币世界,私钥的安全边界就是设备的固件边界。固件更新不是简单的“覆盖安装”,而是一次安全状态的迁移。如果旧固件没有被真正擦除,它就相当于在设备里留下了一把备用钥匙——平时看不见,但攻击者知道它在那里。降级攻击之所以值得警惕,不是因为它技术含量最高,而是因为它利用的是“更新”这个用户最信任的操作。用户以为更新让设备更安全,却不知道更新可能让旧漏洞继续潜伏。

对于持币者来说,硬件钱包是最后一道防线。这道防线的强度不仅取决于芯片的抗攻击能力,也取决于固件更新流程是否严谨。厂商在更新日志里写“提升安全性”的时候,用户有理由追问一句:旧版本真的被擦干净了吗?引导程序会拒绝降级吗?如果答案模糊,那么这枚硬件钱包的安全叙事就存在裂缝。在虚拟币这个没有撤销键的领域,裂缝就是风险。

版权申明:

作者: 虚拟币知识网

链接: https://virtualcurrency.cc/safety-risk-control/hardware-wallet-firmware-downgrade-attack-security-backdoor.htm

来源: 虚拟币知识网

文章版权归作者所有,未经允许请勿转载。

关于我们

 Ethan Carter avatar
Ethan Carter
Welcome to my blog!

最新博客

标签