2022年4月2日,成都链安链必应-区块链安全态势感知平台舆情监测显示,Inverse Finance 项目遭受攻击,累计损失估计大约1500万美元。成都链安技术团队第一时间对此事件进行了相关分析。
#1 分析如下
攻击地址1:
0x117c0391b3483e32aa665b5ecb2cc539669ea7e9
攻击地址2:
0x8b4c1083cd6aef062298e1fa900df9832c8351b3
攻击交易hash:
0x20a6dcff06a791a7f8be9f423053ce8caee3f9eecc31df32445fc98d4ccd8365
0x600373f67521324c8068cfd025f121a0843d57ec813411661b07edc5ff781842
攻击合约:
0xea0c959bbb7476ddd6cd4204bdee82b790aa1562
首先攻击者从Tornado.Cash取出900 ETH为拉高INV代币价格做准备。
攻击者使用300个 ETH,兑换出374个INV代币,再用200 ETH兑换1372个INV代币,累计兑换1746个INV代币,这里可以发现第一个池子用300个ETH只兑换出374个INV,而后面却使用200 ETH兑换出1372 INV代币,第一个池子WETH/INV中的INV价格已经明显被拉高。
在计算Xinv代币价格时,依靠WETH/INV (0x328dfd0139e26cb0fef7b0742b49b0fe4325f821)这个pair去计算。因为pair这个池子已经被操纵了,再加上timeElapsed间隔时间短,那么攻击者需要满足不在当前区块调用,就可以利用操纵的价格,那么就可以操纵xINV代币的价值。
可以看到当攻击操纵了pair之后,就不停的发送mint交易,用于确保自己能够最大化利用时间窗口。同时,攻击者巧妙的避开了操纵价格的区块(14506358)去mint,不然将会使用操纵价格区块的前面区块去计算价格。
然后攻击者直接把自己持有的1746 INV代币全部mint(这里算是抵押),换取1156个xINV代币(LP代币),再依靠持有的xINV借出大量代币。
Inverse finance项目方累计损失估计大约在1500万美元。
在此,成都链安建议项目方使用足够长的时间窗口,例如可以参考以下Uniswap的示例代码,timeElapsed必须大于24小时以上。