抢跑交易和三明治攻击详解

本文介绍了区块链交易如何被添加到区块链中,以及由此引发的两种攻击方式:抢跑交易攻击(Front Running Attack)和三明治攻击(Sandwich Attack)。文章通过实例解释了这两种攻击方式的原理,并提供了一些防范措施,例如降低滑点、使用交易计数器、链下排序和限制gas价格。

目录:

1. 交易如何添加到区块链?

2. 抢跑攻击(Front Running Attacks)

3. 抢跑攻击示例

4. 三明治攻击(Sandwich Attack)

5. 缓解措施

6. 参考文献

交易如何添加到区块链?

在理解这个漏洞之前,我们先来了解一些术语以及交易是如何提交到区块链的。

所以,当用户向节点提交交易时,它不会立即被添加到一个区块中。在验证交易之前,这些未被挖掘的交易会被保存在一个类似等候室的地方,叫做 内存池(Mempool)

术语“mempool”是“memory(内存)”和“pool(池)”的缩写,用于描述节点存储经过验证的交易的区域,这些交易在这里等待被挖掘并添加到区块链中。

矿工将有效的交易包含到区块中,但是不能保证它们的顺序与发送的顺序相同。矿工根据费用执行交易。矿工可以选择内存池中的交易包含到区块中,费用较高的交易更有可能被优先选择。费用越高,交易处理的速度就越快。

抢跑(Front Running):

抢跑攻击利用了交易添加到区块链分布式账本的过程。

当恶意用户观察到用户广播的交易并正在内存池中等待时,就会发生抢跑攻击。攻击者然后发送他们自己的交易,目的是通过更高的 gas 费来获取一些利润。这将导致攻击者的交易在用户之前执行。通常,矿工或机器人会将其自己的交易立即放在待处理的交易之前。

让我们通过一个实际的例子来理解抢跑:

假设有一个问答游戏,其中 2 个用户可以参与游戏,每人支付 50 美元。谁先提交正确答案,谁就能获得 100 美元的奖励。

现在,Alice 和 Bob 参加了游戏。

  1. Alice 知道给定问题的答案,但 Bob 不知道。
  2. Alice 提交了正确的答案,支付了 15 gwei 的费用。
  3. 同时,Bob 监视内存池中 Alice 的答案。在找到 Alice 带有答案的交易后,Bob 提交了相同的答案,但 gas 费更高(50 gwei)。
  4. 现在,发生的情况是矿工会先执行 Bob 的交易,因为 Bob 支付了更高的费用。结果,Alice 输掉了游戏,而 Bob 赢得了游戏,获得了 100 美元,尽管他并不知道答案。

三明治攻击(Sandwich Attack):

三明治攻击是抢跑的一种形式,它主要针对去中心化金融协议和服务

三明治攻击涉及将用户的交易“夹在”两个交易之间。这两个交易分别在用户交易之前和之后(因此得名三明治),从而为用户带来损失,为攻击者带来收益。

在三明治攻击中,攻击者首先会监视内存池中待处理的交易。然后,他会找到用户的交易并进行两次交易,一次在受害者的待处理交易之前(抢跑),另一次在它之后(尾随)。受害者的待处理交易将被攻击者创建的两个新交易订单夹在中间。放置这两个订单并围绕待处理交易的目的是操纵资产价格。

让我们通过一个实际的例子来理解三明治攻击:

让我们假设 Bob 正在从 Uniswap 池中用 ETH 交换 MATIC。现在,攻击者通过扫描 内存池(mempool) 来监视他的交易,当他找到他的交易时,他立即下了两个订单。

攻击者的第一个交易: 用更高的 gas 费交换 ETH 为 MATIC 攻击者的第二个交易: 用更低的 gas 费交换 MATIC 为 ETH

  1. 首先,攻击者将通过相同的兑换(将 ETH 兑换为 MATIC)抢先执行 Alice 的交易,从而提高 MATIC 的价格。
  2. 现在,在价格上涨之后,Alice 的交易被执行,她最终以更高的价格支付更多的 ETH 来购买 MATIC,导致更高的价格滑点。
  3. 一旦受害者的交易被执行,攻击者就会将他的 MATIC 换回 ETH 并获利。

如何预防这些攻击?

有几种方法可以预防抢跑攻击。下面提到了一些:

1. 保持最大滑点较低:保持最大滑点较低,大约在 0.5%-2% 左右,以抵御抢跑者。当下一个大订单时,将你的滑点保持在较低的水平。抢跑者希望你保持较高的滑点,所以最好反其道而行之。

2. 交易计数器: 在许多情况下(如果不是大多数情况),攻击者的目的是在受害者的交易被执行之前,不显眼地发送一个交易。因此,为了防止这种情况,你可以在你的智能合约中使用一个交易计数器。每当你的智能合约中发生状态修改交易时,将一个全局交易计数器递增 1。

3. 链下排序: 链下排序意味着两个步骤:排序(当然,不是在区块链上完成的)和结算(在区块链上完成的)。无论是谁在实现排序解决方案,都可以自由地从大量的潜在平台上进行选择。他们可以利用这些系统的特性,而区块链可能不具备这些特性,例如时间戳消息、免费消息和更高的吞吐量。

4. 限制 gas 价格: 这种缓解抢跑的方法也只需要很少的开销(这可以节省用户的 gas 成本)。在 Solidity 中,可以创建一个名为 gasThrottlemodifier,它检查进行函数调用的交易的 gas 成本(通过 tx.gasPrice)是否小于或等于某个我们称之为 MAX_GAS_PRICE 的金额。

modifier gasThrottle(uint256 maxGasPrice) {
    require(tx.gasPrice <= maxGasPrice, "Gas price too high");
    _;
}

查看这篇文章了解针对抢跑攻击的详细预防措施。

参考文献:

https://medium.com/coinmonks/defi-sandwich-attack-explain-776f6f43b2fd

https://forum.openzeppelin.com/t/protecting-against-front-running-and-transaction-reordering/1314

Web3 安全 - 迫在眉睫

为什么选择 QuillAudits 进行 Web3 安全? QuillAudits 配备了完善的工具和专业知识,可以提供网络安全解决方案,避免数百万美元的资金损失。

想要更多这样的安全博客和报告吗?

通过以下方式与 QuillAudits 联系:

领英(LinkedIn) | 推特(Twitter) | 网站(Website) | 新闻简报(Newsletter) | Discord | Telegram

与 QuillAudits 合作:

- 联盟计划(推荐并保护 web3)

- QuillAudits 合作伙伴计划(风险投资基金、LaunchPad、开发公司、营销公司、web2 网络安全公司、web3 产品)

- 加入大使计划

  • 原文链接: quillaudits.medium.com/f...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
quillaudits
quillaudits
江湖只有他的大名,没有他的介绍。