研究

7月2日事后分析:82.3 BTC 得到保护,攻击失败

7月2日,攻击者利用 Alkanes 索引器中的共识层级漏洞伪造了约 147 万枚幻影 DIESEL,抽干了 DIESEL/frBTC 池,并试图将 82.3 frBTC 解包为 BTC。攻击失败了。

Gabe
1 分钟阅读 · 2026年7月4日

摘要

7月2日,攻击者利用 Alkanes 索引器中的共识层级漏洞伪造了约 147 万枚幻影 DIESEL,抽干了 DIESEL/frBTC 池,并试图将 82.3 frBTC 解包为 BTC。

SUBFROST 的自动化签名层阻止了这次解包。没有任何 BTC 离开协议。没有任何资金损失。DIESEL 合约本身从未被攻破,其真实供应量也从未改变。

底层漏洞已被识别并修复,协议在检测到问题约 10 小时后完全恢复运行。

事件经过,逐步还原

7月2日,Alkanes 和 SUBFROST 挺过了一次严重的攻击尝试,而这并非靠运气。系统正是为这种场景设计了分层防御。以下是事件的完整经过。

在区块 956,326,攻击者在 Alkanes 上部署了一个自定义合约,并执行了一笔交易,利用了已部署索引器(v2.2.0-rc.8)中的一个状态一致性漏洞。该漏洞(下文将详述)允许他们复制代币余额。通过在单笔交易内级联约 24 次翻倍,他们将自己的 DIESEL 余额膨胀到约 147 万枚 DIESEL,超过了约 66.3 万枚全部合法供应量的两倍。

在继续之前,有两点至关重要。

第一:这是资产负债表复制,而非铸造。 DIESEL 合约本身从未被触碰。其总供应量端点始终保持正确,稳定在每区块 3.125 DIESEL。攻击者创造的是索引器账目中的幻影条目,而非 DIESEL 合约发行的真实代币。这一区别对于恢复的方式有着极其重大的意义,下文将解释。

第二:伪造的余额只有在能够转换为真实 BTC 时才有用。 而这正是攻击失败的地方。

攻击者将幻影 DIESEL 卖入 DIESEL/frBTC 流动性池,“带走”了 82.3 frBTC。随后他们试图通过 SUBFROST 将这些 frBTC 解包为原生 BTC,尝试了两次。

两次解包都被阻止。SUBFROST 框架不会盲目地满足解包请求。自动化安全机制标记了该活动并拒绝签名。这 82.3 BTC 从未移动。 这一切完全是自动化的,事实上,我们的核心团队在整个事件期间都在睡觉。

响应与恢复

在东部时间上午约 7:30,我们的团队采取了以下步骤。

  1. 出于预防,禁用了 frBTC→BTC 解包。这意味着无论链上状态如何,都没有 BTC 能离开系统。攻击者的解包此前已被阻止。
  2. 进行根本原因分析,识别出被利用的通胀漏洞——共识层级的漏洞。
  3. 使用自包含的概念验证(PoC)针对已部署版本确定性地复现了该漏洞。
  4. 编写并验证了修复方案,然后将漏洞 PoC 转换为永久的回归测试。
  5. 在事件开始约 10 小时后,协议再次恢复运行。

恢复的原理如下。修复后的索引器(v2.2.1)从区块 956,325 开始重放 Alkanes 索引,这是攻击者合约存在之前的最后一个干净区块。

在修正后的执行规则下,攻击者的交易根本不再复制任何东西。幻影 DIESEL 在重放的历史中从未成形。

随后我们验证攻击者的合约余额为零,且持有的 DIESEL 总量与真实供应量一致。接着我们通过现有的升级机制部署,以便每个运营者都收敛到对索引的相同解读。

没有索引器重组。没有回滚任何人的合法活动。只是对同一条链的修正解读。

技术细节

我们相信完全透明,因此以下是该漏洞过去的确切工作原理。

在消息处理期间,protorune 索引器在两个地方跟踪余额。

  1. 一个原子键值存储,它是事务性的,具有检查点/回滚语义。如果某条消息失败,其写入将被撤销。
  2. 一个内存余额映射,它不是事务性的。回滚不会触及它。

当一条消息结算时,索引器将传出代币逐个按代币 ID 升序记入该内存映射,并在过程中改变状态。如果任何单笔记账发生溢出,循环会在中途报错退出,将失败之前已应用的每笔记账留在内存映射中。

攻击者的交易产生了一张含两个代币的传出清单:一个低 ID 代币 V(DIESEL),价值为 x,以及攻击者自己的一个高 ID 代币 C 的一个单位,其在目标地址的余额已被预先加载到最大可能值(u128::MAX)。按 ID 顺序遍历清单:

  1. V:x 首先被记账并写入内存映射。
  2. C:1 溢出了预加载的最大值,因此操作报错。
  3. 错误路径回滚了原子 KV 存储,恢复了合约原始的 V 余额,但 V 的内存记账幸存了下来,因为该映射在回滚触及范围之外。
  4. 区块处理完成,内存映射(包括幻影记账在内)被提交为规范状态。

最终结果:V 现在存在两份。合约拿回了它的 x,而目标输出持有一份重复的 x。重复该原语,余额每轮翻倍。攻击者在单笔交易中串联了约 24 次翻倍。

修复方案使记账操作变为全有或全无。第一遍在任何变更之前用检查算术验证每一次加法,只有在此之后第二遍才应用它们。溢出现在会在任何部分记账存在之前被捕获,因此回滚会让两个存储保持一致。

这对 DIESEL 持有者意味着什么

我们知道许多用户持有 DIESEL,也知道一次“针对 DIESEL”的攻击听起来令人担忧。所以让我们说清楚。

  • DIESEL 合约从未被攻破。 其发行时间表(每区块 3.125)和总供应量始终正确。
  • 恢复之后幻影 DIESEL 不复存在。 因为这是索引器账目损坏而非真实代币,所以修复方式是索引重放,而非代币干预。
  • DIESEL 的规则、供应量或你的持仓没有任何改变。

系统为何挺住了

值得再次强调,为什么这份事后分析描述的是一次失败的攻击,而非一次损失。

SUBFROST 签名环独立地拒绝将欺诈性获取的 frBTC 转换为真实 BTC。即便索引被攻破,真实资金也有自己的关卡,而那道关卡守住了。

我们早在 2019 年就开始构建这套架构,并采用了此前一些最顶尖团队的最强安全机制。

这套架构的运作完全符合预期,而在7月2日,它在真实炮火下运作——在主网上,赌注是 82.3 BTC(500 万美元以上)。

结语

协议无法选择是否被攻击。它们只能选择自己准备得有多充分。

7月2日,Alkanes 和 SUBFROST 经受了真实对手的考验,以真实 BTC 为赌注,而答案是:没有损失一个聪,根本原因在数小时内被修复,而且最终诞生了一个更强大的协议

比特币 DeFi 必须被要求达到比以往更高的标准。这就是那个标准在实践中的样子:透明、快速、可验证。你可以自己检查修复内容并运行回归测试。

我们哪儿也不去。

Gabe

SUBFROST 首席执行官