前言近日,由于合约漏洞,大量代币BEC被转出,导致市场上…

发布日期:2019-08-10

昨日中午,黑客利用以太坊ERC-20智能合约中BatchOverFlow漏洞中数据溢出的漏洞攻击蔡文胜旗下美图合作的公司美链BEC的智能合约,成功地向两个地址转出了天量级别的BEC代币,导致市场上海量BEC被抛售,该数字货币价值几近归零,给BEC市场交易带来了毁灭性打击。区块链安全公司PeckShield目前已经发现除了BECToken之外,还有超过12多个项目Token的智能合约中存在BatchOverFlow整数溢出漏洞,黑客可以利用这一漏洞转账生成「不存在」的虚拟货币并进行交易获利。

被黑客攻击的BEC交易量数小时内形成价格「瀑布」,币值归零。目前BEC官方团队已经暂停一切交易和转账,将对Okex交易所的交易回滚到黑客充币之前。黑客绕过验证后生成“李鬼”币PeckShield团队今日凌晨发布安全报告,提到黑客利用in-the-wild手段抓取以太坊ERC-20智能合约中的「BatchOverFlow」这个整数溢出漏洞来进行攻击。利用这个漏洞,黑客可以通过转账的手段生成合约中不存在的、巨量的Token并将其转入正常账户,账户中收到的Token可以正常地转入交易所进行交易,与真的Token无差别。

PeckShield的安全预警报告中提到了该漏洞的具体细节,这个漏洞出现在BEC智能合约的batchTransfer函数当中,代码如下图所示。大家请注意第257行,cnt和_value的计算结果生成了局部变量。第二个参数,即_value,,可以是一个任意的256字节整数,就比如是:0x8000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000(63个0)。通过将两个_receivers注入到batchTranser(),再加上这个极其大的_value,我们就能使得量溢出,将其amount的量变成0。

通过将量回归到0,攻击者就可以绕过258行到259行的合理性检测,使得261行的差值变得不再相关。最后,出现了一个非常有趣的结果:你们可以看262行到265行,两个receriver的余额上增加了超级大的_value,而这一切都不会花费攻击者钱包里哪怕一毛钱!随后PeckShield团队利用自动化系统扫遍了以太坊智能合约并对它们进行分析。结果发现,有超过12个ERC-20智能合约都存在BatchOverFlow安全隐患。为了验证该漏洞存在的真实性,PeckShield团队对其中一个智能协议进行了相似的攻击(该合约中的代币并不在任何交易所交易,所以不会出现BEC的惨剧)。

PeckShield团队还对一个未在交易所上线的以太坊宠物游戏CryptoBots进行了BatchOverFlow安全性攻击,并成功地在该协议上「生成」了57,896,044,618,658,100,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000枚代币CBTB(你没看错,就是这么多0)。总币数已经超过合约规定的2万枚CBTB。CryptoBots这款游戏目前正在以太坊上进行交易,但通过数据查看后发现该游戏的实际游玩人数并不高,只有寥寥几十人在玩。PeckShield创始人蒋旭宪教授表示,「理论上可以把这个游戏中所有的道具都买下来。

」除了BEC和CryptoBots(CBTB)两个智能合约之外,还有十余个智能合约存在同样的漏洞,其中也包括已经在交易所上进行交易币种。出于安全考虑,目前PeckShield已经与相关项目团队进行了联系,暂时不能曝光这批项目的名称。区块链安全难道只靠回滚?BEC智能合约出现这个漏洞之后,黑客在2小时后开始往OKEx的地址充币进行交易,因为市场上出现大量未知来源的Token,市场上出现恐慌心理,OKEx交易所上的持币者开始抛售BECToken,导致BEC价格持续下跌,币值几乎归零。下图中我们可以看到黑客先是试探性地往OKEx中转入100万的BECToken,黑客发现成功转入卖出后,又分2次转入了1000万的BECToken,发现两次都成功,便转入了1亿枚BECToken。

但这1亿枚BECToken转入后,OKEx已经发现问题并停止了BEC的交易。按照转入记录,预计黑客已经卖出了最少1100万枚BEC,折合昨日售价约1887万人民币。下午4点12分,OKEx发布声明中止了相关交易。