Cover黑客攻击事件分析

Silas
Dec 28, 2020

--

长话短说,本次Cover的攻击首先出现在下午6点左右,

具体的操作流程如下:

首先,黑客部署了一个假的Cover合约

https://etherscan.io/token/0x53df0bfa014b7522299c129c5a7b318f02adb469

第二步,利用假合约为自己添加假cover代币

https://etherscan.io/tx/0xfd9641eda6388f8ac4ad0e9b7728e8e4b121a023d7d657ae951715641261820a

第三步,在balancer中为假币添加流动性,并获取假lp token

https://etherscan.io/tx/0x3631f3ad7351921f522b5634a4416536cb008d03b69dde8a001fdedc273a5be7

第四步,调用cover合约曾经部署合约的updatePool方法,将真lp地址替换为假lp地址。

(这一步只是黑客的尝试攻击)

这里是产生漏洞的关键,注意Pool storage pool = pools[_lpToken];

黑客攻击的核心步骤主要在以下两步

第五步,存入lp Token

https://etherscan.io/tx/0xd721b0ef2886f14b75548b70d2d1fd82bea085ca24f5de29b833a64cfd8f7a50

withdarw

https://etherscan.io/tx/0xd7d79be053bbe148daebdc1a697e5750fe2e2b9a7a735bc51c357b3dc0714b7e

并通过反复deposite以及withdraw获取了大量cover。

deposit中调用updatePool方法,并且由于使用了Pool memory pool 这样的变量定义,导致后面代码仅使用了该变量的copy,因此后面updatePool方法对于该pool中数据的修改将不起作用。

而在后续的_claimCoverRewards中,实际上是使用了update前所copy获取的memory中数据,即旧pool数据,同时,由于存入的假lp数量比较大,导致accRewardPerToken也随之增大,因此能够获取较多reward。

至此第一个黑客攻击完毕,获利200万美元后。

但在晚上8点左右,大家再次发现了异动。

被标记为Grap Finance的地址,利用同样的方式,经过多次小额的测试后,直接增发了

40,796,131,214,802,500,000.2121144 COVER

随后,这位黑客开始在各个流动池倾销增发的COVER

直至把UNISWAP上的池子抽干,此时共获得 4251 ETH

在遭受二次攻击,大家都心灰意冷的时候,此名“黑客”(Grap.finance)先是把砸剩下的COVER全部销毁了

https://etherscan.io/tx/0xe6c068ca3605228b2435a414f2b372057340f77d3fe9f1d3967eb1ad128cb5d2

再向COVER的合约做出了一笔转账

https://etherscan.io/tx/0xc2fd5094c1e108f83222a86bd46b35fc0da35616385d681964b22003643f982e

Take care your own shit.

Grap.finance的官方推特也发布了相关信息

自此告一段落,Grap.finance的开发者增发大量的COVER,抽干流动池,从而防止其他人利用漏洞进行攻击(事实上有一些人在做),然后把所得的ETH全部归还到COVER官方地址,进而成为了本次拯救活动。

目前漏洞已被修复,但COVER官方建议用户马上撤掉流动性,不要再购买COVER,等待下一步的调查。

--

--

No responses yet