昨日中午,黑客利用以太坊 ERC-20 智能合约中 BatchOverFlow 漏洞中数据溢出的漏洞攻击蔡文胜旗下美图合作的公司美链 BEC 的智能合约,成功地向两个地址转出了天量级别的 BEC 代币,导致市场上海量BEC被抛售,该数字货币价值几近归零,给 BEC 市场交易带来了毁灭性打击。
区块链安全公司 PeckShield 目前已经发现除了 BEC Token 之外,还有超过 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 交易所上的持币者开始抛售 BEC Token,导致 BEC 价格持续下跌,币值几乎归零。
下图中我们可以看到黑客先是试探性地往 OKEx 中转入 100 万的 BEC Token,黑客发现成功转入卖出后,又分 2 次转入了 1000 万的 BEC Token,发现两次都成功,便转入了 1 亿枚 BEC Token。
但这 1 亿枚 BEC Token 转入后,OKEx 已经发现问题并停止了 BEC 的交易。
按照转入记录,预计黑客已经卖出了最少 1100 万枚 BEC,折合昨日售价约 1887 万人民币。
下午 4 点 12 分,OKEx 发布声明中止了相关交易。BEC 团队也公告表示将与 OKEx 交易所合作回滚到黑客转入 Token 之前的数据以保护投资者的权益。
PeckShield 团队认为,因为以太坊区块链上所谓“代码即一切”的原则精神的存在,导致目前没有有效的安全防护手段来修复这些问题,而且因为 Token 交易背后牵扯着巨大的利益,是无法在多个交易所进行同步防护的。
因为中心化交易所只是对 Token 进行记账式的交易,项目团队与交易所配合之后回滚是可以一定程度上保护投资者利益的,但是如果在去中心化交易所进行交易那么投资者的损失将无法挽回,同时,利用交易所反应的时间差,黑客也可以实现在多个交易所套利。
知乎作者爬虫认为该漏洞很容易解决,只需要对计算结果进行 safeMath 的安全验证就可以,同时表示区块链智能合约代码需要测试、需要 review,必要时可以请专门做代码审计的公司来进行测试。
前有 OKEx 回滚期货交易,后有 OKEx 回滚 BEC 交易,为什么区块链上的安全问题总是要靠回滚来解决?如果没法从根本上解决漏洞,那么受害的不仅仅是投资者,虚拟货币生态中的所有参与者都将遭受巨量损失。