星球日报
搜索
手机客户端
iPhone · Android
公众号
微信公众号

危及ERC20智能合约、让代币价值归零的溢出漏洞到底是什么?

1个月前

黑客可从攻击中获得大量代币,抛售获利。但同时也让其价值迅速归零。

危及ERC20智能合约、让代币价值归零的溢出漏洞到底是什么?7月8日下午,降维安全实验室(johnwick.io)监控到,以太坊智能合约AMR存在高危风险交易。团队对代码进行分析,发现其中存在的整数溢出漏洞已被人恶意利用,导致AMR大量增发。今年4月份,攻击者也曾利用该漏洞攻击美图合作的美链BEC,导致市场上顿时出现海量BEC,货币价值几乎归零。

那么,整数溢出漏洞是什么?可以从我们熟悉的登陆密码说起。

程序怎么判断用户输入密码的正误呢?后台的操作是这样的,先让用户输入密码,然后再调取真正的密码,与之对比,如果差异为0,则输出密码正确,否则错误。

这在用户输入正确密码(结果为0)或错误密码(结果不为0)时都很好判断。但是,由于后台留给密码的存储空间是有限的(比如4个字节),如果此时用户输入的数据超出4个字节,那么将会出现字符溢出。如果程序事先没有被设置对溢出进行判断的话,溢出的字符将使系统报错或关闭。

我们再来看此次整数溢出漏洞的缺陷代码片段由Bcsec安全团队提供

危及ERC20智能合约、让代币价值归零的溢出漏洞到底是什么?

该片段出现在一个叫“multiTransfer”的函数中,函数的作用是让一个地址可以同时给多个地址转账。问题代码中的totalTokensToTransfer计算出一共要支出的币的总量,tokens是最终给每个地址转账的金额。

由于项目方给totalTokensToTransfer变量赋值时未进行溢出判断,导致当tokens参数非常大时,totalTokensToTransfer变量进行数次计算后溢出为溢出值(攻击者一般将溢出值控制在0-10),系统即认为本次转账总金额为溢出后的值(比如0,也就是转账金额为0),由此便绕过余额检查的步骤继续完成交易,但实际上其转账金额远大于钱包所含金额。于是系统凭空转(多)出巨额代币,黑客将其在市场上抛售获利。

今年6月份,安比实验室(SECBIT)对以太坊上部署的合约进行的分析检测,发现共有866个合约存在相同问题。

为什么会存在这些漏洞呢?

Bcsec安全团队表示,这类漏洞本质是由于编程人员的疏忽造成的,之所以在以太坊ERC20中较大规模蔓延,是由于很多新上线的合约直接copy自一些合约模板,而未对其进行严格的安全评估,因此新项目如要使用应尽量确保其合约的安全性,才可以代表资产进行交易。

我是作者黄雪姣,区块链项目报道/交流可加微信hxjiapg,劳请备注职务和事由。

危及ERC20智能合约、让代币价值归零的溢出漏洞到底是什么?

原创文章,作者:黄雪姣。转载/内容合作/寻求报道请联系 report@odaily.com ;违规转载法律必究。

参与讨论

登录后参与讨论

黄雪姣

资深作者

黄雪姣

交流可加微信 hxjiapg,劳请注明职务与事由。

总文章数: 68


分享至

微信扫一扫分享

0
前沿科技金融科技

Copyright 2017-2018 Beijing Star Node Media Culture Co., Ltd.