该文章分析了2023年Flashbots中继漏洞导致MEV机器人被攻击的安全事件。攻击者利用Flashbots中继中的漏洞,通过构造蜜罐交易诱导MEV机器人进行三明治攻击,并利用漏洞泄露的交易信息进行抢跑,最终获利约2000万美元。文章还分析了攻击中使用的蜜罐交易和自保护机制等复杂技术。
由于 Flashbots 中继漏洞,MEV 机器人遭到攻击,这是 2023 年十大“超棒”安全事件中的第一大安全事件。

2023 年 4 月,攻击者利用 Flashbots 中继中存在的漏洞攻击了多个 MEV 机器人,获利约 2000 万美元。这次攻击的根本原因是,在某些条件下,私有交易可能会泄露到公共池中,攻击者可以抢先运行泄露的交易来获取利润。我们还注意到攻击中使用了几种复杂的技术,例如,使用蜜罐交易攻击受害者,以及在攻击合约中使用自我保护机制。
Flashbots,正如其网站上所显示的,“是一个研究和开发组织,旨在减轻最大可提取价值 (MEV) 对有状态区块链造成的负面外部性,从以太坊开始。” Flashbots 涉及几个不同的实体,包括搜索者、构建者和中继者。下图显示了它们之间的关系。

图片来自 Flashbots document
PBS (proposer-builder separation,提议者-构建者分离) 协议是一种允许区块提议者将其区块空间(因为他们被选择构建一个区块)出售给多个构建者的协议——以最大化利润。具体来说,多个搜索者监听交易池中的交易并生成 bundles,这些 bundles 将被提交给构建者。构建者聚合来自搜索者的 bundles,创建最有价值的区块,然后将其提交给中继者。中继者会将区块提交给区块提议者,即已被选择为一个 epoch slot 构建区块的验证者。
在这种架构中,中继者是构建者和提议者信任的第三方,他们互不信任。它确保提议者在签署区块头之前无法获得区块内容。它还确保支付给提议者的费用金额。
我建议有兴趣了解详细架构的读者参考 the Flashbots document。我们只需要记住中继者需要提供的安全保证,即如果区块未上链,则中继者不能向提议者泄露区块内容。否则,恶意提议者可以使用泄露的区块内容来获取利润(如攻击所示)。
三明治攻击是指攻击者在两个交易之间放置一个 swap 以获取利润。我想用一个例子来说明它。
假设我们有一个包含两种代币 WETH 和 USDC 的 DEX 池。一个用户提交一个 swap 请求,用 WETH 兑换 USDC。这个 swap 交易将存在于交易池中,并被 MEV 机器人获取(假设是一个搜索者)。然后,该机器人将进行两个交易,一个在用户的 swap 交易之前,一个在之后。
具体来说,机器人的第一个交易是使用 WETH 兑换 USDC,这将增加 USDC 的价格。然后,用户的 swap 交易将被执行(由于 USDC 的价格因第一个交易而更高,因此 USDC 更少)。之后,机器人的第二个交易将 USDC 兑换为 WETH,与机器人的第一次 swap 相比,可以获得更多的 WETH。

图片来自 Liyi Zhou 等人的论文 High-Frequency Trading on Decentralized On-Chain Exchanges(去中心化链上交易所的高频交易)。
Backrunning 是一种在大额交易后立即执行交易的策略。Backrunning 基本上利用了由于大额交易对代币价格的影响而产生的套利机会。例如,如果用户在 DEX 池中进行大额交易以将 WETH 兑换为 USDC,这可能会使 USDC 的价格高于其他交易所。Backrunning 机器人可以立即抓住这个套利机会,以较低的价格将 USDC 兑换为 WETH 以获得更多的 WETH,然后在其他交易所的 DEX 池中出售 WETH 以获取利润。
正如 in the post-mortem analysis 中所示,该漏洞存在于中继的代码中。即使签名的区块头无效(签名本身有效),它也会将构建者的区块内容泄露给(恶意的)提议者。在这种情况下,提交给信标链的无效区块头和区块内容将被拒绝,提议者可以赢得提交自己区块的竞赛,并利用泄露的区块内容来获取利润。
攻击者是恶意的提议者,受害者是打算执行三明治交易的 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 美元)?请注意,当受害者执行此 swap 时,池中的流动性非常低(0.005 WETH 和 4.5 STG)。
我们的分析表明,有两个原因导致 MEV 机器人执行如此荒谬的 swap。
首先,攻击者使用了蜜罐交易来诱使受害者发送此 swap 以执行三明治攻击。此蜜罐交易的哈希值为 0xd534c46ba5a444e886 | Phalcon Explorer (blocksec.com)。具体来说,攻击者广播了一个交易,以(在区块 16964664 之前)将 WETH 兑换为 STG。由于池中的流动性非常低,这为 MEV 机器人制造了进行三明治攻击的机会。如下图所示,MEV 机器人可以创建一个包含三个交易的三明治攻击 bundle(三明治攻击 bundle)。

其次,MEV 机器人使用了一种贪婪的三明治策略,并利用 Flashbots 发送此交易。为了最大化利润,bundle 中的第一个交易试图耗尽几乎所有的 STG 代币(使用 2,454 WETH)。这是一种非常贪婪的策略,使用 500 万美元(2,454 WETH)来获得约 700 美元(0.35 WETH)——7,000:1 的利润。该机器人假设除非在链上提交,否则此 swap 不会向公众公开。但是,由于中继的漏洞,此假设已被打破。利用这一点,攻击者创建了一个新的 bundle,其中包含该机器人的初始三明治攻击交易,并添加了一个抢先交易以获取 2,454 WETH。
The figure in BlockSec’s Twitter 显示了整个攻击过程。

我们知道攻击者发送了一个蜜罐交易,通过将 WETH 兑换为 STG 来诱骗受害者。但是,如果没有可利用的蜜罐交易的三明治交易会发生什么?在这种情况下,攻击者监视池的状态并执行反向 swap 以保护其 0.35 以太币,这是一个聪明的举动。以下是执行蜜罐交易的智能合约 (0xe73f1576af5573714404a2e3181f7336d3d978f9) 的反编译代码。

为了验证我们的发现,we simulated the honeypot transaction in Phalcon Fork,但在区块 16964664 的位置 0。

这是第一次利用 Flashbots 中继中的漏洞,并结合了复杂的攻击策略的攻击。
- 原文链接: blocksecteam.medium.com/...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!