以太坊Token合约惊现“古老”溢出漏洞,多家交易所受到影响

事件

本周四凌晨(2018年12月27日),降维安全实验室(johnwick.io)自主研发的"智子"区块链威胁感知预警系统监控到某知名ERC20合约遭到黑客攻击, 黑客利用该合约批量转账中存在的整数溢出问题,向黑客受控账户"增发"了115,792,089,237,316,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000.584007913129639935数量的ERC20 Token,直接导致该合约的Token价值归0.

智子监控感知截图

以太坊Token合约惊现“古老”溢出漏洞,多家交易所受到影响_第1张图片

攻击交易截图

以太坊Token合约惊现“古老”溢出漏洞,多家交易所受到影响_第2张图片

分析

通过分析该合约源码,我们发现本合约虽然引入了SafeMath函数库来避免潜在的整数溢出,但是未对所有敏感数据的四则运算使用该函数库,百密一疏,导致本合约存在3处严重的整数溢出问题:

  • 其中batchInvests()因为是onlyOwner限制只允许owner合约管理者调用,所以影响轻微.
  • 另外2处batchTransfers()(正是上述事件中,被黑客利用的接口)和batchTransferFroms()因为是公开接口,可以被任意账户调用,所以影响更为严重.

batchInvest()

以太坊Token合约惊现“古老”溢出漏洞,多家交易所受到影响_第3张图片

batchTransfers()

以太坊Token合约惊现“古老”溢出漏洞,多家交易所受到影响_第4张图片

batchTransferFroms()

以太坊Token合约惊现“古老”溢出漏洞,多家交易所受到影响_第5张图片如上图所示, 如果有问题的转账金额数组amounts[]累加(黄色高亮代码)发生整数溢出,将导致总转账金额totalAmount绕过后续require()检查代码(绿色高亮代码),随后合约使用这些转账金额改写黑客控制账号的余额(红色高亮代码),达成攻击.

值得一提的是,这个漏洞跟今年7月7号的AMMBR(AMR)代币合约的multiTransfer()函数整数溢出漏洞如出一辙!

后续

  • 我们与该ERC20合约的项目方取得了联系,给他们的智能合约进行了加急审计,并提供了整改措施和修复方案.
  • 项目方行动迅速,不到12小时修复了我们指出的上述问题,并提供了修改后的合约源码供我方审计.
  • 经过我方再次审计,确认没有安全问题,项目方再次部署上链.

结论

  • 为了防止整数溢出,对所有敏感数据的加减乘除四则运算都应使用SafeMath函数库来进行.
  • 智能合约编写完成后,部署上公链前,应交给有经验的第三方的审计机构进行评估.
  • 智能合约部署上公链后,应加入第三方威胁感知监控系统,及时预警,将风险降至最低.

你可能感兴趣的:(降维安全实验室,智子,智能合约,黑客,攻击)