返回博客

通过利用 Flashbots 中继漏洞“收割” MEV 机器人

Code Auditing
2024年2月6日
阅读约 7 分钟

2023年4月,一名攻击者利用 Flashbots 中继器中存在的漏洞攻击了多个 MEV 机器人,非法获利约 2000 万美元。此次攻击的根本原因是私有交易在特定条件下可能会泄露到公共内存池中,攻击者可以抢先(backrun)这些泄露的交易以获取利润。我们还注意到攻击中使用了几种复杂的技术,例如利用蜜罐交易攻击受害者,以及在攻击合约中使用自我保护机制。

背景

Flashbots

正如其网站所述,Flashbots 是一个“研究与开发组织,旨在减轻最大可提取价值 (MEV) 给有状态区块链(以以太坊为首)带来的负面外部性”。Flashbots 涉及多个不同的主体,包括搜索者 (searcher)、构建者 (builder) 和中继器 (relay)。下图展示了它们之间的关系。

图片来自 Flashbots 文档

PBS(提议者-构建者分离)协议允许区块提议者(当他们被选中构建区块时)将其区块空间出售给多个构建者,从而实现利润最大化。具体来说,多个搜索者监听内存池中的交易并生成交易束(bundle),这些交易束会被提交给构建者。构建者汇集来自搜索者的交易束,创建价值最高的区块,然后将其提交给中继器。中继器随后将该区块提交给区块提议者,即已被选中为一个纪元时隙 (epoch slot) 构建区块的验证者。

在这种架构中,中继器是构建者和提议者双方都信任的第三方,而构建者和提议者之间互不信任。它确保提议者在签署区块头之前无法获得区块内容。它还确保向提议者按时支付费用。

我建议对详细架构感兴趣的读者查阅 Flashbots 文档。我们只需要记住中继器需要提供的安全保证:即如果区块未上链,中继器不得向提议者泄露区块内容。否则,恶意提议者可以利用泄露的区块内容获利(如本次攻击所示)。

三明治攻击 (Sandwich Attack)

三明治攻击是指攻击者将一笔交易夹在另外两笔交易之间以获取利润。我想用一个例子来说明这一点。

假设有一个包含 WETH 和 USDC 两种代币的 DEX 池。一名用户提交了一个将 WETH 兑换为 USDC 的请求。这个交易将出现在内存池中,并被 MEV 机器人(即搜索者)获取。然后,机器人会发出两笔交易,分别在用户的兑换交易之前和之后。

具体来说,机器人的第一笔交易是使用 WETH 兑换 USDC,这将推高 USDC 的价格。随后,用户的兑换交易被执行(由于第一笔交易导致 USDC 价格变高,用户得到的 USDC 会变少)。在此之后,机器人的第二笔交易将 USDC 兑换回 WETH,这比机器人的第一次兑换能获得更多的 WETH。

图片来自 Liyi Zhou 等人的论文《去中心化链上交易所的高频交易》(High-Frequency Trading on Decentralized On-Chain Exchanges)。

抢先交易 (Backrunning)

抢先交易是一种在大宗交易后立即执行交易的策略。这种策略基本上利用了大额交易对代币价格的影响所产生的套利机会。例如,如果用户在 DEX 池中进行了一笔大规模的 WETH 兑换 USDC 的交易,这可能会使 USDC 的价格高于其他交易所。抢先交易机器人可以立即捕捉到这一套利机会,以较低的价格将 USDC 兑换为 WETH 以获取更多 WETH,然后在其他交易所的 DEX 池中卖出 WETH 获利。

漏洞分析

正如 事后分析报告中所述,该漏洞存在于中继器的代码中。即使签名后的区块头无效(签名本身有效),该代码也会将构建者的区块内容泄露给(恶意)提议者。在这种情况下,提交给信标链的无效区块头和区块内容将被拒绝,而提议者可以赢得竞争,提交自己的区块并利用泄露的区块内容获利。

攻击过程

攻击者是恶意提议者,受害者是打算执行三明治交易的 MEV 机器人。

让我们以一笔真实的攻击交易为例。

区块 16964664
位置 0 受害者交易: 0xd2edf726fd3a7f179c | Phalcon Explorer (blocksec.com) MEV 机器人使用 2454.1 WETH 兑换 4.5 STG
位置 1 攻击交易: 0x4b2a2d03b3dc136ef9 | Phalcon Explorer (blocksec.com) 攻击者使用 158 STG 兑换 2454.1 WETH

受害者交易和攻击交易分别位于区块 16964664 的第 0 位和第 1 位。基本上,受害者(MEV 机器人)执行了一笔大额交易,在 Uniswap WETH-STG 池中使用 2454.1 WETH 兑换了 4.5 STG。这创造了一个巨大的套利机会,而攻击者随后使用 158 STG 抽干了池中的所有 WETH。

