Last Winner的最后赢家:智能合约超大规模黑客攻击手法曝光 – FreeBuf互联网安全新媒体平台 | 关注黑客与极客

区块链安然破绽

Last Winner(类 Fomo3D)游戏大年夜火,导致以太坊非常拥堵,Gas 用度暴涨。大年夜量以太币资金入场。北京光阴 2018 年 8 月 10 日早晨 1:38,加州光阴 9 日上午 10:38,安比(SECBIT)实验室收到相助伙伴美国硅谷 AnChain.ai 公司消息,基于 AI 的态势感知系统发出预警信息,发明部分游戏合约呈现大年夜量买卖营业并且存在非常的资金流动环境。

安比(SECBIT)实验室的小伙伴赶快根据最新线索,对相关合约和买卖营业进行察看、跟踪、阐发。安比(SECBIT)实验室由中国科学技巧大年夜学博士郭宇创建,从密码学、代码语义、形式化验证、博弈论、编译器等多种理论角度切入,在智能合约安然技巧上开展全方位深入钻研。AnChain.ai由辛辛那提大年夜学谋略机博士方春生 Victor Fang 创建,方博士是硅谷上市收集安然公司 FireEye 史上第一位首席数据科学家,认真 AI 产品研发。AnChain.ai 专注安然要挟情报、区块链态势感知,凭借 AI 技巧助力区块链生态安然。下文敏感地址只保留前 4 位。片尾有三个彩蛋,智能合约喜欢者请不要错过。

悄然上线:莫名火爆的 Last Winner

Last Winner 是一款基于以太坊智能合约的 DApp 游戏,于 8 月 6 日上线,这款游戏一经推出,就“非常”火爆。

这款游戏合约地址为 0xDd9fd6b6F8f7ea932997992bbE67EabB3e316f3C。据 Etherscan 显示,短短六天光阴内,该游戏合约就已孕育发生 27 万余笔买卖营业。以致前段光阴以太坊收集大年夜拥堵也与 Last Winner 游戏亲昵相关。8 月 8 日 和 9 日,在 Last Winner 和 Fomo3D 超大年夜规模买卖营业量的配相助用下,以太坊未确认买卖营业数量创年内新高,匀称 Gas 用度一度飙升至正常 10 倍以上。

该游戏第一轮奖池金额为 1.6 万多个以太币,而玩家总投资额更跨越 10 万以太币,资金量伟大年夜。今朝游戏第一轮已停止,第二轮奖金池已迅速累积至 7000 多以太币。

猖狂的征象级游戏背后暗流涌动。

疑团重重:前期大年夜量介入者的资金来历不明

据有名媒体「区块律动」报道,Last Winner 由名为「蚁群传播」的资金盘传销组织推广运营,有着数量浩繁的会员和极强的推广拉下线能力 [1]。而据另一款火爆游戏 Fomo3D 开拓团队称,Last Winner 是仿 Fomo3D 游戏,其背后运营团队筹备了 20 万 ETH 来进行自动刷量买卖营业。是以,Last Winner 游戏火爆的背后,可能是一场精心结构的传销游戏,初期使用机械人提议批量买卖营业,捏造生动假象,吸引新韭菜入场。

Last Winner 游戏合约存在大年夜量非正常买卖营业,并且伴跟着大年夜量合约的创建与自毁,与正凡人类调用行径特性偏离很大年夜,这引起了我们的高度鉴戒。

猖狂推广:只面向国人,合约源码却未公开

在各大年夜论坛、媒体、以及微信群中,都可以见到 Last Winner 游戏的推广文章,而这些文章有着类似的描述,并且都附上推广约请码。但 Last Winner 英文相关资料异常少。

显然,这是一款针对中国人的游戏,有着诱人的推广(拉下线)奖励,是以在收集上广为传播。并且,这款游戏有适配安卓和 iPhone 手机的 App,简化了应用操作,低落了介入门槛。

然则,十分可疑的是,作为一款基于智能合约的区块链游戏,Last Winner 居然没有公开合约源代码!这是一个异常危险的旌旗灯号。为何这样一个游戏能这么火爆,吸引这么多人参加?

我们直觉上认为这款游戏到处走漏着诡异的气息。

安然性存疑:实则是 Fomo3D 山寨版

Last Winner 官方鼓吹语写道:

Last Winner(LW)是首款完全去中间化的类 Fomo3D 游戏 DApp,完全基于以太坊智能合约原生开拓。只要下载安装 App 就可介入游戏。

类 Fomo3D 游戏,且未公开源代码,这不得不让人孕育发生狐疑。要知道,短短光阴内原创开拓一个好玩又安然的 DApp 游戏难度异常大年夜。

