您现在的位置:主页 > 业界 >

慢雾:AutoShark Finance 被黑分析

更新时间:2021-05-25 18:14:32

  据慢雾区消息,币安智能链(BSC)DeFi 项目 AutoShark Finance 被黑,导致代币价格闪崩。慢雾安全团队在第一时间跟进分析,供大家参考。
由于 AutoShark 策略池的机制,攻击者需要事先存入一定数量的 LP 代币到策略池中,为后续攻击做准备,所以整个攻击其实分成了 2 步,这里主要分析的是第 2 笔的攻击交易。
攻击步骤如下:
1. 攻击者从 Pancake 的 WBNB/BUSD 交易对中借出大量 WBNB;
2. 将第 1 步借出的全部 WBNB 中的一半通过 Panther 的 SHARK/WBNB 交易对兑换出大量的 SHARK,同时池中 WBNB 的数量增多;
3. 将第 1 步和第 2 步的 WBNB 和 SHARK 打入到 SharkMinter 中,为后续攻击做准备;
4. 调用 AutoShark 项目中的 WBNB/SHARK 策略池中的 getReward 函数,该函数会根据用户获利的资金从中抽出一部分手续费,作为贡献值给用户奖励 SHARK 代币,这部分操作在 SharkMinter 合约中进行操作;
5. SharkMinter 合约在收到用户收益的 LP 手续费之后,会将 LP 重新拆成对应的 WBNB 和 SHARK,重新加入到 Panther 的 WBNB/SHARK 交易池中;
6. 由于第 3 步攻击者已经事先将对应的代币打入到 SharkMinter 合约中,SharkMinter 合约在移除流动性后再添加流动性的时候,使用的是 SharkMinter 合约本身的 WBNB 和 SHARK 余额进行添加,这部分余额包含攻击者在第 3 步打入 SharkMinter 的余额,导致最后合约获取的添加流动性的余额是错误的,也就是说 SharkMinter 合约误以为攻击者打入了巨量的手续费到合约中;
7. SharkMinter 合约在获取到手续费的数量后,会通过 tvlInWBNB 函数计算这部分手续费的价值,然后根据手续费的价值铸币 SHARK 代币给用户。但是在计算 LP 价值的时候,使用的是 Panther WBNB/SHARK 池的 WBNB 实时数量除以 LP 总量来计算 LP 能兑换多少 WBNB。但是由于在第 2 步中,Panther 池中 WBNB 的数量已经非常多,导致计算出来的 LP 的价值非常高;
8. 在 LP 价值错误和手续费获取数量错误的情况下,SharkMinter 合约最后在计算攻击者的贡献的时候计算出了一个非常大的值,导致 SharkMinter 合约给攻击者铸出了大量的 SHARK 代币;
9. 攻击者后续通过卖出 SHARK 代币来换出 WBNB,偿还闪电贷。然后获利离开。