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

作者: 分类: 奇闻 发布时间: 2019-08-29 13:27

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

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

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

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

__attribute__) 

void transfer{

require_recipient;

}

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

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

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

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

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

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

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

于是, 就因为缺少了一句判断,EOSBet这次被黑客提走14万EOS。EOS现价约为5.48USD,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就是最好的例子。


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