北京时间 9 月 24 日深夜 11 点 32 分,Fomo3D 第二轮最终大奖由地址 0x18a0 获得,奖金为 3,264.668 Ether。安比(SECBIT)实验室分析发现,此轮游戏获奖技巧与第一轮如出一辙,均为黑客“阻塞交易”攻击。
与此前第一轮游戏相比,这轮游戏持续 33 天,无论是从入场资金、持续时长,亦或是最终大奖奖金额来说,相比上轮均大幅缩水。
回首两月之前,Fomo3D第一轮游戏入场资金一度超过 40,000 Ether,第一轮游戏最终大奖奖金额超过 10,000 Ether,游戏参与者众多,类似的资金盘游戏也如雨后春笋般相继冒出,一时间好不热闹。
然而,自 9 月以来,随着市场整体的大萧条,类 Fomo3D 游戏也几近没落。以 Fomo3D 和 Last Winner 为代表的几款较活跃的游戏,热度明显下降。而大部分的同类合约由于无人开启下轮游戏,都处在搁置状态。
因而到如今,Fomo 3D第二轮大奖已经开出,黑客获奖几无悬念,游戏的热度已不可同日而语。
安比(SECBIT)实验室针对这一变化展开分析,分析结果表明,不久前连续揭露的游戏空投机制漏洞[1]和“阻塞交易”攻击事件[2],尽管在短时间内将该类游戏的关注度推上了新的高度,但本质上也是导致游戏没落的主要原因。
繁华 vs 凉凉?
曾经多火爆,如今就多冷清
游戏热度全景
7 月 20 日, 资金盘游戏 Fomo3D 在国内迅速传播开来,引起了广泛的关注。随后,一系列类似 Fomo3D 的游戏陆续上线。8 月 6 日,另一款类 Fomo3D 游戏 Last Winner 部署上线。在其团队的大力推广下, Last Winner 迅速火爆起来,甚至一度造成以太坊拥堵和 Gas 费用暴涨。但在游戏第一轮结束后,各个游戏的热度都开始持续下降。
图一:Fomo3D 玩家参与度与入场资金状况
上图展示了「Fomo3D 玩家参与度与入场资金状况」。红色代表调用合约参与游戏的人次,蓝色则代表进入游戏合约的资金量。图左侧出现数据曲线最高峰,对应时间分别是 7 月 20 日和 7 月 21 日。这两天恰好大量媒体疯狂报道 Fomo3D 这一现象级游戏。当时众多玩家跟风入场,游戏合约的参与次数和入场资金均达到了最高峰,入场资金量超过 40,000 Ether,而参与次数最高超过 18,000 次。而曲线的最高点则对应着 Fomo3D 游戏第一轮最高峰。
高峰过后,Fomo3D 游戏热度骤降,于 8 月 22 日前后结束第一轮,并随即进入第二轮,但游戏热度已然无法恢复。
图二:Last Winner 玩家参与度与入场资金状况
类似地,上图展示了「Last Winner 玩家参与度与入场资金状况」。Last Winner 针对 Fomo3D 游戏做了部分修改,降低了游戏时间上限,因此每轮结束得更快。第一轮高峰出现在 8 月 8 日,此后有多个局部波峰,代表着不同轮次的开启,但显然调用次数和入场资金一轮不如一轮。
奖池资金
下图为 Fomo3D 合约中 Ether 余额的变化情况。Fomo3D 游戏在迅速火爆后,合约内 Ether 余额一度上升到峰值,第一轮游戏结束后,合约中的余额立即呈断崖式下跌,至今还处在缓慢减少的过程。
图三:Fomo3D 合约 Ether 余额变化状况
无独有偶,Last Winner 合约中的余额也曾在短时间内迅速增长,而后随着几轮游戏的迭代而逐步下降,至今所剩的余额更是不足 5,000 Ether。
图四:Last Winner 合约 Ether 余额变化状况
最终大奖
8 月 17 日,安比(SECBIT)实验室与 Anchain.ai 团队联合揭露了黑客团队 BAPT-LW20 利用空投机制漏洞,攫取大量奖金的攻击事件。同一天,Last Winner 游戏第一轮结束,最终大奖的获得者也是 BAPT-LW20 团队。据统计,该黑客团队从 Last Winner 首轮游戏中获利累计达 12,948 Ether。
在 Last Winner 已完成的前 9 轮游戏中,黑客团伙持有的账户 0×5167 共夺得 4 次最终大奖。
仔细观察每轮游戏的最终大奖金额和持续时间,不难发现,奖金数量衰减非常快,而每轮也结束得越来越快。这与上面的游戏参与数据图十分吻合。
类似地,Fomo3D 游戏首轮和第二轮大奖分别于 8 月 22 日和 9 月 24 日开出,奖金额分别为 10,469.66 和 3,264.66 Ether。除了奖金数额锐减之外,安比(SECBIT)实验室还发现大奖获得者均使用了相同的攻击技巧。
反思
机制漏洞是游戏没落的主因
除了市场萎靡以及玩家热情降低,安比(SECBIT)实验室认为“阻塞交易”攻击(针对最终大奖)[3]和空投漏洞攻击[4]打破了合约机制设计中的关键部分。这才是使游戏变冷的主要原因。
图五:Fomo3D 游戏合约被攻击状况
上图是「Fomo3D 游戏合约被攻击状况」,第一轮游戏高峰前后以及第二轮开始后,有黑客疯狂地利用空投漏洞进行攻击,攫取高额收益。而在第一轮临近结束,以及第二轮倒计时快结束之际,有黑客疯狂尝试“阻塞交易”攻击,目标在于夺取巨额的最终大奖。
北京时间 9 月 24 日深夜 11 点 32 分,Fomo3D 第二轮最终大奖由地址 0x18a0451Ea56Fd4FF58f59837e9EC30f346ffDCa5 获得,奖金达 3,264.668 Ether。安比(SECBIT)实验室发现 Fomo3D 第二轮大奖获得者 0x18a0 创建了攻击合约 0x705203fc06027379681AEf47c08fe679bc4A58e1,并发起大量攻击交易,连续堵塞 10 余个区块,时间长达 2 分钟以上。这一系列攻击,在上图的游戏被攻击监控数据中展露无疑。
图六:Last Winner 游戏合约被攻击状况
上图是「Last Winner 游戏合约被攻击状况」,与 Fomo3D 类似,黑客攻击规模在游戏热度高时十分巨大。
“阻塞交易”攻击
Fomo3D 游戏巧妙地设计了一个环节,最后一个参与游戏的人将获得奖池中一半的 Ether 做为奖励。开发者想通过此设计保持大量的玩家陆续进场,任何人都有可能成为那个“幸运儿”。但是在黑客利用“阻塞交易”攻击[5]来加快游戏结束成为受益人后,这个吸引玩家的设计被打破了。因此后进场的普通玩家只能成为被割的韭菜,自然很难再吸引玩家参与。
“空投漏洞”攻击
除了最后的大奖,游戏中还设计了空投奖励机制,玩家有一定的概率获得空投奖励,这也是吸引玩家参与的一个重要原因。但是由于空投机制存在随机数漏洞,黑客可以通过一定的技巧持续高概率地拿走奖励,而普通玩家几乎不可能成功。这样空投奖励的公平性也同样受到了挑战。
对策与展望
dApp 还有很长的路要走
这样一类红极一时的爆款游戏,必定会成为 dApp 游戏发展史上的一个重要里程碑。但是过快的萧条速度也给我们带来了很多的反思。对于类 Fomo3D 游戏,甚至是所有的 dApp 游戏,还有很长的路要走。要及时从黑客攻击的案例中吸取教训,并做好防御措施。
“空投漏洞”攻击是类 Fomo3D 游戏遭受攻击次数最多的一个破绽。黑客可低成本持续地攫取奖池中的资金。
一方面,Fomo3D 游戏的空投机制利用随机数来控制中奖概率,但是由于随机数的来源都是区块或者交易中特定的一些公开参数,如交易发起者地址、区块时间戳、区块难度等,所有以太坊智能合约都可以很容易的预测随机数[6]。因此在涉及到随机数的场景下,安比(SECBIT)实验室建议开发者应尤为慎重,或通过一定的手段来增加随机源的预测难度。如开发者可通过使用多次提交再披露、或延迟若干个区块开奖的方法来规避随机数被预测的风险。
另一方面,为了防止合约自动化攻击,Fomo3D 游戏合约对调用者是普通账户还是合约账户做了检测,但由于检测方式存在漏洞,黑客可以利用一些技巧绕开检测。因此项目方在对参与 dApp 游戏的玩家的身份做检测的时候,也应采用更加可靠的方式。例如,通过判断该笔交易最初的发起者(tx.origin)与当前合约的调用者(msg.sender)是否为同一地址。
前文提到的“阻塞交易”攻击,也是类 Fomo3D 游戏面临的另一重大挑战。
黑客通过高额手续费吸引矿工优先打包,并利用合约自动判断游戏进行状态,以之作为是否采取攻击的依据。黑客最终能够以较低成本堵塞区块,每个区块中仅打包很少的交易(降低他人交易被打包的可能性),使得游戏快速结束,并提高自己获得最终大奖的概率。
其实这一问题不止会威胁类 Fomo3D 游戏。所有类似机制,即需要玩家抢在某个时间范围内完成某种竞争操作的智能合约,都会受此威胁。要杜绝这一问题,安比(SECBIT)实验室建议游戏开发者,从游戏机制入手,切断游戏最终胜利(获得某个巨额大奖)和倒计时结束(最后一个交易被打包)之间的必然联系,从而使黑客的攻击获利概率和攻击意愿都降到最低。
类 Fomo3D 游戏中黑客利用了以太坊共识协议的特点,找到游戏机制的漏洞进而发起攻击。这也提醒我们,dApp 应用中的机制设计是一项极其复杂的工程,除了技术本身,还涉及到平台外部环境,博弈论等方面问题,这也是容易被黑客攻击的环节。因此,dApp 项目在机制设计过程中应尤为慎重。
正如安比实验室创始人郭宇所说:“新世界有生命,就有捕食者。有交易者,就有黑客。区块链上的应用在进化,攻击者也同样”。在技术和财富的交汇处,黑客永远保持着最灵敏的嗅觉。黑客的一次次攻击,给了我们很多的反思和改进的机会,这也是应用不断进化的催化剂。
一
参考文献
[1] Pwning Fomo3D Revealed: Iterative, Pre-Calculated Contract Creation For Airdrop Prizes!,
https://peckshield.com/2018/07/24/fomo3d/
[2] 智能合约史上最大规模攻击手法曝光,盘点黑客团伙作案细节
https://zhuanlan.zhihu.com/p/42318584
[3] Fomo3D 千万大奖获得者“特殊攻击技巧”最全揭露
https://zhuanlan.zhihu.com/p/42742004
[4] Péter Szilágyi 提出的空投漏洞利用 POC,
https://www.reddit.com/r/ethereum/comments/916xni/how_to_pwn_fomo3d_a_beginners_guide/, 2018/07/23
[5] 区块律动:8万笔交易「封死」以太坊网络,只为抢夺Fomo3D大奖?
https://mp.weixin.qq.com/s/5nrgj8sIZ0SlXebG5sWVPw
[6] Predicting Random Numbers in Ethereum Smart Contracts
https://blog.positive.com/predicting-random-numbers-in-ethereum-smart-contracts-e5358c6b8620
本文由安比(SCBIT)实验室提供,安比实验室致力于解决区块链全生态的安全问题,共建共识、有序、可信的区块链经济体。