区块链
Ledger 失窃:被加装硬件的钱包,还能信任吗
Ledger 在 CryptoBilis 相关失窃调查中确认,一台受害设备装有未经授权的硬件。公开拆解展示了另一条泄密路径:原装安全芯片继续工作,额外电路从屏幕线路读取助记词。CryptoBilis 买家应按官方指引停用未初始化设备。已经使用这些设备的买家,应把资产转到可信设备以全新助记词生成的钱包中。

文章导航
买硬件钱包的人,往往已经认真考虑过电脑中毒、交易所倒闭和助记词备份。他们把签名交给一台专门的小设备,希望秘密能离电脑远一点。10 月 9 日,Ledger 开始调查一批通过东南亚经销商 CryptoBilis 购机的用户失窃报告。第二天,官方确认一台受害设备里有未经授权的硬件植入。用户手里那台负责保守秘密的设备,本身已经被动过手脚。
这一发现让排查方向变得具体。程序升级可以替换固件,却不能把焊在电路板上的东西取走。即使换了一台设备,恢复原来的助记词和额外口令,仍会回到原来那组密钥。CryptoBilis 买家需要换掉可疑设备,也要换掉可能已经泄露的密钥。要理解为什么必须换新词,先得看看一台正常的钱包在哪一步需要把秘密送出安全芯片。
1 先把这次失窃与已有拆解分开
Ledger 的10 月 11 日更新把当时已确认的 10 月 9 日失窃案例都关联到 CryptoBilis 销售的设备,称受影响设备数量有限,自有系统和直销渠道未受影响,并表示 CryptoBilis 已停止销售全部硬件钱包。公告没有公布设备总数、完整型号清单、植入板结构或损失金额。那台官方确认的受害设备,仍需等待实物取证说明它具体怎样泄密、在哪个环节被改装。
另一条技术线索早于这次事件。Joe Grand 在今年 5 月的 hardwear.io 上公开拆解过一台被加装硬件的 Nano X,原始线索可以追到 2025 年 8 月。Tibane Labs 又在今年 9 月取得两台样本:一台来自日本 Yahoo! Auctions,另一台来自 Amazon Japan 的第三方卖家。该实验室明确写明,自己没有检查过 CryptoBilis 售出的设备。这些实物能回答“这种攻击怎样做得到”,与十月受害设备之间的对应关系还需要 Ledger 的调查补上。
2 助记词要让人看见,也就经过了屏幕线路
安全芯片负责生成和保存秘密,也负责在用户确认后签名。可是第一次备份钱包时,用户必须抄下那组恢复用的单词。Nano X 需要把文字变成像素,送到自己的 OLED 屏幕。Joe Grand 的原始演讲第 40 页把这段连接标成 SPI:芯片与屏幕之间的一条串行通信总线。插在这条路上的额外电路,可以旁听发往屏幕的数据,同时让屏幕照常显示。
像素没有直接写着“这是助记词”,但固定字形很容易变成识别模板。第 68—72 页的固件分析给出了完整线索:样本在 0x4D00–0x4E40 保存 a–z 字形,用模板匹配读出字母,将恢复词记录在 Flash 的 0x7000,再交给蜂窝模块发送。这里的地址属于那份植入固件,不能套到其他样本上。
安全芯片 → 屏幕像素 → OLED
↘ 额外电路读取
字形匹配 → 单词记录 → 蜂窝模块
这条路径最容易被忽略的地方,是钱包原本的安全功能可以一直正常。芯片按设计生成随机秘密,屏幕显示正确单词,用户抄下自己的备份,之后也能正常签名。额外电路在旁边复制了本来就要出现的信息,可以借助自带的通信模块、SIM 和天线通过蜂窝网络外传数据。这种连接没有经过电脑,电脑防火墙也就无从检查。
Grand 的演讲第 75 页仍把监听蜂窝通信列为后续工作。公开分析已经追到固件发送路径和无线硬件,完整外传流量的截获与解读仍需后续验证。下面的示意图解释这条显示窃听结构。
3 验真通过,具体确认了哪一部分
Ledger 的 Genuine Check 有明确的密码学工作。设备生产时,安全芯片生成自己的认证密钥,Ledger 用根信任密钥为其公钥签名。日后服务器发来一个随机挑战,芯片用自己的私钥签回去,服务器再检查证书和签名,确认眼前这颗芯片属于 Ledger 认证的设备。Donjon 的官方威胁模型也明确指出:原装安全芯片保持完好时,这项检查无法发现未经授权的物理修改,例如窃听植入。
可以把认证问题读得更准确一些:“这颗芯片能否使用它出厂时的秘密回答挑战?”额外电路既不需要代替芯片回答,也不需要偷走那把认证私钥。只要保留原装芯片,让它完成认证,再在另一条显示线路上收集数据,就能同时满足验真条件和窃听条件。软件报告的绿色结果,只覆盖了它实际验证的对象。
因此,重新运行验真很难回答“这台设备是否在运输或转售过程中被人加过东西”。即使包装完好,纸盒也没有参与挑战签名。设备来源、退货是否重新上架、谁接触过库存,仍然影响交付时的完整性。授权经销商名录能帮助买家筛选渠道,库存和经营主体发生变化后,厂商仍需要继续核查。
九月的新样本让人工检查也变得更难。Tibane 的第二台样本把黑色涂层柔性板藏在 OLED 下方,保留原装电池,部分芯片磨去标记,使用带 nRF9151 标记的蜂窝模块和定制天线。其公开总线捕获已经重建了开机画面,对两台新样本的深入分析仍在进行。已有照片展示的是可以反复安装的专用结构,尚不能据此确定制造者,也不能推出每个被盗钱包都用了这一版本。
4 新设备恢复旧词,为什么还会丢钱
钱包里的币并没有装进 USB 设备。链上记录着余额和花费条件,设备保存的是能够签名的秘密。恢复词把这个秘密变成了人能备份的形式。掌握单词及所用额外口令的人,也就可以在另一处重建同一套钱包。硬件已经换新,只要恢复词和额外口令相同,链上看到的权限就仍然相同。
BIP39给出了具体转换:把规范化后的单词作为 PBKDF2 的输入,以 mnemonic 加 passphrase 作为盐,使用 HMAC-SHA512,迭代 2,048 次,得到 64 字节 seed。这里的 passphrase 是可选的额外口令,和解锁设备用的 PIN 分属不同用途。PIN 没有进入这一步计算。
seed = PBKDF2-HMAC-SHA512(
NFKD(mnemonic), NFKD("mnemonic" + passphrase),
iterations = 2048, output = 64 bytes
)
seed 是后续生成账户密钥的起点。BIP32 的确定性派生从它生成主密钥,再沿账户路径派生各把密钥,依照相同规则和路径便能重建同一套密钥。用 BIP39 的公开测试向量在本地核对,相同单词和相同额外口令始终得到相同 seed,换额外口令则得到另一个 seed。换 PIN 对这个公式没有影响。这解释了为什么“新设备导入旧词”和“新设备生成新词”会带来不同的恢复结果。这里使用的是公开测试数据,不涉及任何用户钱包。
额外口令确实能让仅持有单词的人缺少一项必要输入。Ledger 的 passphrase 说明指出,它会生成另一组账户,原账户的资金不会自动搬过去。至于口令能否被某块植入电路读到,取决于设备怎样输入、显示它,以及电路接在哪里。前述屏幕拆解没有给出本次受害设备的口令采集记录。恢复仍应从可信设备生成全新的备份开始,再迁移资产。
这也解释了一个容易造成二次损失的动作:钱包里的钱被转走后,熟人或业务伙伴仍往原地址打款。攻击者如果已经掌握那组密钥,新的到账仍处在相同控制下。换掉收款地址、更新付款方记录,与迁走现有余额属于同一次恢复。
5 钱包被清空后,链上还可能留下权限
Bitquery 在 10 月 12 日 14:00 UTC 的更新将 10 月 9 日失窃估算修订为约 1.02 亿美元、324 个去重钱包,涉及六条链,美元金额按 10 月 9 日价格计算。钱包数与受害人数不同,一个人可以有多个地址。这是调查方的统计,Ledger 尚未确认总损失,SOSEC 也没有独立复算这份全量集合。
有些受害者还会发现,自己保留着密钥,却已无法操作账户。该调查记录了 30 个 TRON 账户在数秒内加入同一把控制密钥,并把原主人的密钥置于单独无法满足签名门槛的位置。TRON 的权限规则按密钥权重之和判断交易能否执行:攻击者的权重达到门槛,原主人的权重不足,即使原密钥仍在,主人也无法独自改回权限。账户的 owner 是最高权限,active 可以被授予指定操作。检查这两类权限时,应查看各自的授权密钥、threshold 签名门槛及允许的操作,才能看出原密钥还剩多少控制权。
代币授权又是另一层状态。TRON 的 TRC-20 接口通过 approve、allowance 和 transferFrom,把“谁可以从账户取多少代币”记录在代币合约中。Bitquery 记录的 10 月 10 日 70,000 USDT 二次失窃发生在 TRON,走的是前一天留下的 USDT 授权,这笔钱未计入前述 10 月 9 日总额。撤销授权能清掉这条记录。如果助记词及所用额外口令也已泄露,持有签名密钥的人仍能再次授权。更换本地 PIN、重装钱包应用,都不会替代币合约改写 allowance。恢复时需要同时看密钥、账户权限和代币授权,才能知道自己究竟还控制着什么。
冻结同样需要读准。Bitquery 在 10 月 12 日 12:52 UTC 的快照中记录约 1,000 万 USDT 仍被冻结。冻结阻止了资金继续移动,归还还需要后续处置。该数额不能直接列成“已赔付”。对受害者,保留交易哈希、地址、订单和设备来源,才能把具体损失与后续冻结或返还对应起来。
6 恢复从一台可信设备和一组新词开始
Ledger 的 10 月 11 日指引已经把做法说得很清楚:CryptoBilis 买家先别启用尚未初始化的设备。已经使用这些设备的买家,应把资产迁到从 Ledger 获得的设备上生成的新 seed。最初 10 月 9 日公告提到“过去 90 天”,后续更新的买家提醒没有继续用这个时间范围收窄。超出最初 90 天购买窗口的设备,也属于后续提醒的范围。排查时不要在可疑设备上反复显示恢复词。
迁移需要真正变更链上的接收方。在可信设备上生成新备份,核对设备显示的接收地址,再把仍可控制的资产转过去。旧词留作调查记录,原钱包也不再承接新资金。若 TRON 权限已经让原密钥失去独立操作能力,先保存当前权限与相关交易,联系官方支持协助处理,避免继续向地址补钱。移走代币之后,也别漏掉其他链、质押账户和仍在使用的收款记录。
同一渠道还销售其他品牌。OneKey 10 月 12 日声明撤销了 CryptoBilis 授权并重审经销商,称当时未收到相关 OneKey 用户失窃报告。在 3 月 1 日至该声明发布日于 CryptoBilis 购买的设备,可以在 12 月 31 日前凭购买证明申请免费换新。这个预防措施有自己的适用品牌和时间范围。它不能用来推定其他品牌已经出现相同植入,也不能替代资产迁移。
这类植入最麻烦的地方,是用户熟悉的检查都可能显示正常:原装芯片还在,验真通过,签名也能完成。额外电路只需要等到设备按设计显示备份,就有机会复制那些单词。安全芯片能守住内部的秘密,送到屏幕上的内容却需要整台设备与交付链一起保护。