那么,什么样的安全威胁可以被称为前十大智能合约安全威胁呢?SharkTeam合同安全性系列课程中的第七课详细探讨了三明治攻击,它就是其中的一种。
一、什么是三明治攻击?
三明治攻击是一种提前交易的攻击,主要针对Defi协议和服务。攻击者会在网络上寻找等待处理的交易,如以太坊,并在交易前和交易后下单。攻击者将同时进行外置和内置交易,将原本等待处理的交易夹在中间。
具体可参考以下操作步骤:
(1)攻击者提前了解受害者的交易意图,以10个TokenA交换100个TokenB,同时提高TokenB的价格
(2)受害者不经意间以5个TokenA交换了40个TokenB(原本应该是可用5个TokenA换取50个TokenB)
(3)攻击者将100个TokenB转换为12.5个Token A,赚取2.5个TokenA的利润
如果我们首先选择购买Token,然后其他人选择购买其他Token,价格就会上涨。如果我们立即卖出,我们就可以通过高买低卖来实现对冲套利。然而,三明治攻击摒弃了正常交易者的权益,攻击者最终获得了利润。
三明治攻击可能采取以下两种形式:
(1)流动性提供者攻击流动性提供者
攻击者尝试攻击等待在区块链上处理AMM交易的流动性提供者。攻击者通过前后交易(前置和后置)从交易者处获利。现在,三个等待处理的交易通过一个流动性池和外汇市场连接。挖矿必须选择哪笔交易最先获得批准,攻击者可以通过具体行贿来影响这种选择,例如支付更高的或更低的交易费用。
(2)流动性服务提供者攻击流动性获奖者
在这种情况下,流动性服务提供者试图攻击流动性获奖者。一切从一名等待处理交易的流动性提供者开始,攻击者随后进行三项操作:
(a)取消流动性:提前布置(通过降低资产通胀预期来提高受害者的滑块)
(b)添加流动性:修复操作(恢复到攻击前资金池中的流动性水平)
(c)用B交换A:回到操作(将A的资产余额恢复到攻击前水平)
在此攻击中,攻击者从流动性池中获取了所有资产。在这个过程中,攻击者将放弃受害者的交易提成,流动性服务提供者将从其与AMM协议之间提供的流动性中扣除提成。
然而,这种攻击并不总是可行的。要使攻击合理,必须同时满足两个标准:
(1)利润必须大于gas费(挖矿所需支付的成本),因为如果利润不大,用户必须获得大量的Token才能弥补gas费用
(2)减少滑块:滑块是指客户在交易中接受的最理