BEC、SMT等ICO智能合约漏洞分析

4月25日早间,火币Pro公告,SMT项目方反馈今日凌晨发现其交易存在异常问题,经初步排查,SMT的以太坊智能合约存在漏洞。火币Pro也同期检测到TXID为0x0775e55c402281e8ff24cf37d6f2079bf2a768cf7254593287b5f8a0f621fb83的异常。受此影响,火币Pro现决定暂停所有币种的充提币业务。

另据慢雾区透露,SMT发现与前几天爆出的美图BEC代币类似的安全漏洞。我们可以通过BEC的漏洞来透视这一以太坊智能合约漏洞到底是怎么回事?

在BEC漏洞事件后,PeckShield团队随后发布安全报告,提到黑客利用in-the-wild手段抓取以太坊ERC-20 智能合约中的「BatchOverFlow」这个整数溢出漏洞来进行攻击

PeckShield 的安全预警报告中提到了该漏洞的具体细节,这个漏洞出现在 BEC 智能合约的batchTransfer 函数当中,代码如下图所示。

BEC、SMT等ICO智能合约漏洞分析_第1张图片

大家请注意第 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,而这一切都不会花费攻击者钱包里哪怕一毛钱!

综合起来就是,黑客利用以太坊ERC-20智能合约中BatchOverFlow漏洞中的数据溢出的漏洞,攻击了美链BEC的智能合约,成功地向两个地址转出了天量级别的BEC代币。

据了解,黑客可以通过转账的手段生成合约中不存在的、巨量的Token并将其转入正常账户,并且账户中收到的Token可以正常地转入交易所进行交易,与真的Token无差别。

资深区块链专家沈园用银行转账系统给出了一个通俗解释,假设银行系统的转账,每次限制在1亿元内。如果一个用户输入的数字,超过了1亿,银行有很多方式来规避这个问题。但在BEC「BatchOverFlow」漏洞中,当用户输入转账的数值超过设定的最大值,只要用户账户余额大于0,就可以直接将巨额的币转走”

随后 PeckShield 团队利用自动化系统扫遍了以太坊智能合约并对它们进行分析。结果发现,有超过 12 个 ERC-20智能合约都存在BatchOverFlow安全隐患。其中包括已经在交易所上进行交易币种。

PeckShield团队表示,出于安全考虑,暂时不能曝光这批项目的名称,但已与相关项目团队进行了联系。这里面可能就包括今天爆出的SMT项目。在火币今早公告中,暂停币种充提币来自SMT项目方主动反馈。

你可能感兴趣的:(区块链)