安比(SECBIT)实验室迅速应用内部对象逆向阐发了 Last Winner 的合约代码(字节码)。果不其然,这款游戏合约代码函数名称与 Fomo3D 高度相似,疑似直接拷贝(抄袭)了 Fomo3D 的源码,但却又新增了 10 余个可疑未知函数。

只管 Fomo3D 在 Etherscan 公开了源代码,但这并不代表它开源给任何人随意应用。

安比(SECBIT)实验室之前报道过:在 Fomo3D 爆红之后,种种山寨版 Fomo3D 层出不穷。之前这些山寨版游戏每每复制 Fomo3D 官网和合约源码,并可疑地在一些地方进行改动。而 Last Winner 在此根基上更进一步,推出移动客户端,并猖狂推广,却不公开智能合约源代码。

智能合约游戏或 DApp 的亮点之一便是公开透明。Last Winner 游戏则完全违抗了这一点,念头十分可疑,介入该类游戏的风险极高!

当时严酷的形势是:一方面有多个地址疑似猖狂提议进击买卖营业,另一方面项目方游戏合约未公开源码,高度可疑却吸引了巨量资金。我们感到到态势十分紧急,于是迅速开展分工相助。AnChain.ai 中美团队昼夜交替阐发和监控非常买卖营业,网络证据,定位进击滥觞与进击规模。

安比(SECBIT)实验室的小伙伴们则兵分两路,分脱离展对不透明游戏合约和黑客进击伎俩的逆向阐发。

前情回首:类 Fomo3D 游戏空谋利制存破绽

Fomo3D 游戏介入形式是用以太币购买游戏道具,除了着末一个购买的人可以得到巨额大年夜奖外,日常平凡介入者还有时机得到“空投”奖励。

这里有主奖池和副奖池的观点,终极的巨额大年夜奖和空投奖励分手从从主奖池和副奖池中获取。

所有进入游戏的以太币,有 1% 数量会进到副奖池。每一次购买道具都邑有概率得到空投。空投的概率从 0% 开始,每增添一笔不小于 0.1 ETH 贩卖订单,空投概率会增添 0.1%。同时空投奖金额与购买金额也挂钩,假如购买 0.1 ~ 1 ETH,就有概率赢得 25% 副奖池奖金,购买更多则比例越大年夜。

一进入游戏界面,就会看到光显提示,看护当前中奖概率和奖池金额。这一设计,蓝本是想增添游戏意见意义性,并起到吸引资金入场、延长游戏光阴的感化。但实际环境却并非如斯。

经由过程察看 LastWinner 游戏合约以及部分地址的非常买卖营业行径,我们心中有了初步谜底。

让我们把光阴退回到 20 多天前,早在 7 月 24 日,安比(SECBIT)实验室和派盾(PeckShield)科技分手同时预警:Fomo3D 游戏的智能合约存在随机数破绽可被使用,Fomo3D 及所有抄袭源码的山寨合约均存在该安然破绽 [2]。蓝本设计上随机性较大年夜的空投游戏可经由过程特殊手段操纵,大年夜大年夜前进中奖概率。

经安比(SECBIT)实验室字节码智能扫描对象逆向阐发,Last Winner 游戏空投奖励代码与 Fomo3D 基础同等,相似度达 91%,可能存在同样破绽。跟着游戏火爆进行,机智的黑客肯定也闻风远扬。

不能说的秘密:黑客制造秘密武器攫取高额收益

在区块链态势感知系统所展现出来的数据眼前,我们不由地倒吸一口冷气。

图中的这些可疑地址,犹如“病毒”一样平常牢牢萦绕纠缠在 Last Winner 合约四周,肆意吞噬着 Last Winner 内的资金。

我们察看到,图中紧靠 Last Winner 的这些地址,有着类似的行径模式。

如:

1.不绝地往某合约地址上提议买卖营业,同时附带 0.1 个以太币

2.不少买卖营业状态为掉败

3.成功的买卖营业又会涉及大年夜量“内部买卖营业”

4.“内部买卖营业”调用逻辑十分繁杂,并伴随大年夜量合约的创建和自毁

安比(SECBIT)实验室迅速得出初步结论:这些不明合约便是黑客用来进击 Last Winner 的秘密武器,黑客恰是经由过程这些合约,持续吸走 Last Winner 游戏内的以太币。

案发明场:大年夜量类似买卖营业,超高回报率

上面态势感知图中,占地面积最大年夜的嫌疑地址引起了我们的留意:0xae58,于是从这个地址展开了追踪。

8 月 9 号当天,0xae58 地址内以太币余额就以跨越 300 个,而当时他正在大年夜量往地址 0×5483 上提议买卖营业,每笔买卖营业转账金额都是 0.1 Ether。显然,黑客正经由过程 0×5483 智能合约向 LW 提议进击。

