mt logoMyToken
总市值:
0%
恐慌指数:
0%
币种:--
交易所 --
ETH Gas:--
EN
USD
APP
Ap Store QR Code

Scan Download

以太坊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.

智子监控感知截图

在这里插入图片描述

攻击交易截图

在这里插入图片描述

分析

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

其中batchInvests()因为是onlyOwner限制只允许owner合约管理者调用,所以影响轻微.

另外2处batchTransfers()(正是上述事件中,被黑客利用的接口)和batchTransferFroms()因为是公开接口,可以被任意账户调用,所以影响更为严重.

batchInvest()

在这里插入图片描述

batchTransfers()

在这里插入图片描述

batchTransferFroms()

在这里插入图片描述

如上图所示, 如果有问题的转账金额数组amounts[]累加(黄色高亮代码)发生整数溢出,将导致总转账金额totalAmount绕过后续require()检查代码(绿色高亮代码),随后合约使用这些转账金额改写黑客控制账号的余额(红色高亮代码),达成攻击.

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

后续

我们与该ERC20合约的项目方取得了联系,给他们的智能合约进行了加急审计,并提供了整改措施和修复方案.

项目方行动迅速,不到12小时修复了我们指出的上述问题,并提供了修改后的合约源码供我方审计.

经过我方再次审计,确认没有安全问题,项目方再次部署上链.

结论

为了防止整数溢出,对所有敏感数据的加减乘除四则运算都应使用SafeMath函数库来进行.

智能合约编写完成后,部署上公链前,应交给有经验的第三方的审计机构进行评估.

智能合约部署上公链后,应加入第三方威胁感知监控系统,及时预警,将风险降至最低.

免责声明:本文版权归原作者所有,不代表MyToken(www.mytokencap.com)观点和立场;如有关于内容、版权等问题,请与我们联系。