新闻加密货币Electrum 4.8.3 修复将比特币费率提升武器化的恶意服务器攻击

Electrum 4.8.3 修复将比特币费率提升武器化的恶意服务器攻击

作者: Coindoo·

要点速览

  • •Electrum 4.8.3 版本于 10 月 23 日打上标签,并于 10 月 24 日随公开公告一同发布,修复了一个允许恶意服务器在用户钱包历史记录中显示带有无效签名的虚假对外交易的漏洞。
  • •该攻击利用了替换-by-费率机制:当用户提升被植入的零手续费交易的费率时,新签名将把经过篡改的付款授权至攻击者控制的地址。
  • •两名用户报告遭遇攻击,其中一人在 10 月 18 日对一笔虚假交易提升费率后,损失了未披露金额的资金。
  • •修复要求对动用钱包自身地址资金的未确认交易验证签名,而未确认的流入交易仍未验证,因为 Electrum 缺乏完整的共识引擎。
  • •使用 4.8.3 之前版本的用户应升级,或在批准任何交易(包括费率提升)之前,签名屏幕上手动确认输出地址和金额。
Electrum 4.8.3 修复将比特币费率提升武器化的恶意服务器攻击

比特币钱包 Electrum 中的一个高危漏洞已在 4.8.3 版本中修复。此前,攻击者找到了将比特币替换-by-费率机制转化为窃取已签名交易的途径。Electrum 开发者 SomberNight 在10 月 24 日发布的安全公告中披露了这一问题,指出部分服务器已在实际环境中实施该攻击。两名用户报告遭遇攻击,其中一人资金受损。

该攻击需要所有者的签名

恶意服务器本身无法动用任何人的比特币。它植入的虚假交易带有无效签名,因此网络会拒绝该交易。攻击者需要的是钱包所有者的有效签名,而这一陷阱正是通过提升手续费来获取签名。

替换-by-费率(RBF)通过用支付更高手续费的新版本交易替换原有交易,来加速尚未确认的比特币付款。对用户而言,这像是调整一个设置;对网络而言,这是一笔全新的交易,签署它即授权其中的每一个目的地和金额。如果被“提升费率”的交易已被篡改,新签名将批准被篡改的版本。

诱饵是一笔看似卡住的付款。在用户资金受损的案例中,服务器将虚假交易的手续费设为零,开发者认为这是为了诱导用户提升费率。零手续费交易会一直处于未确认状态,而提升手续费是标准应对方式。

恶意服务器如何设下陷阱

Electrum 是一款轻量钱包:它不会自行下载并验证整个区块链。根据其文档,该钱包通常连接约十个服务器,但依赖一个主服务器获取交易历史并进行广播,其余服务器主要提供区块头和手续费估算。该公告指出,将未确认交易交由主服务器处理是 Electrum 文档化设计的一部分。新的变化是出现了一种将这种信任转化为盗窃的实际手段。这一权衡正是攻击的背景:将验证工作外包是轻量钱包得以轻量的原因,但也意味着用户看到的交易历史的可靠性完全取决于提供它的主服务器——在 4.8.3 之前,带有无效签名的对外条目可以像真实交易一样出现在该历史记录中。

在签名步骤之前,不会造成任何损失。如果呈交签名的交易已被更改,有效的数字签名可能授权错误的付款,而这正是费率提升所提供的。

两名受害者所看到的

第一起报告来自用户 dannydeezy,时间在 10 月 11 日。付款由一个由两台 Trezor 硬件设备保护的 2-of-3 多签钱包发出,将 31 个输入合并为一个输出。用户在两台 Trezor 上核对了目的地后进行广播。随后,Electrum 的历史记录显示全部金额正以未确认状态流向一个未知地址,之后该条目变为“Local”。这笔交易从未进入内存池。

虚假交易构造得十分精巧。它使用了相同的输入,并逐字节复制了真实交易的签名数据,因此全部 62 个签名与真实付款匹配,而无一与虚假交易匹配。它将几乎所有金额发送到一个以“GQ3”结尾的地址——与真实目的地的最后四个字符相同——并将少量金额返回至钱包自己的一个地址,模拟正常的找零输出。手续费接近于零。由于用户没有再次签名,真实交易仍然有效且未被广播,因此没有造成损失。

直到第二名用户 Raju-K12 在 10 月 18 日报告在提升一笔虚假交易的手续费后资金受损,开发者才确认了这一费率提升攻击途径。损失金额未披露。

  • 10 月 11 日:第一起私下报告,未涉及费率提升环节
  • 10 月 18 日:第二起报告,在费率提升后造成损失
  • 10 月 23 日:Version 4.8.3 tagged,包含修复
  • 10 月 24 日:发布二进制文件并公布安全公告

4.8.3 修复了什么,又未修复什么

该修复要求 Electrum 在将任何动用钱包自身地址资金的未确认交易加入历史记录之前,先验证其签名。带有无效签名的虚假对外付款现在会被拒绝而非显示,从而封堵了这一攻击途径。

这项检查的范围是刻意收窄的。对未确认的流入交易仍然不进行验证,公告解释了原因:Electrum 没有完整的共识引擎,检查他人的输入意味着要一路回溯其未确认的父交易,直到找到已上链的交易。已确认的交易此前已通过简化支付验证进行核验,即对照区块头进行检查。

仅连接到自己信任的服务器(例如自己的服务器)的用户未受影响。但这一豁免不适用于钱包恰好选作主连接的任何公共服务器。

再次签名之前

  1. 升级至 4.8.3。 从 Electrum 官方网站下载,并按照其说明验证文件的签名。
  2. 核对完整地址。 与原始发票或付款请求比对,而不是与钱包历史记录比对——后者正是攻击者所控制的内容。
  3. 在设备屏幕上确认。 每次新签名都要核对金额和手续费。Trezor 的 RBF 指南和发送指南都要求用户在设备上核验更新后的详情。
  4. 卡住或被改动?停下。 在提升任何费率之前,先在独立的区块浏览器上查询原始交易 ID。在第一起报告中,真实付款从未到达网络。

尚无法升级的用户可参考公告中的应对方法:无论是否涉及费率提升,在签署任何交易时,都要确认输出地址和金额与预期完全一致。早于 4.8.3 的版本不会执行新的签名检查,因此对仍使用旧版本的用户而言,手动核验是防范这一攻击途径的唯一保障。该补丁封堵了这一特定途径,但 Electrum 在未确认数据方面仍然依赖其主服务器,因此批准付款的屏幕仍是最后一道检查。

本文仅供参考,不构成财务或投资建议。

来源:Coindoo