最近,一组安全研究人员为我们展示了某些加密货币硬件钱包的安全性是何等的脆弱。其中,这些专家针对Trezor One、Ledger Nano S和Ledger Blue进行了供应链攻击和侧信道攻击方面的安全测试,发现其中存在芯片和固件级的安全漏洞。
实际上,这项研究工作是Dmitry Nedospasov、Thomas Roth和AD Josh Datko于今年6月着手进行的,最终,他们找到了多种可以突破目标加密货币钱包的安全防线的攻击方法。
上周四,他们在Chaos Communication Congress大会上,展示了相关的攻击手法,例如在这些设备到达最终用户手中之前对其进行篡改,或直接用“赝品”替换它们。
真的是原包装吗?
供应商通常会在钱包包装盒或设备本身的外壳上面贴上一张"封条",以作为安全标签。一张完好无损的贴纸可以保证没有人能接触到该钱包及其电子元件。
然而,Josh Datko却证明,对于善于使用吹风机的攻击者来说,突破这种防篡改的防线简直是小菜一碟,只要他们多加小心,并且不要使用高温即可。
Datko为我们演示了如何从Trezor One Box和Trezor T的USB端口上完好无损的揭下标签。他说,标签脱落时,基本上没有任何残留物,即使留下了部分胶水的印记,也可以用电子设备专用的液体来进行清洗。
此外,Ledger的设备根本就没有提供防篡改密封件,因为每次通电都会进行完整性检查。同时,相关的供应商还说,“安全元件”芯片“能够阻止所有拦截或物理替换的行为。”
在绕过安全贴纸这道防线后,Datko开始打开钱包的外壳,这一步也不是什么难事,拆开后,就可以访问内部硬件组件了。
研究人员说,对于Trezor钱包来说,甚至可以替换其微控制器。“一旦在Trezor设备上完成了上面的操作,就可以将做过手脚的bootloader植入其中。”虽然他没有具体演示这一过程,但告诉观众,他能够通过连接硬件调试器,从而自由访问芯片,因此,攻击者可以用恶意代码来刷新组件。
除此之外,Datko还进行了更深入的探索:在一个装有廉价硬件植入物的Ledger钱包上做了手脚,这样,他就可以在无需用户交互的情况下核准交易了。
只需花费3.16美元,借助一个射频(目前,至少有1100万种带有50瓦的发射器)远程触发的开关,就能将这件事情搞定。尽管已经遭到了篡改,Ledger钱包仍然顺利通过了Windows平台上的原装测试。
Ledger Nano S的bootloader的漏洞
在软件方面,研究人员对固件升级过程进行了逆向分析,发现了一个允许攻击者在设备上编写自定义固件的安全漏洞。
实际上,供应商已经为boot命令添加了一些保护措施,即使用加密函数来检测固件映像的合法性。如果验证得以通过,则将常数0xF00BABE写入一个存储地址。
不过,该检查只会执行一次,也就是说,并非在每次设备启动时都会进行这项安全检查。所以,这里的目标是将常数0xF00BABE写入特定的地址。
事实证明,Ledger的硬件钱包为了防止意外烧写bootloader,已经将整个内存区域列入黑名单,这是作为一项保护措施提供的。然而,研究人员却可以利用这一点,将相应的常数写到一个未被排除在外的地址,并进一步将其映射到可接受的地址。
为了证明上述攻击的可行性,研究人员将游戏Snake的某个版本烧写到了芯片中,并能借助该设备的两个按钮来控制小蛇在微型显示器上移动。
针对Ledger Blue的侧信道攻击
通过考察Ledger Blue的内部结构,Thomas Roth发现,该设备上安装了一根长长的导线,用于把信号传到屏幕上。此外,它还会充当天线,当设备连接到USB电缆时,它的信号就会被放大。
使用软件定义的无线电设备,人们可以捕获无线电波,并分析其模式,从而破解发送到屏幕上的内容。
Roth创建了一个框架,通过在屏幕上输入PIN数字来自动记录训练信号,并使用人工智能模型将其转换为实时的信息。实验结果表明,其准确率较高,能达90%以上,仅有1例预测错误。
Trezor One钱包中的芯片级漏洞
Trezor One钱包的相关操作都由一个微控制器(STM32F205)来控制的,不过,在2017年,人们发现该控制器存在故障注入漏洞。
去年,Datko还无法确定是否可以通过故障注入漏洞来攻击Trezor,但在CCC会议上,却提出了不同的结论。
通过观察引导过程和升级过程,该研究小组的成员发现了一种从随机存取存储器(RAM)中提取种子密钥或私钥的方法,该私钥的作用是提供对加密货币现金的访问权限,并允许将它们转移到其他钱包。
Trezor One会对数据进行备份,其中包括私钥,并将其复制到RAM中。研究人员的攻击手法是启动固件升级程序,并在RAM被清除之前停止升级。这样,通过查看RAM的内容转储,就能找到相应的种子字(seed words)和PIN号(PIN number)了。