问题是,为什么受害者(MEV 机器人)愿意使用 2,454 WETH(价值约 500 万美元)去兑换池中仅 4.5 个 STG 代币(价值约 3 美元)?请注意,当受害者执行此兑换时,池中的流动性非常低(0.005 WETH 和 4.5 STG)。

我们的分析显示,导致 MEV 机器人进行这种荒谬兑换的原因有二。

首先,攻击者使用了蜜罐交易来引诱受害者发送此兑换以执行三明治攻击。该蜜罐交易的哈希为 0xd534c46ba5a444e886 | Phalcon Explorer (blocksec.com)。具体来说,攻击者在(区块 16964664 之前)广播了一笔将 WETH 兑换为 STG 的交易。由于池中的流动性极低,这为 MEV 机器人创造了进行三明治攻击的机会。如下图所示,MEV 机器人可以创建一个包含三笔交易的三明治攻击交易束。

其次,MEV 机器人使用了贪婪的三明治策略,并利用 Flashbots 发送了此交易。为了实现利润最大化,交易束中的第一笔交易试图榨干几乎所有的 STG 代币(使用 2,454 WETH)。这是一种非常贪婪的策略,使用 500 万美元(2,454 WETH)来获取约 700 美元(0.35 WETH)的利润——比例为 7000:1。该机器人假设除非在链上提交,否则此兑换交易不会泄露给公众。然而,由于中继器的漏洞,这一假设被打破了。利用这一点,攻击者创建了一个新的交易束,合并了机器人的初始三明治攻击交易,并增加了抢先交易来获取 2,454 WETH。

BlockSec 的 Twitter 图表展示了整个攻击过程。

自我保护机制

我们知道攻击者通过将 WETH 兑换为 STG 的蜜罐交易来引诱受害者。但是,如果没有可利用该蜜罐交易的三明治交易怎么办?在这种情况下,攻击者会监控池的状态并在必要时执行反向兑换以保护其 0.35 Ether,这是一种非常高明的做法。以下是执行蜜罐交易的智能合约(0xe73f1576af5573714404a2e3181f7336d3d978f9)的反编译代码。

为了验证我们的发现,我们在 Phalcon Fork 中模拟了这笔蜜罐交易,置于区块 16964664 的第 0 位。

总结

这是首次利用 Flashbots 中继器漏洞并结合复杂攻击策略的攻击事件。

  • 首先,此次攻击利用了 Flashbots 中继器中的零日漏洞。
  • 其次,它利用了贪婪的三明治交易策略,并使用蜜罐交易来引诱 MEV 机器人(受害者)。
  • 第三,它包含了一种自我保护机制,以便在攻击不成功时挽回蜜罐交易的成本(0.35 WETH)。

阅读本系列的其他文章:

订阅最新动态
Web3攻击面:渗透测试概览

Web3攻击面:渗透测试概览

加密机构承载所有传统攻击面,并叠加资金处理链。本文提供系统的实用抽象:应用、授权与签名、区块链交互、基础设施四组件模型,说明各自职责、代表实现及继承的攻击面,并将web3特有覆盖细分为五大攻击面:生产与自动化运维、签名意图、审批与提现链、资金逻辑及链上交易与已部署合约。

损失约2300万美元:Cosmos EVM与Moonwell遭利用攻击 | BlockSec Weekly
Security Insights

损失约2300万美元:Cosmos EVM与Moonwell遭利用攻击 | BlockSec Weekly

在报告期(2026/08/22-2026/08/30)内,我们统计5起区块链安全事件,损失约2270万美元;Tectonic被盗约7400万-1.195亿美元,因Cronos回滚至攻击前状态而多数被抹除。重点是六链Cosmos EVM漏洞系列(实现约570万美元),经TAC Chain溯源,共享余额同步漏洞串联下溢与上溢耗尽质押池。报告还分析了Moonwell的抵押品核算与预言机价格操纵组合攻击、Tectonic的预言机价格与凭证代币汇率操纵低流动性抵押品、Ajna清算业务逻辑缺陷,以及Solana上的Rain Card Contract Exploit Series(Ed25519签名验证绕过,涉及Avici、Tria等)。

什么是区块链渗透测试?定义与边界
Security Services

什么是区块链渗透测试?定义与边界

区块链渗透测试尚无公认定义,常与审计、扫描、赏金测试混淆。本文提出工作定义:在约定范围与规则下,对运行系统进行对抗性实测,验证可利用路径与控制链;并指出web3新增的资金处理威胁模型,其关键组合缺口在链下到链上的交接。随后梳理该链条的五项可测能力,并将相关目标分流至代码审计、钱包安全审计、web3安全测试、扫描与赏金测试。

Web3 最佳安全审计方

在上线之前验证设计、代码与业务逻辑,对标业内最高安全标准。

BlockSec 审计