以太坊Fountain代币遭溢出攻击

相关线索:

Fountain代币合约源码:

https://etherscan.io/address/0x82cf44be0768a3600c4bdea58607783a3a7c51ae#code

本次攻击主要利用了合约中的batchTransfers函数,攻击交易地址:

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

代码分析:

先来看看主要的batchTransfers函数:

以太坊Fountain代币遭溢出攻击_第1张图片

该函数是用于分别给不同的地址转账,具体流程如下:

  • 计算总共要转的金额(存在溢出
  • 转账人的余额减去要转的总金额
  • 收款人增加单笔转账的金额

问题主要发生在第一步,由于存储总金额的变量totalAmount的类型为uint256,uint256的最大值为2的256次方,当要赋予totalAmount的值超过2^256的话就会发生上溢。

出了batchTransfers函数之外我们还发现了该合约还有多处函数存在类似的溢出问题:

  • batchTransferFroms
  • function batchInvests  (只允许owner调用

造成损失

首先攻击者使用溢出给自己凭空铸造了大量的代币

以太坊Fountain代币遭溢出攻击_第2张图片

但是他并无法卖出这么多

以太坊Fountain代币遭溢出攻击_第3张图片

该地址总共向外转出了7502160个代币。

然后我们发现该代币总共就上线了两个交易所:CoinBene、Cointiger

经过调研发现攻击者主要在Cointiger交易所将币卖出

以太坊Fountain代币遭溢出攻击_第4张图片

时间和攻击者对合约完成攻击的时间差不多吻合

以太坊Fountain代币遭溢出攻击_第5张图片

如果将这个时间段内的卖单全部算为攻击者的卖单,那么攻击者本次总共卖出的代币数量为12595,获利金额为0.07 BTC。

你可能感兴趣的:(【区块链】,————以太坊安全)