让我们察看下面这条状态显示为成功的买卖营业。外面上看是 0xae58 向进击合约 0×5483 转了 0.1 Ether,实际却涉及了一大年夜堆地址间的互相转账,终极跟着 0x7c77 合约 自毁,0.189个 Ether 转移回 0xae58 的账户中。

让我们察看下面这条状态显示为成功的买卖营业。外面上看是 0xae58 向进击合约 0×5483 转了 0.1 Ether,实际却涉及了一大年夜堆地址间的互相转账,终极跟着 0x7c77 合约 自毁,0.189个 Ether 转移回 0xae58 的账户中。

这十分神奇,进击者投入 0.1 个以太币,终极劳绩 0.189 个,瞬间回报率高达 89%,的确暴利。

我们很快发明,除了 0xae58 地址外,还有四个地址也持续赓续地向 0×5483 合约提议类似买卖营业,持续得到高额回报。

而掉败的买卖营业,仅耗损 27712 燃料(Gas),资源损耗十分低。

钻研目标立即锁定为进击合约 0×5483。因为无法得到源码,安比(SECBIT)实验室立即应用内部对象展开逆向阐发。

暴利:数据眼前我们再次震动

8 月 13 日,当我们沉浸在钻研黑客的进击合约各类细节优化和精美设计之时,黑客进击数据全景阐发新鲜出炉。

此中,进击获利最大年夜的因此 0x820d 地址为首的团队。他们累计获利跨越 5000 个以太币。AnChain.ai 团队和安比(SECBIT)实验室将该黑客团伙正确定位,并将其命名为 BAPT-LW20 (Blockchain APT – Last Winner)。

BAPT-LW20 团队在短短 6 天光阴内,共发送将近 5 万笔买卖营业,从中攫取 5194 个 Ether,获利代价将近 1200 万人夷易近币。

由下图每小时提议的进击买卖营业数量趋势图(下图),我们可以看出进击的高峰期发生在 8 月 8 日 ~ 10 日,每小时匀称攫取将近 100 以太币,将近 22 万人夷易近币。这恰恰也是 LW 游戏最火爆的光阴段。跟着游戏进入后期,入场资金急剧下降,收益低落,黑客也不得不也低落了进击频率。

再看看黑客每小时攫取以太币数量趋势图(下图)。昏暗的漫漫熊市里,黑客却在狂赚以太币。

下图是“Last Winner 中黑客的买卖营业量占比和攫取 ETH 占比”,可见黑客发送的买卖营业量只占总买卖营业量的 9.877%,然则去攫取了Last Winner奖金池中49%的奖金。黑客的娴熟进击技能,为他们带来了通俗玩家难以企及的好运,而通俗玩家在这场游戏里面险些很可贵到空投奖励。

前哨追凶:BAPT-LW20 团队进击 LW 始末

安比(SECBIT)实验室考试测验追踪回覆再起 BAPT-LW20 团队进击光阴线。

下图是 BAPT-LW20 团队某账户余额更改环境。

0x820d 是 BAPT-LW20 团队所有进击合约的支配者,也是进击的实施者之一,可觉得是 BAPT-LW20 团队的队长。0x820d 地址最早生动于 7 月 20 日,账户中的初始以太币均由 0x73B6 地址转入。而 0x73B6 也是同一天开始生动的新地址,它的初始以太币来自总部位于美国旧金山的 Kraken 买卖营业所。

0x820d 在收到来自 0x73B6 的 10 个以太币后,随即支配了它的第一个合约。可能有些地方不太抱负,他并没有继承应用该合约。三分钟后,0x820d 支配下了第二个合约,进击工具是 Fomo3D。在一组筹备事情设置、多少次掉败的调用以及两次虽然成功但却没有收益的考试测验过后,0x820d 应该是发清楚明了进击合约里的 bug 和优化空间。

在接下来的 14 个小时内,他依次支配了 8 个合约进行进击测试,无奈都不成功。终于在第 9 个合约 0xBad7 中首次完成进击,以 0.1 ETH 的投入换回了 0.125 ETH。

0xBad7 是 0x820d 团队首个可以正常事情的进击合约,他们在 7 月 21 日至 7 月 23 日三天光阴内总计调用该合约 11551 次,小有斩获。

7 月 23 日,0x820d 又支配了新的合约,将进击工具转移为另一款 Fomo3D 山寨游戏老鼠会 RatScam (0x5167350d082c9ec48ed6fd4c694dea7361269705),0x820d 团队在一天光阴内应用了 2299 次进击合约。

