闪电贷+重入攻击,OUSD损失700万美金技术简析_币世界+慢雾科技

2020-11-18 20:15 栏目:行业动态 来源:网络整理 查看()

2020年11月17日,以太网的DeFi项目OUSD被闪电贷款袭击。作者:孔@慢雾安全队

根据慢雾区的信息,2020年11月17日,以太网的DeFi项目OUSD遭到闪电贷款袭击。慢雾安全团队会在第一时间跟进并做相关分析。下面简单分析一下慢雾安保团队的攻击。稍后将发布对攻击过程的详细分析。如果你感兴趣的话,请留意一下。

背景提要

原产地美元(OUSD),由原产地协议(OUSD)创建,是一种新型的ERC 20稳定货币。当它仍在钱包中时,它将自动从DeFi协议中获得竞争优势。OUSD由1: 1的其他稳定货币支撑,如USDT、USDC和戴。

攻击流程简析

1。攻击者使用dydx闪电贷款借出70,000个eth,然后通过Uniswap将它们交换给USDT和DAI。

2.当攻击者调用OUSD金库的造币功能时,金库会进行一次返利来分配之前积累的奖励,然后将攻击者合同中的750万USDT转移到OUSD金库。此时,OUSD合同将向攻击合同投出相同金额的750万OUSD代币,并最终通过分配来结算当前收入。

3.在攻击者转入750万之前,Vault的价值约为7018138美元。在转移到750万USDT后,攻击者将占保险库总价值的一半以上。

4.随后,攻击契约使用mintMultiple函数来传递DAI契约地址和攻击契约的地址。同样的,进行一次返利,将之前积累的收益进行分配(包括之前转移的USDT部分),然后将攻击合同的2050万DAI通过transferFrom转移到Vault。然后会调用攻击契约的transferFrom函数,攻击者在攻击契约的transferFrom函数中构造再次调用Vault契约的mint函数的逻辑,实现再入攻击。

5.前一步转账到2050万DAI后,通过攻击合同的transferFrom函数,再次调用Vault的mint函数。由于即将到来的2000 USDT在重新进入时满足是否调用rebase的条件,所以rebase将被执行一次,并且只有当Vault中的资产总值与OUSD的硬币总值之间存在差异时,才能触发rebase。按照原来的业务场景,在收益分配结算后,改变Vault中资产的总价值,然后通过rebase进行资产分配。然而,由于重新进入,铸币操作没有通过oUSD.mint先进行,攻击者已经先将2050万DAI转入金库,所以金库中的资产总值仍然增加,导致合同中的资产总值大于oUSD的铸币总值。因此,保险公司将把增加的2050万戴作为收入。第三步,由于攻击者的资产占金库总价值的一半以上,攻击者将凭空获得价值1025万以上的收益分配。

6.然后通过oUSD.mint投2000 OUSD,再入时2000 USDT的收入通过allocate结算(从上一步可以看出,攻击合同中导入的2000 USDT只是为了满足调用rebase的条件,触发收入分配)。重返后,之前转移的相当于2050万DAI的OUSD代币仍将通过oUSD.mint进行铸造

7.最终,金库的总价值约为3501万美元,但攻击者拥有的价值超过3825万美元,因此攻击者使用大部分OUSD来赎回金库,基本上清空了金库,而OUSD的其余部分通过Uniswap和Sushiswap的OUSD-USDT池将OUSD变成了USDT,以增加收入。

总结

,这次攻击的关键在于调用外部契约引起的再入问题和Vault的rebase收益分配机制的结合,导致攻击者可以通过再入凭空获得巨额收益分配。针对这种情况,慢雾安全团队建议,在检查入局资产后,不在白名单中的资产直接回滚,使用防再入锁,避免再入攻击。

微信二维码
售前客服二维码

文章均源于网络收集编辑侵删

提示:仅接受技术开发咨询!

郑重申明:资讯文章为网络收集整理,官方公告以外的资讯内容与本站无关!
NFT开发,NFT交易所开发,DAPP开发 Keywords: NFT开发 NFT交易所开发 DAPP开发