• <bdo id="aqomm"><samp id="aqomm"></samp></bdo>
    资讯首页新闻资讯正文

    2018年8月22日,以太坊上异常火爆的Fomo3D游戏第一轮正式结束,钱包开始为0xa169的用户最终拿走了这笔约10,469 eth的奖金,换算成人民币约2200万。

    看上去只是一个好运的人买到了那张最大奖的“彩票”,可事实却是,攻击者凭借着对智能合约原理的熟悉,进行了一场精致的“攻击”!

    这次攻击的结果,也直接影响了类Fomo3D的所有游戏,而且无法修复,无法避免,那么为什么会这样呢?

    类Fomo3D

    在分析整个事件之前,我们需要对类Fomo3D游戏的规则有一个基本的认识。

    Fomo3D游戏最最核心的规则就是最后一个购买的玩?#19968;?#24471;最大的利益

    其中主要规则有这么几条:

    • 游戏开始有24小时倒计时
    • 每位玩家购买,时间就会延长30s
    • 越早购买的玩家,能获得更多的分红
    • 最后一个购买的玩?#19968;?#24471;奖池中48%的eth

    其中还有一些细致的规则:

    • 每位玩家购买的是分红权,买的越多,分红权就会越多
    • ?#30475;?#29609;家购买花费的eth会充入奖金池,而之前买过的玩?#19968;?#33719;得分红
    • 随着奖池的变化,key的价格会更高

    换而言之,就是越早买的玩家优势越大。

    最终,?#24335;?#27744;里的 ETH 48%分配给获胜者, 2%分配给社区基金会,剩余的 50%按照四种团队模式进行分配。

    游戏规则清楚之后,就很容易明白这个游戏吸引人的地方在?#27169;?#21482;要参与的人数够多,有人存在侥幸心理,就会有源源不断的人投入到游戏中。游戏的核心就在于,庄家要保证游戏规则的权威性,而区块链的可信?#32422;安?#21487;篡改性,正是完美的匹配了这种模式。

    简单来说,这是一个基于区块链可信原则而诞生的游戏,也同样是一场巨大的社会实验。

    可,问题是怎么发生的呢?让我们一起来回顾一下事件。

    事件回顾

    2018年8月22日,以太坊上异常火爆的Fomo3D游戏第一轮正式结束,钱包开始为0xa169的用户最终拿走了这笔约10,469 eth的奖金。

    看上去好像没什?#27425;?#39064;,但事实真的是这样吗

    在Fomo3D的规则基础上,用户a169在购买到最后一次key之后,游戏的剩余时间延长到了3分钟,在接下来的3分钟内,没有任何交易诞生。这3分钟时间,总共有12个区块被打包。但没有任何一个Fomo3D交易被打包成功。

    除此之外,这部?#26234;?#22359;数量也极少,而且伴随着数个合约交?#36164;?#36133;的例子

    这里涉及到最多的就是合约0x18e1B664C6a2E88b93C1b71F61Cbf76a726B7801,该合约在开奖的那段时间连续的失败交易,花费了巨量的?#20013;?#36153;。

    而且最重要的是,该合约就是上面最后拿到Fomo3D大奖的用户所创建的

    在这期间的每个区块中,都有这个合约发起的巨额eth?#20013;?#36153;的请求。

    攻击用户通过这种方式,阻塞了其他游戏者购买的交易,最后成功拿到了大奖。

    那么为什么呢?

    事件原理

    在解释事件发生原理之前,我们需要先了解一下关于区块链底层的知识。

    以太坊约14s左?#19968;?#34987;挖出一个区块,一个区块中会打包交易,只有被打包的交易才会在链上永不可篡改。

    所以为了奖励挖出区块的矿工,区块链上的每一?#24335;?#26131;都会消耗gas,这部?#26234;?#29992;于奖励矿工,而矿工会优先挑选gas消耗比较大的交易进行打包以便获得更大的利益,目前,一个区块的gas上限一般为8000000。

    而对于每一?#24335;?#26131;来说,交易发起者也可以定义gas limit,如果交易消耗的gas总值超过gas limit,该交易就会失败,而大部分交易,会在交?#36164;?#36133;时回滚

    为了让交易?#25442;?#28378;,攻击者还使用了一个特殊的指令assert(),这是一个类似于require的函数,他和require唯一的区别就是,当条件不满足时,assret会耗光所有的gas。原理是因为在EVM底层的执行过程中,assret对应一个未定义过的操作符0xfe,EVM返回invalid opcode error,并报错结束。

    而攻击者这里所做的事情呢,就是在确定?#32422;?#26159;最后一个key的持有者时,发起超大gasprice的交易,如图所示:

    当攻击者不断的发起高?#20013;?#36153;的交?#36164;保?#30719;工会优先挑选这些高花费的交易打包,这段时间内,其他交易(包括所有以太坊链?#25103;?#36215;的交易、Fomo3D的交易)都很难被矿工打包进入。这样一来,攻击者就有很高的概率成为最后一个持有key的赢家

    整个攻击流程如下:

    1. Fomo3D倒计?#31508;?#19979;3分钟左右
    2. 攻击者购买了最后一个key
    3. 攻击者通过提前准备的合约发起大量消耗巨量gas的垃圾交易
    4. 3分钟内不断判断?#32422;?#26159;不是最后一个key持有者
    5. 无人购买,成功获得大奖

    在支付了大量以太币作为?#20013;?#36153;之后,攻击者赢得了价值2200万人民币的最终大奖。

    总结

    自智能合约游戏中以类Fomo3D诞生之后,这类游戏就不断成为人们眼中的焦点,精巧的规则设计和社会原理再加上区块链特性,组成了这个看上去前景无限的游戏。Fomo3D自诞生以来就不断成为人们眼中的焦点,类Fomo3D游戏不断丛生。

    随之而来的是,有无数黑客也在盯着这块大蛋糕,除了Fomo3D被盗事件以外, Last Winner等类Fomo3D也被黑产盯上...短短时间内,攻击者从中获利无数。

    而我们仔细回顾事件发生的原因,我们却不难发现,类Fomo3D游戏核心所依赖的可信、不可篡改原则和区块链本身的特性矿工利益最优原则冲突,也就是说,只要矿工优?#21364;?#21253;高?#20013;?#36153;的交易,那么交易的顺序就是可控的!,那么规则本身就是不可信赖的。

    当你还在寻求棋局中的出路时,却发现棋盘已经不存在了。

    当Fomo3D游戏失去了?#32422;?#30340;安全、公平之后,对于试图从中投机的你,还会相信?#32422;?#20250;是最后的赢家吗?

     

    智能合约审计服务

    针对目前主流的以太坊应用,知道创宇提供专业权威的智能合约审计服务,规避因合约安全问题导致的财产损失,为各类以太坊应用安全保驾护航。

    知道创宇404智能合约安全审计团队: https://www.scanv.com/lca/index.html
    联系电话:(086) 136 8133 5016(沈经理,工作日:10:00-18:00)

     

    REF

    [1] Fomo3D https://exitscam.me/play

    [2] 获利交易https://etherscan.io/tx/0xe08a519c03cb0aed0e04b33104112d65fa1d3a48cd3aeab65f047b2abce9d508

    [3] 攻击合约 https://etherscan.io/address/0x18e1b664c6a2e88b93c1b71f61cbf76a726b7801

    [4] Fomo3D 千万大奖获得者“特殊攻击技巧”最全揭露https://mp.weixin.qq.com/s/MCuGJepXr_f18xrXZsImBQ

    [5] 「首次深度揭秘」Fomo3D,被黑客拿走的2200万https://mp.weixin.qq.com/s/s_RCF_EDlptQpm3d7mzApA

     

    @知道创宇404区块链安全研?#23458;?#38431;

    原文地址:https://paper.seebug.org/681/

    阅读:131
    超级管理员知道创宇安全服务团队渗透工程师。
    关闭
    安徽25选5开奖信息
  • <bdo id="aqomm"><samp id="aqomm"></samp></bdo>
  • <bdo id="aqomm"><samp id="aqomm"></samp></bdo>