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

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

是利用区块链技术,运行在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元》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

C++ How to Program (5th Edition) (How to Program)

C++ How to Program (5th Edition) (How to Program)

Harvey & Paul) Deitel & Associates / Prentice Hall / 2005-01-05 / USD 98.00

With over 250,000 sold, Harvey and Paul Deitel's C++ How to Program is the world's best-selling introduction to C++ programming. Now, this classic has been thoroughly updated! The Deitels' groundbreak......一起来看看 《C++ How to Program (5th Edition) (How to Program)》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器