这个原理被用来攻击dForce,当合约认为用户在持续增加imBTC抵押品(一种ERC777代币)数量的时候--然后合约就会允许用户从系统中借到更多资金。攻击者将他们假的imBTC抵押品增加到远远超过2500万美元,然后以借贷交易的方式提取出dForce中的所有流动资金。 通过可组合性(composability)进行黑客攻击 区块链上的智能合约是基于去信任(permissionless)来和用户以及其他智能合约交互的。对于那些设计智能合约的人来说,很难考虑到未来有人可能与他们的合约进行交互的每一种方式。其他人可以构建一种智能合约,以一种原作者不希望看到的方式与合约进行交互。 一个用户使用在dForce攻击中基于ERC-777标准的相同漏洞,从imBTC-ETH Uniswap池中抽走了22万美元。在Uniswap的案例中,攻击者从ETH-imBTC代币池中移出了ETH,但imBTC代币余额并没有增加。这样的操作通常会增加ETH的价格。 与dForce案例不同的是,Uniswap的开发团队在这并没有真正的责任,他们几乎不可能阻止人们落入这种类型的陷阱。即使Uniswap团队确保他们的交互界面不允许用户将流动性添加到一个可能被耗尽的池中,他们也无法阻止其他交互界面建立在允许它的智能合约之上。事实上,这种特殊的攻击方式在多年前就已经被广泛讨论过。 最近6月18日针对Balancer的攻击,就是一个类似的在特定市场中利用非标准编程模式的例子。STA是一种ERC20代币,有一种额外的通缩模型,即从每次转账中抽取1%的费用。攻击者使用智能合约在单笔交易中自动执行多个操作将WETH与STA 代币来回交换24次,耗尽了其中一个Balancer流动性池中的STA代币,直到池中只剩下0.000000000000000001 STA(1个weiSTA)。Balancer池没有意识到STA的通缩模型,并根据1 weiSTA为其资产设定了一个新的价格。之后攻击者对池中的WETH、LINK、SNX和WBTC进行了交易。通过这次攻击,使两个池子的资金损失超过了50万美金。 一天后,Balancer遭受了第二个漏洞问题,同样是由于与其他智能合约交互的意外行为造成的。Compound的代币分发要求用户通过与Compound的智能合约交互来领取自己的COMP。想要同时获得COMP和BAL(通过提供流动性赚取的Balancer代币)的用户要用COMP创建流动性池,这样他们就有资格获得这两种代币。 攻击者意识到,Balancer流动性池中的资产所产生的新COMP并不属于任何人,所以攻击者可以进入一个池中,获得这些可用的COMP代币,然后再带着比他们放入流动性池更多的钱离开。就像现在发现的漏洞情况一样,攻击者利用闪电贷来最大化自己的资本,然后获取最大收益。 (责任编辑:admin) |