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

1. 交易如何添加到区块链?
2. 抢跑攻击(Front Running Attacks)
3. 抢跑攻击示例
4. 三明治攻击(Sandwich Attack)
5. 缓解措施
6. 参考文献
在理解这个漏洞之前,我们先来了解一些术语以及交易是如何提交到区块链的。

所以,当用户向节点提交交易时,它不会立即被添加到一个区块中。在验证交易之前,这些未被挖掘的交易会被保存在一个类似等候室的地方,叫做 内存池(Mempool)。
术语“mempool”是“memory(内存)”和“pool(池)”的缩写,用于描述节点存储经过验证的交易的区域,这些交易在这里等待被挖掘并添加到区块链中。
矿工将有效的交易包含到区块中,但是不能保证它们的顺序与发送的顺序相同。矿工根据费用执行交易。矿工可以选择内存池中的交易包含到区块中,费用较高的交易更有可能被优先选择。费用越高,交易处理的速度就越快。

抢跑攻击利用了交易添加到区块链分布式账本的过程。
当恶意用户观察到用户广播的交易并正在内存池中等待时,就会发生抢跑攻击。攻击者然后发送他们自己的交易,目的是通过更高的 gas 费来获取一些利润。这将导致攻击者的交易在用户之前执行。通常,矿工或机器人会将其自己的交易立即放在待处理的交易之前。
假设有一个问答游戏,其中 2 个用户可以参与游戏,每人支付 50 美元。谁先提交正确答案,谁就能获得 100 美元的奖励。

现在,Alice 和 Bob 参加了游戏。
三明治攻击是抢跑的一种形式,它主要针对去中心化金融协议和服务。
三明治攻击涉及将用户的交易“夹在”两个交易之间。这两个交易分别在用户交易之前和之后(因此得名三明治),从而为用户带来损失,为攻击者带来收益。
在三明治攻击中,攻击者首先会监视内存池中待处理的交易。然后,他会找到用户的交易并进行两次交易,一次在受害者的待处理交易之前(抢跑),另一次在它之后(尾随)。受害者的待处理交易将被攻击者创建的两个新交易订单夹在中间。放置这两个订单并围绕待处理交易的目的是操纵资产价格。
让我们假设 Bob 正在从 Uniswap 池中用 ETH 交换 MATIC。现在,攻击者通过扫描 内存池(mempool) 来监视他的交易,当他找到他的交易时,他立即下了两个订单。
攻击者的第一个交易: 用更高的 gas 费交换 ETH 为 MATIC 攻击者的第二个交易: 用更低的 gas 费交换 MATIC 为 ETH
有几种方法可以预防抢跑攻击。下面提到了一些:
1. 保持最大滑点较低:保持最大滑点较低,大约在 0.5%-2% 左右,以抵御抢跑者。当下一个大订单时,将你的滑点保持在较低的水平。抢跑者希望你保持较高的滑点,所以最好反其道而行之。
2. 交易计数器: 在许多情况下(如果不是大多数情况),攻击者的目的是在受害者的交易被执行之前,不显眼地发送一个交易。因此,为了防止这种情况,你可以在你的智能合约中使用一个交易计数器。每当你的智能合约中发生状态修改交易时,将一个全局交易计数器递增 1。
3. 链下排序: 链下排序意味着两个步骤:排序(当然,不是在区块链上完成的)和结算(在区块链上完成的)。无论是谁在实现排序解决方案,都可以自由地从大量的潜在平台上进行选择。他们可以利用这些系统的特性,而区块链可能不具备这些特性,例如时间戳消息、免费消息和更高的吞吐量。
4. 限制 gas 价格: 这种缓解抢跑的方法也只需要很少的开销(这可以节省用户的 gas 成本)。在 Solidity 中,可以创建一个名为 gasThrottle 的 modifier,它检查进行函数调用的交易的 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

为什么选择 QuillAudits 进行 Web3 安全? QuillAudits 配备了完善的工具和专业知识,可以提供网络安全解决方案,避免数百万美元的资金损失。
通过以下方式与 QuillAudits 联系:
领英(LinkedIn) | 推特(Twitter) | 网站(Website) | 新闻简报(Newsletter) | Discord | Telegram
- QuillAudits 合作伙伴计划(风险投资基金、LaunchPad、开发公司、营销公司、web2 网络安全公司、web3 产品)
- 加入大使计划
- 原文链接: quillaudits.medium.com/f...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!