虚拟货币合约庞氏骗局揭秘

当to账户地址等于合约地址时,则调用sell函数,sell函数中由于代码编写失误,错误的将from写成msg.sender,对msg.sender的额度进行了减法操作,而在减法操作前没有进行安全检查,

Bitget下载

注册下载Bitget下载,邀请好友,即有机会赢取 3,000 USDT

APP下载   官网注册

以太坊智能合约中混杂进了不少庞氏骗局合约,他们向投资者承诺,如果你向某合约投资一笔以太坊,它就会以一个高回报率回赠你更多的以太币,然而高回报只能从后续的投资者那里源源不断地吸取资金以反馈给前面的投资者。

根据区块链大数据评级机构RatingToken最新数据显示,2018年7月20日全球共新增9552个合约地址,其中317个为代币型智能合约,另外值得关注的是同一个账户创建了7900个完全相同的智能合约,共消耗Gas费22 ETH,疑似代投机构批量创建。

ETH是一个典型的庞氏代币合约。该合约可以看成虚拟币交易所,但只有ETH和ETHX (ERC20 token)交易对,每次交易,都有5%的token分配给整个平台的已有的token持有者,因此token持有者在持币期间,将会直接赚取新购买者和旧抛售者的手续费。从ETHX合约代码可以看出,该合约对transferFrom函数进行了扩展,transferFrom函数首先进行allowance限额判定,然后调用了自定义的transferTokens函数来完成转账。

在transferTokens函数中,当to账户地址不等于合约地址,由于事先对from账户额度进行了安全检查,因此后面对from账户的balance运算不会产生溢出。

当to账户地址等于合约地址时,则调用sell函数,sell函数中由于代码编写失误,错误的将from写成msg.sender,对msg.sender的额度进行了减法操作,而在减法操作前没有进行安全检查,因此存在溢出漏洞。

为了完成对这个溢出漏洞的攻击,攻击者需要2个账户A、B,其中A账户代币余额不为0,B账户代币为0。

1)A账户调用approve给B授权一部分转账额度,假设授权额度为1;

2)B账户调用transferFrom,从A账户转1单位代币到智能合约;transferFrom调用sell函数时触发整数溢出,即0-1=2^255。B账户在余额为0的情况下获得了最大额度的token。

在ETHX合约攻击链中,攻击者使用了两个账户地址,分别为:

0x423b1404f51a2cdae57e597181da0a4ca4492f30

0x17a6e289e16b788505903cc7cf966f5e33dd1b94

首先,0x17a6e289e16b788505903cc7cf966f5e33dd1b94调用approve给0x423b1404f51a2cdae57e597181da0a4ca4492f30授权转账额度,参数value=1。

然后,0x423b1404f51a2cdae57e597181da0a4ca4492f30调用transferFrom方法,从账户0x17a6e289e16b788505903cc7cf966f5e33dd1b94向ETHX合约地址0x1c98eea5fe5e15d77feeabc0dfcfad32314fd481 转移1个Token。

调用前,balance(0x423b1404f51a2cdae57e597181da0a4ca4492f30)=0。调用后,溢出后balance(0x423b1404f51a2cdae57e597181da0a4ca4492f30)=2^255。

监控平台显示已经被攻击的同类代币合约如下表:

总结:

但其实究其根本,之所以如此多的智能合约出现同类漏洞,其背后是混乱的数字代币发行现状。还要提醒的是,在数字货币的世界里,各种漏洞都潜伏其中,投资者需要做好漏洞随时暴露的心理准备,同时,平台自身的资质,也是投资者需要仔细考虑的重要因素。

(作者:区块链安全档案,内容来自链得得内容开放平台“得得号”;本文仅代表作者观点,不代表链得得官方立场)

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 931614094@qq.com 举报,一经查实,本站将立刻删除。
虚拟货币合约庞氏骗局揭秘文档下载: PDF DOC TXT