一天后,0x820d 又找到了新目标,一个名为 FoMoGame(0x86D179c28cCeb120Cd3f64930Cf1820a88B77D60) 的山寨游戏,支配新合约(0xb599)进行进击。这款游戏有名度不高,入场资金并不多,黑客调用了 126 次之后就放弃。

接下来的三天内,0x820d 前后支配了 10 个新合约进行优化与进击测试。

终于,在 7 月 26 日上线了他们的新版进击合约(0×5483)。该合约统共发生过 23835 笔买卖营业,近来一次生动光阴在 8 月 10 号(7 天前)。这款进击合约,可由进击者 自定义受害游戏合约地址。是以 0x820d 在接下来的几天内,持续混杂进击 Fomo3D 原版、RatScam、FoMoGame 等游戏,并持续察看其他山寨游戏的动态,等待机会。同时,继承支配多少个新合约进行调优测试。

终于,8 月 6 日 Last Winner 游戏上线,24 小时后 0x820d 团队就应用筹备好的 0×5483 合约,针对 Last Winner 提议第一次进击,并在接下来的 4 天内集中气力,猖狂使用空投破绽展开攻势。

8 月 10 日,0x820d 调用 0×5483 进击合约 withdraw 接口,提走了里面的余额,进击疑似停息。

原本,他们早已经支配了新版合约进击合约 0x9C10,又提议了跨越 30000 笔买卖营业,至今仍在生动进击。

不仅仅是空投:BAPT-LW20 黑客团队拿走 LW 终极大年夜奖

北京光阴 8 月 17 日上午,Last Winner 游戏第一轮最遣散束,终极大年夜奖由 0×5167 地址得到,奖金额总计 7,754 以太币。

而这个地址恰是 BAPT-LW20 黑客团队的五个地址之一。

如下图,14 小时前,黑客还在使用进击合约获取空投奖励。随后,他改变了规划,直接用自身地址购买道具介入游戏,赓续考试测验篡夺终极大年夜奖。在此之后,又继承调用合约进击 LW 游戏。

安比(SECBIT)实验室预测黑客匿伏好久,早已做好充分的筹备,长光阴使用脚本监控 LW 游戏状态,终极才能在世人放松鉴戒之时得到大年夜奖。

BAPT-LW20 黑客团队使用空投破绽获利超 5,194 Ether,同时又篡夺终极大年夜奖 7,754 Ether,累计获利 12,948 Ether。

同业相杀:Zethr 团队两天光阴就成功使用破绽

这场超大年夜规模的类 Fomo3D 智能合约游戏被进击事故,进击者应用的秘密武器也恰是智能合约。

据安比(SECBIT)实验室查询造访阐发,0x20C9 地址最先成功使用原版 Fomo3D 空投破绽并获取奖励。我们将他定位,并将其命名为 BAPT-LW10。

0x20C9 于 7 月 8 日 10 点 07 分创建了进击合约 0xe7ce,在接下来的十分钟内,前后调用了三次,终极在第四次时成功得到奖励,投入 0.1 以太币,收回 0.19 个,回报率高达 90%(见下图)。

此后,0x20C9 继承支配多个进击合约,进行调试优化。终极,在 7 月 23 日支配了终极版本 0x39ac 进击合约,接下来的光阴前后调用过 90 余次,而进击工具涉及 Fomo3D 原版、Last Winner 以及其他山寨版 Fomo3D。

据我们察看,0x20C9 是最早钻研并成功使用空投破绽的黑客。钻研历程中,安比(SECBIT)实验室发明 0x20C9 与另一款游戏 Zethr 亲昵关联。

终极我们在 Zethr 游戏合约代码中发清楚明了他的身影。他是热门游戏 Zethr 的八位核心开拓者之一,代号为 Etherguy。

显然,作为 DApp 游戏开拓同业,Etherguy 以及他所在的 Zethr 团队很早就钻研了 Fomo3D 项目代码。Fomo3D 合约 7 月 6 日支配上主网,Etherguy 两天后就发明并成功使用了破绽。从调用规模来看,Etherguy (BAPT-LW10) 应该主要照样出于钻研目的,并没有太多获利。

让其他黑客获利最多的恰是 Last Winner 游戏。

游戏细节:Last Winner 为何让黑客如斯猖狂

从最初 Fomo3D 上线后不久,空投破绽就已被人发明并成功使用。跟着游戏的广泛传播,以及该破绽被徐徐表露,空投破绽的进击手段也在这一历程中赓续进级进化,终极部分黑客团队完成了精美的进击规划,可低资源、高效率得到奖励,并可大年夜规模工程化地进击随意率性任何同类游戏合约,猖狂收割以太币。

据安比(SECBIT)实验室阐发,除 LW 游戏以外,不少黑客团队都曾考试测验进击其他类 Fomo3D 游戏合约。但获利都远小于 BAPT-LW20 团队在 LW 游戏中所得。

