300枚EOS转眼变为30000枚!EOS DApp成为了黑客的摇钱树?
科技
科技 > 区块链 > 正文

300枚EOS转眼变为30000枚!EOS DApp成为了黑客的摇钱树?

EOS上的游戏又双叒被黑客给黑了!

这一次惨遭毒手的,是EOS公链中的“老牌”游戏类DApp——EOSPlay。

在上周,一名黑客利用EOSPlay中随机数生成器的相关特性,成功地在该平台的菠菜游戏DICE里实现了持续获胜,并以此来牟取大量EOS币。

据了解,截至上周末,这名黑客已经通过这一方法获得了约3万个EOS币,累计价值超过110000美元,而他所使用的成本,仅为大约300枚EOS。

- 01 -

屡遭毒手的EOS游戏

“EOS网络也许并不适合DApp,尤其是那些菠菜、竞猜游戏。”一名EOS社区成员在EOSPlay事件发生后评论道。

据不完全统计,仅2018年下半年,EOS上由黑客攻击所引发的较大的DApp安全事故就多达27起,累计损失约40万枚EOS币。

尽管事故的数量在2019年有了较为显著的减少,但是发生于EOS DApp的被黑事件仍然占到整个行业所有被黑事件的一半左右。根据慢雾科技所统计的“被黑档案库”,区块链被黑事件总计有224起,其中111起都来自于EOS DApp。

图片资料来自慢雾科技“被黑档案库”

而在遭遇黑客攻击的DApp当中,菠菜游戏占据绝大多数,是最容易、也最经常被黑客们“光顾”的应用类型。

从最早发生于EOS上线后不久的Luckyos被黑客破悉随机数生成规律,到截至目前损失最为惨重的EOSBet假币事件,再到如今老牌游戏平台EOSPlay遭到新型随机数攻击。EOS游戏可谓是屡遭毒手,生存环境之险恶可见一斑。

值得注意的是,在一桩桩EOS游戏被黑事件接连被爆出的过程之中,随机数攻击似乎是出现频率最高的词汇。

- 02 -

什么是随机数攻击?

熟悉游戏的朋友们应该对随机数攻击这一概念并不陌生。尽管游戏当中充斥着以“抽卡”、“奖池”、“掉落”为代表的所谓随机事件,但这些事件通常都被认为是“伪随机事件”。

什么又叫做伪随机呢?用最简单的话来讲,就是

num=Random(seed)

其中num为随机数返回值,Random为包含有某种计算公式的随机数产生函数,seed则是执行该函数的基准变量。

我们知道“真随机事件”需要满足的条件是事件之间相互独立、每种事件的发生概率等同以及发生结果的不可预测性。显然,上述这种纯粹依靠程序所实现的随机事件并不完全符合这些条件,也就是“伪随机事件”。

当伪随机函数执行周期较短时,相同seed值所生成的随机数队列也是相同的;而当执行周期较长时,过长的随机数列样本又会间接地反映出Random的计算规律。也就是说,无论哪种情况,黑客都有可能根据某一段随机数列样本或者某种方法获悉随机数生成器的生成规律,这便是随机数攻击的本质。

在同一时间生成三个随机数生成器

输入相同的seed,得到相同的结果

- 03 -

EOSPlay所遭遇的“新型随机数攻击”

黑客做了什么?

话题回到EOSPlay此番所遭遇的黑客攻击上来。

慢雾科技将黑客的这次攻击称作是“新型随机数攻击”,那么,黑客的手段到底“新”在哪里呢?他又是如何实现在DICE竞猜游戏中的持续胜利的呢?

我们先来看看黑客究竟干了什么。

黑客首先通过EOS REX (一个通过借贷他人的EOS来租赁EOS资源的DeFi项目) 租用了大量的EOS的CPU和NET (网络带宽) ,随后使用这些CPU和NET在EOSPlay的智能合约上创建了多笔延迟交易。 这个过程,他花费了大约300枚EOS的租赁费用。

我们知道,EOS上一般的用户操作以及合约代码的执行都需要占用CPU和NET,因此黑客大量占用CPU资源以及创建延迟交易的行为导致了区块链网络的部分堵塞,进而使得许多用户无法发送交易请求。借助这一手段,黑客成功地将自己的交易信息填满了区块。

持续胜利的实现

EOS中并没有内置的随机数熵源,因此EOS官方也没有为DApp开发者们提供随机数功能接口。 这也就意味着,当应用程序使用到随机数时,需要开发人员自行确立随机数的生成方法。

EOS游戏的开发者们一般是无法避免这一问题的,毕竟抽奖以及竞猜等模块,总是需要使用随机数来完成。

