安比()实验室对该事件三大疑点的复盘分析

这是针对合约代码中的整数溢出漏洞的蓄意攻击。

God.Game 游戏合约是“学习”和 Zethr 的混合模仿。游戏漏洞本身并不复杂怎么需找黑客帮忙攻击一个平台,但无论是攻击目的还是攻击时机都极其微妙。几乎可以肯定,这是攻击者针对游戏漏洞的蓄意攻击。. 不过不知道是代码作者引入漏洞是因为不了解游戏机制还是故意埋下的后门。

以下是Appi()实验室对此次事件的三大疑点进行分析,以供感兴趣的小伙伴交流学习:

God.Game 的简单规则如下:所有购买 GOD 股份的 10% 被征税并作为被动 ETH 收入分配给所有 GOD 所有者。

通过游戏官网规则和合约源码分析,很多人会认为God.Game是直接模仿。经Api()实验室仔细分析,其实是综合“参考”和Zethr的混合仿制。

这是最近火爆的游戏团队的最后一部作品。Zethr是另一款在增加不同玩法的基础上进一步开发优化的热门游戏。两者在玩法规则层面的详细区别这里不做讨论。

God.Game 游戏漏洞本身并不复杂。许多安全公司也发布了相关攻击技术的短消息。其中一些不够详细。Api()实验室通过本文对漏洞进行全面分析,重点与大家分享漏洞跟踪定位的详细过程。讨论和交流。

疑点一:攻击是有意还是无意

取走合约中所有Ether的人,是在游戏过程中无意中发现了漏洞,还是故意为之?

Api()Lab认为是后者,因为经过分析,虽然漏洞不是很隐蔽,但实际触发需要一系列的组合操作(类似于玩游戏按上下左右翻关于作弊),这对于普通游戏玩家来说很常见,参与几乎不可能触发漏洞。Anbi()实验室对攻击者的交易记录进行了分析,发现其手段非常巧妙,目的性很强,很明显是来找漏洞的。

疑点二:攻击时机

为什么攻击者在奖池达到243 Ether时选择发起攻击?

以上是游戏合约账户余额的趋势图。横坐标为区块高度,纵坐标为God.Game合约账户余额。这张图表可以反映入场资金随时间变化的情况。Api()Lab 发现,God.Game 合约部署后,合约资金量长期低于 50 Ether,但在区块高度之后,入场资金开始飙升至近 260 Ether(一个大入市的韭菜数量)),随后出现小幅衰退(部分人选择现金提现),进入长期停滞期。

无论哪种方式,这种庞氏游戏在资金进入的早期都具有很大的优势,并且可以快速回本。未来,只有持续的大规模运营和推广,才会有大量的新资金参与到游戏中来。因此,游戏第一时间的入驻资金基本决定了游戏资金的整体规模。

攻击者就在资金规模即将升至前期高位时果断出手,利用漏洞果断撤回了游戏中的所有Ether。于是怎么需找黑客帮忙攻击一个平台,就形成了类似于上图“高台跳水”的有趣场景。

这种奇怪的技术和迷人的趋势是不是有点熟悉?

疑点三:是漏洞还是后门

是无意引入的漏洞还是故意留下的后门?

如前所述,God.Game 游戏代码大量引用了 Zethr。与漏洞相关的关键函数名()只出现在Zethr合约代码中。

上图问题代码“创新”增加了一套关于转账方是合约还是普通账户的分行处理。面对这冗长的代码,只要明确了工作原理,不难发现这里的代码逻辑根本没有意义,也无法在实际的游戏规则中找到适配点。而这种根据账户类型处理账本的逻辑,在原版和Zethr中根本没有出现。

God.Game代码中,这里的函数名是仿照Zethr的,但是具体的变量名是伪造的,代码风格很奇怪。可以推断出以下两种情况:代码作者可能因为不了解游戏机制而引入漏洞;也有可能故意增加代码混淆来迷惑他人,以达到掩埋后门的目的。

尤其是Appi()实验室还发现,也是()函数。God.Game 代码中唯一与 Zethr 类似的地方是上例中代码的回退处理。看来要引入这段代码(需要判断目标地址是否为合约)来覆盖前面提到的不合逻辑的代码。