我们试图从 LW 游戏本身探求谜底。

LW 游戏是 Fomo3D 山寨版,本身没有太多立异,但入场资金完全集中在游戏开始后的第 2 天至第 5 天内。巨量入场资金,会让游戏空投奖池迅速累积,是以这段光阴也是黑客进击的黄金机会。

更要命的是,Last Winner 团队改动了空投游戏参数,使进入副奖池(空投奖池)的以太币比例由 1% 调剂到 10%,相称于空投奖励金高了 10 倍!

一方面,游戏运营团队可能是使用高额空投奖励吸引用户猖狂加入;另一方面,他们可能并不知道空投破绽的严重性,而前进奖励比例则会让该问题进一步放大年夜。

Last Winner 游戏的确成为了黑客的提款机!

分外埠,前面提到 Last Winner 游戏第一轮入场资金已达 10 万以太币,这也便是说,单单这一款游戏就有跨越 1 万个以太币都持续裸露在被进击的风险下,成为黑客的囊中之物。要知道,这款游戏第一轮终极奖池也才 1.6 万余以太币。原先空投奖励都是很小的金额,但黑客持续使用空投破绽,聚沙成塔,终成 Last Winner 最大年夜赢家。

我们追踪到有多个团队对 Fomo3D 及山寨合约开展大年夜规模自动化进击,妄图牟图利益。

而 BAPT-LW20 团队在游戏开始后 24 小时阁下就加入了战局,并迅速扩大年夜作战规模,终极占得先机,获取巨额收益。

安比(SECBIT)实验室追踪到还有其他黑客团队向 Last Winner 合约开展进击。部分黑客 8 月 11 号今后才入局,虽规模也很大年夜,但毕竟由于错过黄金机会而获利较少。

进击合约:设计繁杂又精美

进击合约 0×5483,创建于 7 月 26 日,创建者为 0x820D,同时也是持续调用进击合约的五个地址之一。

起先,进击合约的创建光阴让我们认为疑心,前面提到 LW 游戏合约于 8 月 6 日才支配上主网。难道 0x820D 可以未卜先知,或者他与项目方有什么弗成告人的秘密?

带着这个疑问,我们考试测验从合约 0×5483 的代码(字节码)中探求谜底。

颠末逆向发明,该合约有七个公开函数,此中一个疑似函数名是 withdraw(uint256),用于将进击合约中积累的以太币转走。

安比(SECBIT)实验室在字节码中发清楚明了上面提到的五个地址。原本这两个函数都邑跳转到同一个内部函数,反省买卖营业提议人是否是这五人地址之一。假如是,则可继承履行,假如不是,则提前让买卖营业掉败。

这也说清楚明了为什么偏偏是这五个地址不停在调用进击合约。由于他们是一个团队,合约特地为他们而设计,而其他人根本无法正常调用。

初步预测,进击合约这么设计是为了分散权限和资金,低落出问题或被发明的风险。

上图恰是一笔进击买卖营业的传入参数。第一部分是调用函数哈希 ID,后面随着三个参数。留意看第一个参数,进击者传入的显着是一个地址。显然,这个地址恰是 LW 游戏合约地址。

原本如斯,进击目标工具可以作为参数传入。“黑客真机灵!”,我们不由地感慨。之前的一个利诱被解开,早在 LW 游戏上线前就已支配好的进击合约 0×5483,着实是一个通用型武器。

继承钻研,接下来合约的繁杂程度出乎我们料想。我们沿着天生的节制流程图(CFG)追踪合约函数调用历程,法度榜样指令以及分支环境异常之多(下图是一小部分截图),让人难以完全跟上。

安比(SECBIT)实验室应用动态追踪调试技巧,结合逆向阐发结果与进击买卖营业内部记录,搞清楚了黑客所应用的伎俩。

安比(SECBIT)实验室应用动态追踪调试技巧,结合逆向阐发结果与进击买卖营业内部记录,搞清楚了黑客所应用的伎俩。

其他进击买卖营业也都是类似的历程,黑客调用进击合约,进击合约再调用提前创建好的合约,进而创建新的合约,以新合约的身份介入 LW 游戏,买游戏道具,然后险些必定得到空投奖励。

这一历程中赓续新建的合约,便是态势感知系统中预警的大年夜量非常合约创建与自毁。

追踪进击合约调用历史,发明进击者在支配完进击合约后,就急速多次调用特定函数,每次新建 10 个新合约。而函数统共正好调用了 100 次,是以新建了 1000 个新合约(记着这个细节)。

在进击买卖营业中,进击合约最先调用的便是这预先创建好的 1000 个合约之一,彷佛是特地从中遴选出来一个地址。