具体到EOSPlay的开发者,他们所做出的决定是将区块信息作为参数来生成随机数,因为用户无法预料到在发送交易事务时区块具体会产生什么样的变化。

显然,这既是EOS合约的漏洞,也是EOSPlay开发者对于黑客的低估。

使用区块哈希作为随机数参数将导致在同一个区块上,使用相同算法的随机数函数将会得到相同的随机数值,这就为黑客通过作弊手段获得持续胜利提供了前提条件。

由于区块被黑客自己预先构造的交易内容填满,其他用户的交易请求又因为CPU被大量占用所导致的网络堵塞而无法发送,区块哈希便顺理成章地成为了黑客可以预料乃至掌控的信息。 根据前一段所述的内容,当区块信息被掌握,“预测”竞猜游戏中以区块信息为参数的随机数也就不是难事。

获得持续胜利的黑客

狡猾的攻击者

从某种意义上来说,这次攻击完全可以称得上是一场“成功”的策划和表演。

据了解,EOS REX上的CPU租赁计费是动态变化的,被占用的CPU越多,租用CPU的费用也就越高。

狡猾的黑客通过租借大量的CPU资源,既令大多数用户的CPU资源不充足,也使得通过EOS REX租借CPU的费用大大提升。

这两者促成了一个因果循环:CPU被占用所导致的网络拥堵使得许多用户无法发送交易,为了执行交易他们不得不以更高的成本去租赁CPU,而这又会使得CPU资源更加紧张、网络更加拥堵,租赁费用也愈发水涨船高。

而这个循环最终所导向的唯一结果就是,因为成本的高昂,大家都不会选择在这个拥堵时段执行操作和交易,黑客试图用自己的交易信息填满区块的计谋也就因此而得逞了。

更加老谋深算的是,智能合约的持有者,也就是遭到攻击的EOSPlay自身,也因为网络的拥堵和CPU资源的匮乏而无法请求禁用DICE游戏的智能合约,只得眼睁睁地看着真金白银被攻击者逐步“赢”走。

更甚者,根据ERC-233的创建者、Reddit用户Dexaran在推特中所发布的推文来看,这个攻击者不仅对EOSPlay伸出了魔爪,还同时利用多个账户寻找多个智能合约中的可趁之机。

Dexaran 的推特

有意思的是,在Dexaran的这条推特的评论中,一名美国网友写道:“我要是有这个黑客1/100的聪明和狡诈,我会比现在富有很多。”听起来似有调侃的意味,但也从侧面认同了这次攻击事件之周全和完备。

- 04 -

BM的回应

针对EOSPlay被黑一事,BM于上周末做出了的回应:“EOS运行正常。这与攻击者向以太坊或比特币发送高费用交易垃圾邮件没有什么不同。网络没有冻结代币持有者,没有额外的带宽可供免费使用。”

这一回应的大致意思就是:黑客黑走的币没有被冻结,也没有必要冻结,因为这是EOSPlay智能合约的问题,与EOS无关,EOS仍然在正常地运作。至于这个攻击者,他的行为和那些向以太坊或比特币发送高费用交易垃圾邮件的伎俩没什么区别。

事实上,不少EOS的社区成员都从以EOSPlay为代表的DApp被黑事件中感受到了EOS DApp的安全隐患,并希望EOS能够尽快做出改变。而BM这样的回应,恐怕会令这部分人感到些许沮丧。

有推特网友就在BM回应该事件的推文下回复道:“没有应对作恶的免费宽带,你还指望能有数以百万计的人入驻Voice?”BM对此表示:“这种攻击不会影响Voice用户,因为B1为Voice用户提供所有带宽。”

BM回应网友的质疑

尽管BM的回应没有为EOS DApp的安全问题起到任何实质性的影响。但从这次的事件本身,我们仍然能够吸取到许多有关DApp开发的教训:

首先,游戏开发者们最好不要使用链上的信息作为随机数参数,信息的可掌握性越低、可获取渠道越少,遭到黑客攻击的概率自然就越低。

其次,尽管EOS官方没有准备专门用来应对作恶的免费CPU以及网络带宽,但是开发者自己可以准备一个备用账户,以便解决网络堵塞的突发状况或是在必要之时关闭受到攻击的智能合约。

最后一点则是希望DApp开发者们能够更加积极地公开源代码,以便于社区成员对该项目的代码进行审视和查漏补缺。即便攻击事件发生,开源的代码也有助于大家更快捷地找到问题的根源所在。

亲爱的凤凰网用户:

您当前使用的浏览器版本过低,导致网站不能正常访问,建议升级浏览器

第三方浏览器推荐:

谷歌(Chrome)浏览器 下载

360安全浏览器 下载