一行代码蒸发了5,300,000元

栏目: 软件资讯 · 发布时间: 7年前

是利用区块链技术,运行在EOS公链上的一款菠菜游戏。上线两个月,盈利近百万的EOSBet昨日又因营销活动推向了一个小高潮,日活突破千人, 稳坐EOS DApp当日榜首。

不过刚高兴了一天的EOSBet, 却因代码漏洞,再次被黑客攻击了。

这是EOSBet上线以来第三次被攻击了!

无论表面数据如何风光,但菠菜类游戏始终有极大的风险,想要入场的朋友请谨慎。我们今天不谈其他,仅从技术角度来分析,EOS开发者的现状到底如何,EOSBet为何屡次被黑客攻击,我们到底需要什么样的机制。

01 复盘EOSBet三次被黑客攻击

1 黑客对EOSBet的第一次攻击:

早在游戏上线第二天,EOSBet就被黑客利用EOS网络本身缺陷,吸取了很多内存。当日团队紧急的作出修复,而且EOSIO已经在着手修复该漏洞。

可能是对自己的代码不自信,也可能是为了防止被攻击,或是有什么隐藏的后门, EOSBet 项目代码尚未开源。 可即使代码未开源,EOSBet也难逃被黑客再次攻击。

2 黑客对EOSBet的第二次攻击:

就在上个月,EOS上多个菠菜类DApp接连被黑客攻击,累计被薅走数百万。EOSBet也是那次攻击中损失最惨重的。

9月14日上午11点左右,EOS账号aabbccddeefg 在未进行投注的情况下,却以中奖的方式, 在20多分钟的时间内,赢得了4.2万个EOS(总价值约为150万人民币)及投注产生的1千多个平台代币BET。

据分析,EOSBet被攻击,是 因为代码中并没有检查收到的EOS是不是eosio.token产生的EOS,黑客通过自己创建的名字同为EOS的“假币”,套取了真的EOS。

那次黑客事件的详细复盘链接: https://bihu.com/article/1378930

3 黑客对EOSBet的第三次攻击:

接连两次被攻击,EOSBet也更加注重安全审计。

EOSBet已经将奖池的30万EOS转入冷钱包,同时将每把游戏上限由1%提升到4%,保持最大押注额不变,以保障大户的游戏体验。EOSBet表示会尽最大努力,保障最基本也是最重要的安全问题。

可惜,第三次攻击还是发生了,而且损失金额更大! 就在刚刚,EOSBet再次被黑客攻击,直接损失了14万EOS!!!

02 第三次黑客攻击来龙去脉

EOSBet这次的攻击是因为下面的这段代码:

__attribute__((eosio_action)) 

void transfer(account_name from, account_name to, asset quantity, string memo){

require_recipient(ECIPIENT_CRACT);

}

主要问题是出在没有判断用户的转账是转给了其他账户,还是转给了EOSBet的合约。

一行代码蒸发了5,300,000元

以上图片引用自慢雾科技文章_< EOS DApp 充值“假通知”漏洞分析>

简单来说,就是黑客自己创建了两个账户,攻击账户A和无关账户B,而B是一个合约账户,每次转账成功之后,B账户就会自动发个通知给EOSBet的合约说转账收到了。

EOSBet的合约收到这个通知后,没有检查自己是否真的收到了EOS,误把账户A对账户B的转账判断成了账户A对EOSBet合约账户的转账。也就是把账户A当成了EOSBet下注了的玩家,给玩家开奖。

黑客于是就用这个漏洞,空手套白狼,不断开奖,给自己开了14万EOS的奖!

那么这个漏洞该如何修复呢?其实很简单,只需要加一句判断, if (to != _self) return ;  来判断传来的转账通知是不是转给自己的。

于是, 就因为缺少了一句判断,EOSBet这次被黑客提走14万EOS。EOS现价约为5.48USD(转换成人民币大概在38元), 14万个EOS累计530万人民币!!!

03 CPU告急,大户人家的游戏

EOS的开发者除了要担心合约被黑客攻击之外,被爆CPU也是常有的事。

转账是执行区块链DApp智能合约的基本功能,在上的转账是要消耗Gas的,用户支付越高的Gas费用,交易越容易被矿工优先记录和执行。EOS的转账交易虽然是免费的,但同时需要占用和消耗少量的资源来保证系统的安全。

EOS执行交易主要是依靠三种资源:ram,带宽、CPU。

其中ram是需要购买和消耗的,带宽和CPU是通过抵押EOS来获得的。通常DApp开发者会为用户抵押一定的带宽和CPU资源,来降低用户入场门槛。如果DApp开发者没有抵押足够的资源给用户,同时用户自己也没有抵押足够的资源的话,是无法与合约进行交互的。

举个例子,假设全网一共抵押了100个EOS来置换CPU资源,那么抵押了1个EOS的账号则被分配全网1%的CPU。这个候,有个账号抵押了100个EOS的CPU,那么之前抵押了EOS的账号被分配的CPU就被稀释了一半。此时再来一个大户抵押10000个EOS,那么之前抵押了EOS的账号被分配的CPU就被严重稀释,导致不够资源来执行操作。

ITE4是一种早期入场回报极高,后期砸盘极快的游戏,获得盈利要拼“入场早”和“跑得快”。该资金盘游戏上线前,有人大量质押和租赁CPU资源,导致项目上线时,各账号的CPU资源占比被大大的稀释。大部分玩家在开局时没有足够的CPU资源入场买进,而有幸买进入场的用户在项目砸盘时也没有足够的CPU资源离场,坐等被收割。

因为EOS上CPU资源总量有限,导致大户在抵押EOS换取资源上有着很强的优势。所以最近每当有一些大型DApp搞活动或者新资金盘游戏上线时,便会有大量的EOS用于抵押CPU,稀释小户的CPU占比,导致大量DApp瘫痪。

难怪有人说,EOS是大户人家玩的游戏。

04 总结——开源的力量

EOS上线仅4个月,很多开发者刚刚进入到这个领域,开发者没有太多成熟案例可以参考和借鉴,必然会经历一段踩坑期。EOSBet合约尚未开源,屡次被攻击都是因为缺少一行简单的判断代码,而酿成重大损失。

我们一直希望开源能够让世界变得更好,这是因为我们相信透明的机制的力量,相信透明的规则能够让信任的成本降到最低,让合作的效率变得更高。

目前大部分项目方怕被黑客攻击选择不开源,而实际的结果只能是掩耳盗铃。黑客往往能够根据 wasm 和 abi 文件还原出合约的信息,很多时候封闭的代码只会隐藏自己的错误反而给黑客可乘之机——而EOSBet就是最好的例子。


以上所述就是小编给大家介绍的《一行代码蒸发了5,300,000元》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Developing Large Web Applications

Developing Large Web Applications

Kyle Loudon / Yahoo Press / 2010-3-15 / USD 34.99

As web applications grow, so do the challenges. These applications need to live up to demanding performance requirements, and be reliable around the clock every day of the year. And they need to withs......一起来看看 《Developing Large Web Applications》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具