智能合约:统统皆可猜测

进击函数节制流程图(CFG)中一个相隔很远的轮回引起了我们的留意。

我们恍然大年夜悟。进击函数所做的便是赓续轮回地在 1000 个合约中,遴选“相宜”的地址来完成下一步新建合约操作。所谓“相宜”的地址,便是指能确保每次介入游戏都能得到空投奖励。

前面提到,以太坊智能合约中可以很轻易的猜测随机数,由于随机数的滥觞都是区块或者买卖营业中特定的一些公开参数,如买卖营业提议者地址、区块光阴戳、区块难度等等。是以空投游戏使用随机数来节制中奖概率是弗成行的。

而这里,黑客使用了另一个以太坊的特性,一个地址(账户)创建一个合约,合约地址是可按照特定规则谋略获得的,任何人都可以根据已知信息进行推算。

是以,黑客轮回使用自己节制的 1000 个合约地址,推算各地址下一次新建的合约地址,而该地址恰好是空投游戏中奖数字的随机源。进击合约经由过程一系列预演推算来筛选出“相宜”的地址来完成进击操作(技巧细节后文会具体评论争论)。

这才是黑客能够以超高概率得到空投的真正缘故原由!

技巧流:进击伎俩细节表露

类 Fomo3D 游戏空投破绽的根滥觞基本因在于,以太坊智能合约情况中难以天生无法猜测的随机数。而 Fomo3D 开拓者在其合约中增添了「判断调用者是通俗人类照样合约」的逻辑来考试测验规避,但此逻辑实现存在破绽。黑客使用进击合约提前猜测随机数,并经由过程在构造函数内调用游戏合约的措施来冒充成通俗人类(非合约)地址,从而大年夜大年夜增添自身中奖概率。

光阴再次回到 7 月 23 日,以太坊基金会开拓团队认真人之一 Péter Szilágyi 在 Reddit 上首次公开爆出这个破绽并给出 1.0 版本的 POC 规划(具体可以参考引文 [3])。这主如果使用了这些特征:

空投游戏用来节制中奖概率的随机源,可被提前得到

用户能否得到空投奖励以及奖励金额,可在别的一个合约中提前谋略出来,从而抉择后面的操纵逻辑

Fomo3D 空谋利制中考试测验限定只有非合约地址(通俗人类)才能参加游戏以防止上述环境的发生。但该判断措施存在破绽,在构造合约的历程中(即合约构造措施里)介入游戏即可绕过该限定。

是以进击者可以支配一个智能合约,并在合约的构造措施中谋略出自己是否能够获益,假如能则投入以太币参加游戏空投获利,否则就不参加(拜见下图)。

Péter 提出的这个规划只是一个最简单的原型,由于每次支配合约都要耗损不少 Gas,而且事情效率很低且收益率并不高,采纳该规划进击,提议上千笔买卖营业,都不必然能够真正得到空投奖励。

看到这里你可能会有疑问,上文的进击者彷佛伎俩更高明,而且实际成功进击的发生光阴要早得多。

Zethr 开拓者 Etherguy 早在 7 月 8 日就已应用更高明的伎俩成功获利,办理了上文 1.0 规划中的部分问题,我们姑且称之为 2.0 版本。

这个思路是经由过程合约轮回创建子合约(拜见下图),直到子合约满意空投前提可以获利为止。这样做的好处是,在 Gas 充沛的环境下,每次调用合约险些必然可以得到收益,前进了事情效率。然而这种规划和 1.0 版本的进击资源靠近,并没有从本色上前进收益率。

而此次事故的最大年夜获利者 BAPT-LW20 团队,便是在 2.0 版本的思路长进行了进一步优化低落了投入资源,前进了收益率。 3.0 版本 则猖狂创建代理合约,经由过程使用谋略下一步新建合约地址的技术提前预判,筛选出相符前提的代理合约再创建出新的子合约,在子合约的构造函数中再完成上述进击(见下图)。而且进击目标地址可设置设置设备摆设摆设,可多人同时协作进击。当游戏奖池金额不够以覆盖进击资源时,发出的进击买卖营业会自动提前掉败,仅耗损很低的Gas 用度。

在阐发种种进击合约历程中,我们还见到别的一种更高明的做法:主进击合约有着优越的设计模型,支持核心算法动态调换与进级。道理上则是使用了 delegatecall 进行操作。安比(SECBIT)实验室会持续关注这批黑客的动向。

彩蛋一:空投与挖矿

我们知道在 PoW 挖矿的时刻,矿工平日必要进行如下谋略:

BlockHash = Hash(Header+Nonce)Check(BlockHash

当 BlockHash 结果小于当前难度值的时刻,代表找到了一个合法的 Nonce。

在 Fomo3D 的空投奖励里有着类似挖矿的机制:

function airdrop() private view returns(bool){uint256 seed = uint256(keccak256(abi.encodePacked((block.timestamp).add(block.difficulty).add((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add(block.gaslimit).add((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add(block.number))));if((seed – ((seed / 1000) * 1000))

用户独一可以操纵的便是 msg.sender 字段,我们是否可以将 msg.sender 作为 Nonce 来挖矿呢?

谜底显然是可以的,智能合约的地址是根据 提议者账户 + nonce 抉择的,于是有了第 1 代措施:

创建合约用户(地址+nonce0) ——————–> 新合约(考试测验进击)用户(地址+nonce1) ——————–> 新合约(考试测验进击)用户(地址+nonce2) ——————–> 新合约(考试测验进击)用户(地址+nonce3) ——————–> 新合约(考试测验进击)

然则这种要领必要用户持续支配合约,耗损的矿工费价值异常大年夜,且成功率极低,每次都因此 1/1000 的中奖概率在考试测验。

因为第 1 代惊人的掉败率,显然无法使用,于是有了第 2 代进击措施:

这种措施的主要思惟是,合约创建的新合约地址由 合约地址+nonce 确定:

支配合约|——————| hash(caddr, nonce)用户 ———-> |轮回创建合约,| ——-> 新合约(考试测验进击)|直到进击成功或到达终 | ——-> 新合约(考试测验进击)|止前提才竣事,可能需 | ——-> 新合约(考试测验进击)|要支配大年夜量合约。| ——-> 新合约(考试测验进击)|—————– |

这种要领类似于挖矿,固定区块头部,赓续改动 nonce 来试探能否成功得到奖励,然则问题在于,假如在轮回第 1000 次才发明合法的 nonce,那么意味着之前支配的 999 个合约都属于挥霍 Gas 的操作。

那么若何更高效地探求合法的 nonce 呢?

我们回顾比特币挖矿,一个挖矿义务中,不仅有 nonce,还有 extraNonce [4]。

在比特币区块的 Coinbase 字段中,有一个自由改动的区域,改动这个区域会导致 MerkleRoot 被改动,从而实现 Header 被改动,具有 nonce 的效果,是以被称作 extraNonce。

为什么必要引入 extraNonce 呢?缘故原由在于 nonce 为 32 bit 数字,搜索范围只有 2^32,矿机险些一瞬间就遍历完了,经由过程赓续改动 extraNonce 来扩大年夜本地搜索范围,我们以致可以不改动 nonce 只改动 extraNonce 来挖矿。

大概黑客也想到了这一点,他们经由过程提前支配 1000 个代理合约来实现有 1000 个 extraNonce 的效果。 至此,进击措施进级到了第 3 代:

支配合约用户 ————————————–> 治理合约 C调用合约C,预先创建代理合约(extraNonce)用户 ————————————–> 1000个代理合约调用合约C,轮回考试测验可以成功进击的代理合约用户 ————————————–> 支配合约(考试测验进击)

显而易见,这种进击要领同时实现了 2 个效果:

提升了进击成功率

削减了进击合约支配数量,大年夜大年夜削减了 Gas 耗损。

彩蛋二:黑客预先创建的合约数量与中奖概率

前文提到黑客预先支配 1000 个代理合约,这个数字有什么考究呢?

if((seed – ((seed / 1000) * 1000))

seed 经过一系列以太坊链上情况以及多次 Hash 运算得出。Hash 结果对 1000 取余数,可以获得 0~999 的伪随机数。

我们假设哈希输出结果是平均的,并且哈希是抗碰撞的,那么匀称每次中奖的概率为 1/1000。

模拟结果:

公式运算结果:

公式运算结果:

只管更多合约能够供给更高的中奖概率,然则必要斟酌到 Gas 耗损与 Gas Limit 等身分,不宜过大年夜。

安比(SECBIT)实验室觉得黑客选择支配 1000 个合约,是根据概率代码 1/1000 想当然做出的判断。

彩蛋三:黑客可能使用了空投概率谋略的另一个 bug

黑客仍旧必要更高效地牟图利润,他们以致“发明”了 Fomo3D 空投规则在这种进击要领下裸露出的缺陷。

进击合约必要在最开始获取空投奖励信息,作为后续操作的依据。是以,进击合约会先依次调用游戏合约的两个查询接口,分手是 0xd87574e0 airDropPot_() 和 0x11a09ae7 airDropTracker_()。

Fomo3D 空投奖励的 airDropTracker_ 谋略要领为如下措施:

if (_eth >= 100000000000000000){airDropTracker_++;if (airdrop() == true){…}}

Fomo3D 判断是否能中空投奖励应用了如下措施:

if((seed – ((seed / 1000) * 1000))

根据我们阐发,0x820d 后期更新的进击合约直接去除了对 airDropTracker_ 的判断,但这样做着实有利有弊。

假如你懂得细节,猜出了黑客的用意,或者知晓这种做法的优毛病,迎接添加小安同砚微信(secbit_xiaoanbi),她会把你加入到「SECBIT 智能合约安然技巧评论争论」的群里。

尾声:下一个是谁?

8 月 14 日,BAPT-LW20 黑客团队的 0x820d 再次支配了两个新版进击合约,这一次他们将炮筒又对准了另一款一天前新支配的不有名合约。

望着大年夜屏幕上 AnChain.ai 态势感知态势感知平台赓续闪烁的红点,安比(SECBIT)实验室和 AnChain.ai 都很清楚,区块链天下里的战役还远远没有停止。

2009年,中本聪创造了一个虚拟的去中间化新天下。这仿佛是一片流着奶和蜜糖的应许之地,人们欢呼雀跃,蜂拥而至。但与所有的生态系统一样,新天下有生命,就有捕食者。有买卖营业者,就有黑客。区块链上的利用在进化,进击者也同样,我们给大年夜家展示的是区块链天下不为人知的另一壁,暗流涌动。料想之外,也在料想之中。

BAPT-LW20 & BAPT-F3D 大年夜事故光阴表:

2018/07/06 Fomo3D 游戏合约上线

2018/07/08 Zethr 核心开拓者 Etherguy 发明并使用空投破绽

2018/07/20 Fomo3D 游戏在海内走红

2018/07/20 BAPT-LW20 黑客团队地址开始生动

2018/07/21 BAPT-LW20 团队第一次成功使用 Fomo3D 空投破绽

2018/07/23 BAPT-LW20 团队进击山寨游戏⽼鼠会 RatScam

2018/07/23 Péter 在 Reddit 爆料 Fomo3D 空投破绽

2018/07/24 安比(SECBIT)实验室宣布 Fomo3D 及山寨版游戏空投破绽预警

2018/07/24 BAPT-LW20 黑客团队进击 FoMoGame

2018/07/26 BAPT-LW20 黑客团队支配新版进击合约 0×5483

2018/08/06 类 Fomo3D 游戏 Last Winner 上线

2018/08/07 LW 游戏开始火爆

2018/08/07 BAPT-LW20 黑客团队开始进击 LW 游戏

2018/08/09 以太坊未确认买卖营业数创年内新高

2018/08/10 早晨 AnChain.ai 态势感知系统发出预警

2018/08/10 安比(SECBIT)实验室与 AnChain.ai 联手开展查询造访

2018/08/10 BAPT-LW20 黑客团队转移旧合约中资金,应用新版合约继承开展进击

2018/08/11 完成 BAPT-LW20 进击光阴线回覆再起

2018/08/12 完成 BAPT-LW20 进击伎俩回覆再起

2018/08/13 针对更多进击源阐发

2018/08/13 完成 BAPT-F3D 和 BAPT-LW20 进击数据全景阐发,黑客获利超 5000 Ether

2018/08/14 BAPT-LW20 黑客团队再次支配新版进击合约,开始进击一个不有名合约

2018/08/17 BAPT-LW20 黑客团队篡夺 LW 终极大年夜奖 7754 Ether

2018/08/17 安比(SECBIT)实验室完成 BAPT-LW20 进击事故申报

参考文献

[1] 区块律动:8万笔买卖营业「封逝世」以太坊收集,只为掠取Fomo3D大年夜奖?https://mp.weixin.qq.com/s/5nrgj8sIZ0SlXebG5sWVPw

[2] Pwning Fomo3D Revealed: Iterative, Pre-Calculated Contract Creation For Airdrop Prizes!, https://peckshield.com/2018/07/24/fomo3d/

[3] Péter Szilágyi 提出的空投破绽使用 POC,https://www.reddit.com/r/ethereum/comments/916xni/how_to_pwn_fomo3d_a_beginners_guide/, 2018/07/23

[4] AsicBoost – A Speedup for Bitcoin Mining, https://arxiv.org/pdf/1604.00575.pdf, 2016/03/31

以上数据均由安比(SECBIT)实验室和 AnChain.ai 供给。

*本文作者:安比(SECBIT)实验室 & AnChain.ai,转载请注明来自FreeBuf.COM

赞(0) 打赏
分享到: 更多 (0)
免责申明:本站所有资料均来自于网络,版权归原创者所有!本站不提供任何保证,不保证真实性,并不承担任何法律责任

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

阿里云优惠网 更专业 更优惠

阿里云优惠券阿里云大礼包