STW:智能合约史上最大规模攻击手法曝光,盘点黑客团伙作案细节

作者:安比实验室&AnChain.ai

安比实验室创始人郭宇:2009年,中本聪创造了一个虚拟的去中心化新世界。这仿佛是一片流着奶和蜜糖的应许之地,人们欢呼雀跃,蜂拥而至。但与所有的生态系统一样,新世界有生命,就有捕食者。有交易者,就有黑客。区块链上的应用在进化,攻击者也同样,我们给大家展示的是区块链世界不为人知的另一面,暗流涌动。意料之外,也在意料之中。

LastWinner游戏大火,导致以太坊异常拥堵,Gas费用暴涨。大量以太币资金入场。

北京时间2018年8月10日凌晨1:38,加州时间9日上午10:38,安比实验室收到合作伙伴美国硅谷AnChain.ai公司消息,基于AI的态势感知系统发出预警信息,发现部分游戏合约出现大量交易并且存在异常的资金流动情况。安比实验室的小伙伴赶紧根据最新线索,对相关合约和交易进行观察、跟踪、分析。

悄然上线:莫名火爆的LastWinner

LastWinner是一款基于以太坊智能合约的DApp游戏,于8月6日上线,这款游戏一经推出,就「异常」火爆。

这款游戏合约地址为0xDd9fd6b6F8f7ea932997992bbE67EabB3e316f3C。据Etherscan显示,短短六天时间内,该游戏合约就已产生27万余笔交易。甚至前段时间以太坊网络大拥堵也与LastWinner游戏密切相关。8月8日和9日,在LastWinner和Fomo3D超大规模交易量的共同作用下,以太坊未确认交易数量创年内新高,平均Gas费用一度飙升至正常10倍以上。

该游戏第一轮奖池金额为1.6万多个以太币,而玩家总投资额更超过10万以太币,资金量巨大。目前游戏第一轮已结束,第二轮奖金池已迅速累积至7000多以太币。

疯狂的现象级游戏背后暗流涌动。

疑团重重:前期大量参与者的资金来历不明

据知名媒体「区块律动」报道,LastWinner由名为「蚁群传播」的资金盘组织推广运营,有着数量众多的会员和极强的推广拉下线能力。而据另一款火爆游戏Fomo3D开发团队称,LastWinner是仿Fomo3D游戏,其背后运营团队准备了20万ETH来进行自动刷量交易。因此,LastWinner游戏火爆的背后,可能是一场精心布局的游戏,初期利用机器人发起批量交易,伪造活跃假象,吸引新韭菜入场。

LastWinner游戏合约存在大量非正常交易,并且伴随着大量合约的创建与自毁,与正常人类调用行为特征偏离很大,这引起了我们的高度警惕。

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

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

显然,这是一款针对中国人的游戏,有着诱人的推广奖励,因此在网络上广为传播。并且,这款游戏有适配安卓和iPhone手机的App,简化了使用操作,降低了参与门槛。

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

我们直觉上感到这款游戏到处透露着诡异的气息。

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

LastWinner官方宣传语写道:

LastWinner是首款完全去中心化的类Fomo3D游戏DApp,完全基于以太坊智能合约原生开发。只要下载安装App就可参与游戏。

类Fomo3D游戏,且未公开源代码,这不得不让人产生怀疑。要知道,短短时间内原创开发一个好玩又安全的DApp游戏难度非常大。

安比实验室迅速使用内部工具逆向分析了LastWinner的合约代码。果不其然,这款游戏合约代码函数名称与Fomo3D高度相似,疑似直接拷贝了Fomo3D的源码,但却又新增了10余个可疑未知函数。

Fixed-rate protocol发布关于团队和投资人解锁方式调整公告:Fixed-rate protocol(FIX)发布根据社区意见和行业环境影响,对团队和投资人解锁方式进行调整的公告:

FIX总量1000万个,核心社区开发团队占10%,天使投资人占8%,共计占比18%的FIX由随时间(24个月)解锁调整为随业务发展(800万个FIX的挖矿进度)等比解锁。即挖出1个FIX,团队和投资人共解锁0.225个FIX。

此次调整后,会使得团队和投资人解锁大幅减少,作为规划长期稳定的项目,经协商投资人愿意与市场为伴随产品共同成长。

团队和投资人持币地址链上透明可查。

同时,Fixed将对存款挖矿产出速度进行调整,届时存款挖矿效率会大幅提升。DAO治理模式开启后,挖矿速度调整将交由DAO投票决定。[2021/3/15 18:45:34]

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

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

智能合约游戏或DApp的亮点之一就是公开透明。LastWinner游戏则完全违背了这一点,动机十分可疑,参与该类游戏的风险极高!

当时严峻的形势是:一方面有多个地址疑似疯狂发起攻击交易,另一方面项目方游戏合约未公开源码,高度可疑却吸引了巨量资金。我们感觉到态势十分紧急,于是迅速开展分工合作。AnChain.ai中美团队日夜交替分析和监控异常交易,收集证据,定位攻击来源与攻击规模。

安比实验室的小伙伴们则兵分两路,分别开展对不透明游戏合约和黑客攻击手法的逆向分析。

前情回顾:类Fomo3D游戏空投机制存漏洞

Fomo3D游戏参与形式是用以太币购买游戏道具,除了最后一个购买的人可以获得巨额大奖外,平时参与者还有机会获得「空投」奖励。

这里有主奖池和副奖池的概念,最终的巨额大奖和空投奖励分别从从主奖池和副奖池中获取。

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

一进入游戏界面,就会看到鲜明提示,通知当前中奖概率和奖池金额。这一设计,原本是想增加游戏趣味性,并起到吸引资金入场、延长游戏时间的作用。但实际情况却并非如此。

通过观察LastWinner游戏合约以及部分地址的异常交易行为,我们心中有了初步答案。

让我们把时间退回到20多天前,早在7月24日,安比实验室和派盾科技分别同时预警:Fomo3D游戏的智能合约存在随机数漏洞可被利用,Fomo3D及所有抄袭源码的山寨合约均存在该安全漏洞。原本设计上随机性较大的空投游戏可通过特殊手段操纵,大大提高中奖概率。

经安比实验室字节码智能扫描工具逆向分析,LastWinner游戏空投奖励代码与Fomo3D基本一致,相似度达91%,可能存在同样漏洞。随着游戏火爆进行,机敏的黑客肯定也闻风而动。

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

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

图中的这些可疑地址,如同病一般紧紧缠绕在LastWinner合约四周,肆意吞噬着LastWinner内的资金。

我们观察到,图中紧靠LastWinner的这些地址,有着类似的行为模式。

如:

1、不停地往某合约地址上发起交易,同时附带0.1个以太币2、不少交易状态为失败3、成功的交易又会涉及大量“内部交易”4、「内部交易」调用逻辑十分复杂,并伴随大量合约的创建和自毁

公告 | SBIVC将于7月20日系统维护 短时暂停服务:日本金融巨头SBI Holdings旗下加密货币交易所SBIVC发公告称,由于系统维护,预计将于7月20日6:00到10:00期间暂停服务。[2019/7/16]

安比实验室迅速得出初步结论:这些不明合约就是黑客用来攻击LastWinner的秘密武器,黑客正是通过这些合约,持续吸走LastWinner游戏内的以太币。

案发现场:大量类似交易,超高回报率

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

8月9号当天,0xae58地址内以太币余额就以超过300个,而当时他正在大量往地址0x5483上发起交易,每笔交易转账金额都是0.1Ether。显然,黑客正通过0x5483智能合约向LW发起攻击。

让我们观察下面这条状态显示为成功的交易。表面上看是0xae58向攻击合约0x5483转了0.1Ether,实际却涉及了一大堆地址间的相互转账,最终随着0x7c77合约自毁,0.189个Ether转移回0xae58的账户中。

这十分神奇,攻击者投入0.1个以太币,最终收获0.189个,瞬间回报率高达89%,简直暴利。

我们很快发现,除了0xae58地址外,还有四个地址也持续不断地向0x5483合约发起类似交易,持续获得高额回报。

而失败的交易,仅消耗27712燃料,成本损耗十分低。

研究目标立刻锁定为攻击合约0x5483。由于无法获得源码,安比实验室立刻使用内部工具展开逆向分析。

暴利:数据面前我们再次震惊

8月13日,当我们沉浸在研究黑客的攻击合约各种细节优化和精巧设计之时,黑客攻击数据全景分析新鲜出炉。

其中,攻击获利最大的是以0x820d地址为首的团队。他们累计获利超过5000个以太币。AnChain.ai团队和安比实验室将该黑客团伙精确定位,并将其命名为BAPT-LW20(BlockchainAPT–LastWinner)。

BAPT-LW20团队在短短6天时间内,共发送将近5万笔交易,从中攫取5194个Ether,获利价值将近1200万人民币。

由下图每小时发起的攻击交易数量趋势图,我们可以看出攻击的高峰期发生在8月8日~10日,每小时平均攫取将近100以太币,将近22万人民币。这正好也是LW游戏最火爆的时间段。随着游戏进入后期,入场资金急剧下降,收益降低,黑客也不得不也降低了攻击频率。

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

下图是「LastWinner中黑客的交易量占比和攫取ETH占比」,可见黑客发送的交易量只占总交易量的9.877%,但是去攫取了LastWinner奖金池中49%的奖金。黑客的娴熟攻击技能,为他们带来了普通玩家难以企及的好运,而普通玩家在这场游戏里面几乎很难获得空投奖励。

火线追凶:BAPT-LW20团队攻击LW始末

安比实验室尝试追踪复原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.1ETH的投入换回了0.125ETH。

日本加密货币交易所BITPOINT发布系统临时维护公告:?日本加密货币交易所BITPOINT因系统扩展,将于日本时间5月6日16:00~16:30临时进行系统维护,期间,现货交易和兑款服务将无法使用,登陆、保证金交易(杠杆交易及FX交易)、加密货币的转帐等服务可正常使用。[2018/5/3]

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

7月23日,0x820d又部署了新的合约,将攻击对象转移为另一款Fomo3D山寨游戏老鼠会RatScam(0x5167350d082c9ec48ed6fd4c694dea7361269705),0x820d团队在一天时间内使用了2299次攻击合约。

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

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

终于,在7月26日上线了他们的新版攻击合约。该合约总共发生过23835笔交易,最近一次活跃时间在8月10号。这款攻击合约,可由攻击者自定义受害游戏合约地址。因此0x820d在接下来的几天内,持续混合攻击Fomo3D原版、RatScam、FoMoGame等游戏,并持续观察其他山寨游戏的动态,等待时机。同时,继续部署若干个新合约进行调优测试。

终于,8月6日LastWinner游戏上线,24小时后0x820d团队就使用准备好的0x5483合约,针对LastWinner发起第一次攻击,并在接下来的4天内集中力量,疯狂利用空投漏洞展开攻势。

8月10日,0x820d调用0x5483攻击合约withdraw接口,提走了里面的余额,攻击疑似暂停。

原来,他们早已经部署了新版合约攻击合约0x9C10,又发起了超过30000笔交易,至今仍在活跃攻击。

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

北京时间8月17日上午,LastWinner游戏第一轮最终结束,最终大奖由0x5167地址获得,奖金额总计7,754以太币。

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

如下图,14小时前,黑客还在利用攻击合约获取空投奖励。随后,他改变了方案,直接用自身地址购买道具参与游戏,不断尝试夺取最终大奖。在此之后,又继续调用合约攻击LW游戏。

安比实验室猜测黑客潜伏很久,早已做好充分的准备,长时间利用脚本监控LW游戏状态,最终才能在众人放松警惕之时获得大奖。

BAPT-LW20黑客团队利用空投漏洞获利超5,194Ether,同时又夺取最终大奖7,754Ether,累计获利12,948Ether。

同行相杀:Zethr团队两天时间就成功利用漏洞

这场超大规模的类Fomo3D智能合约游戏被攻击事件,攻击者使用的秘密武器也正是智能合约。

据安比实验室调查分析,0x20C9地址最先成功利用原版Fomo3D空投漏洞并获取奖励。我们将他定位,并将其命名为BAPT-LW10。

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

此后,0x20C9继续部署多个攻击合约,进行调试优化。最终,在7月23日部署了最终版本0x39ac攻击合约,接下来的时间前后调用过90余次,而攻击对象涉及Fomo3D原版、LastWinner以及其他山寨版Fomo3D。

据我们观察,0x20C9是最早研究并成功利用空投漏洞的黑客。研究过程中,安比实验室发现0x20C9与另一款游戏Zethr密切关联。

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

Cardano推出另一项智能合约编程语言提案:Cardano基金会在推特表示,他们已推出一项提案请求(RFP),用于在Cardano上使用另一种编程语言,即简化使用扩展的UTXO(未使用交易输出)分类帐模型来部署智能合约。该提案通过电子邮件接受申请,截止到2020年8月31日。[2020/8/4]

显然,作为DApp游戏开发同行,Etherguy以及他所在的Zethr团队很早就研究了Fomo3D项目代码。Fomo3D合约7月6日部署上主网,Etherguy两天后就发现并成功利用了漏洞。从调用规模来看,Etherguy(BAPT-LW10)应该主要还是出于研究目的,并没有太多获利。

让其他黑客获利最多的正是LastWinner游戏。

游戏细节:LastWinner为何让黑客如此疯狂

从最初Fomo3D上线后不久,空投漏洞就已被人发现并成功利用。随着游戏的广泛传播,以及该漏洞被逐渐披露,空投漏洞的攻击手段也在这一过程中不断升级进化,最终部分黑客团队完成了精巧的攻击方案,可低成本、高效率获得奖励,并可大规模工程化地攻击任意任何同类游戏合约,疯狂收割以太币。

据安比实验室分析,除LW游戏以外,不少黑客团队都曾尝试攻击其他类Fomo3D游戏合约。但获利都远小于BAPT-LW20团队在LW游戏中所得。

我们试图从LW游戏本身寻找答案。

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

更要命的是,LastWinner团队修改了空投游戏参数,使进入副奖池的以太币比例由1%调整到10%,相当于空投奖励金高了10倍!

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

LastWinner游戏简直成为了黑客的提款机!

特别地,前面提到LastWinner游戏第一轮入场资金已达10万以太币,这也就是说,单单这一款游戏就有超过1万个以太币都持续暴露在被攻击的风险下,成为黑客的囊中之物。要知道,这款游戏第一轮最终奖池也才1.6万余以太币。本来空投奖励都是很小的金额,但黑客持续利用空投漏洞,积少成多,终成LastWinner最大赢家。

我们追踪到有多个团队对Fomo3D及山寨合约开展大规模自动化攻击,企图攫取利益。

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

安比实验室追踪到还有其他黑客团队向LastWinner合约开展攻击。部分黑客8月11号以后才入局,虽规模也很大,但终究因为错过黄金时机而获利较少。

攻击合约:设计复杂又精巧

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

起初,攻击合约的创建时间让我们感到疑惑,前面提到LW游戏合约于8月6日才部署上主网。难道0x820D可以未卜先知,或者他与项目方有什么不可告人的秘密?

带着这个疑问,我们尝试从合约0x5483的代码中寻找答案。

经过逆向发现,该合约有七个公开函数,其中一个疑似函数名是withdraw(uint256),用于将攻击合约中积累的以太币转走。

安比实验室在字节码中发现了上面提到的五个地址。原来这两个函数都会跳转到同一个内部函数,检查交易发起人是否是这五人地址之一。如果是,则可继续执行,如果不是,则提前让交易失败。

这也解释了为什么偏偏是这五个地址一直在调用攻击合约。因为他们是一个团队,合约特地为他们而设计,而其他人根本无法正常调用。

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

上图正是一笔攻击交易的传入参数。第一部分是调用函数哈希ID,后面跟着三个参数。注意看第一个参数,攻击者传入的明显是一个地址。显然,这个地址正是LW游戏合约地址。

声音 | 智能合约之父Nick Szabo:比特币ETF可能会导致更多的问题:据官方Twitter,智能合约之父Nick Szabo于8月12日发出的一系列推文显示其似乎对比特币ETF获得监管机构批准持规避风险的态度。他在推文中写道,“就我个人而言,我不会为为ETF或华尔街管理的资金游说,它们可能导致更多的问题。最近愚蠢的抛售已经或将很快摧毁这个领域的许多自以为是的、一无所知的东西。我们不需要新的人来代替他们。”[2018/8/14]

原来如此,攻击目标对象可以作为参数传入。「黑客真机智!」,我们不由地感慨。之前的一个困惑被解开,早在LW游戏上线前就已部署好的攻击合约0x5483,其实是一个通用型武器。

继续研究,接下来合约的复杂程度出乎我们意料。我们沿着生成的控制流程图追踪合约函数调用过程,程序指令以及分支情况非常之多,让人难以完全跟上。

安比实验室使用动态追踪调试技术,结合逆向分析结果与攻击交易内部记录,搞清楚了黑客所使用的手法。

其他攻击交易也都是类似的过程,黑客调用攻击合约,攻击合约再调用提前创建好的合约,进而创建新的合约,以新合约的身份参与LW游戏,买游戏道具,然后几乎必定获得空投奖励。

这一过程中不断新建的合约,就是态势感知系统中预警的大量异常合约创建与自毁。

追踪攻击合约调用历史,发现攻击者在部署完攻击合约后,就立即多次调用特定函数,每次新建10个新合约。而函数总共恰好调用了100次,因此新建了1000个新合约。

在攻击交易中,攻击合约最先调用的就是这预先创建好的1000个合约之一,似乎是特地从中挑选出来一个地址。

智能合约:一切皆可预测

攻击函数控制流程图中一个相隔很远的循环引起了我们的注意。

我们恍然大悟。攻击函数所做的就是不断循环地在1000个合约中,挑选合适的地址来完成下一步新建合约操作。所谓合适的地址,就是指能确保每次参与游戏都能获得空投奖励。

前面提到,以太坊智能合约中可以很容易的预测随机数,因为随机数的来源都是区块或者交易中特定的一些公开参数,如交易发起者地址、区块时间戳、区块难度等等。因此空投游戏利用随机数来控制中奖概率是不可行的。

而这里,黑客利用了另一个以太坊的特征,一个地址创建一个合约,合约地址是可按照特定规则计算得到的,任何人都可以根据已知信息进行推算。

因此,黑客循环利用自己控制的1000个合约地址,推算各地址下一次新建的合约地址,而该地址恰恰是空投游戏中奖数字的随机源。攻击合约通过一系列预演推算来筛选出“合适”的地址来完成攻击操作。

这才是黑客能够以超高概率获得空投的真正原因!

技术流:攻击手法细节披露

类Fomo3D游戏空投漏洞的根本原因在于,以太坊智能合约环境中难以生成无法预测的随机数。而Fomo3D开发者在其合约中增加了「判断调用者是普通人类还是合约」的逻辑来尝试规避,但此逻辑实现存在漏洞。黑客利用攻击合约提前预测随机数,并通过在构造函数内调用游戏合约的方法来伪装成普通人类地址,从而大大增加自身中奖概率。

时间再次回到7月23日,以太坊基金会开发团队负责人之一PéterSzilágyi在Reddit上首次公开爆出这个漏洞并给出1.0版本的POC方案。这主要是利用了这些特点:

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

用户能否获得空投奖励以及奖励金额,可在另外一个合约中提前计算出来,从而决定后面的操纵逻辑Fomo3D空投机制中尝试限制只有非合约地址才能参加游戏以防止上述情况的发生。但该判断方法存在漏洞,在构造合约的过程中参与游戏即可绕过该限制。因此攻击者可以部署一个智能合约,并在合约的构造方法中计算出自己是否能够获益,如果能则投入以太币参加游戏空投获利,否则就不参加。

Péter提出的这个方案只是一个最简单的原型,因为每次部署合约都要消耗不少Gas,而且工作效率很低且收益率并不高,采用该方案攻击,发起上千笔交易,都不一定能够真正获得空投奖励。

看到这里你可能会有疑问,上文的攻击者似乎手法更高明,而且实际成功攻击的发生时间要早得多。

Zethr开发者Etherguy早在7月8日就已使用更高明的手法成功获利,解决了上文1.0方案中的部分问题,我们姑且称之为2.0版本。

这个思路是通过合约循环创建子合约,直到子合约满足空投条件可以获利为止。这样做的好处是,在Gas充足的情况下,每次调用合约几乎一定可以获得收益,提高了工作效率。然而这种方案和1.0版本的攻击成本接近,并没有从本质上提高收益率。

而这次事件的最大获利者BAPT-LW20团队,就是在2.0版本的思路上进行了进一步优化降低了投入成本,提高了收益率。3.0版本则疯狂创建代理合约,通过利用计算下一步新建合约地址的技巧提前预判,筛选出符合条件的代理合约再创建出新的子合约,在子合约的构造函数中再完成上述攻击。而且攻击目标地址可配置,可多人同时协作攻击。当游戏奖池金额不足以覆盖攻击成本时,发出的攻击交易会自动提前失败,仅消耗很低的Gas费用。

在分析各类攻击合约过程中,我们还见到另外一种更高明的做法:主攻击合约有着良好的设计模型,支持核心算法动态替换与升级。原理上则是利用了delegatecall进行操作。安比实验室会持续关注这批黑客的动向。

彩蛋一:空投与挖矿

我们知道在PoW挖矿的时候,矿工通常需要进行如下计算:

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

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

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

答案显然是可以的,智能合约的地址是根据发起者账户nonce决定的,于是有了第1代方法:

但是这种方式需要用户持续部署合约,消耗的矿工费代价非常大,且成功率极低,每次都是以1/1000的中奖概率在尝试。

由于第1代惊人的失败率,显然无法利用,于是有了第2代攻击方法:

这种方法的主要思想是,合约创建的新合约地址由合约地址nonce确定:

这种方式类似于挖矿,固定区块头部,不断修改nonce来试探能否成功获得奖励,但是问题在于,如果在循环第1000次才发现合法的nonce,那么意味着之前部署的999个合约都属于浪费Gas的操作。

那么如何更高效地寻找合法的nonce呢?

我们回想比特币挖矿,一个挖矿任务中,不仅有nonce,还有extraNonce。

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

为什么需要引入extraNonce呢?原因在于nonce为32bit数字,搜索范围只有2^32,矿机几乎一瞬间就遍历完了,通过不断修改extraNonce来扩大本地搜索范围,我们甚至可以不修改nonce只修改extraNonce来挖矿。

也许黑客也想到了这一点,他们通过提前部署1000个代理合约来实现有1000个extraNonce的效果。至此,攻击方法升级到了第3代:

显而易见,这种攻击方式同时实现了2个效果:

提升了攻击成功率减少了攻击合约部署数量,大大减少了Gas消耗。

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

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

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

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

模拟结果:

公式运算结果:

尽管更多合约能够提供更高的中奖概率,但是需要考虑到Gas消耗与GasLimit等因素,不宜过大。

安比实验室认为黑客选择部署1000个合约,是根据概率代码1/1000想当然做出的判断。

彩蛋三:黑客可能利用了空投概率计算的另一个bug

黑客仍然需要更高效地攫取利润,他们甚至发现了Fomo3D空投规则在这种攻击方式下暴露出的缺陷。

攻击合约需要在最开始获取空投奖励信息,作为后续操作的依据。因此,攻击合约会先依次调用游戏合约的两个查询接口,分别是0xd87574e0airDropPot_()和0x11a09ae7airDropTracker_()。

Fomo3D空投奖励的airDropTracker_计算方式为如下方法:

Fomo3D判断是否能中空投奖励使用了如下方法:

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

尾声:下一个是谁?

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

望着大屏幕上AnChain.ai态势感知平台不断闪烁的红点,安比实验室和AnChain.ai都很清楚,区块链世界里的战役还远远没有结束。

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

BAPT-LW20&BAPT-F3D大事件时间表:2018/07/06Fomo3D游戏合约上线2018/07/08Zethr核心开发者Etherguy发现并利用空投漏洞2018/07/20Fomo3D游戏在国内走红2018/07/20BAPT-LW20黑客团队地址开始活跃2018/07/21BAPT-LW20团队第一次成功利用Fomo3D空投漏洞2018/07/23BAPT-LW20团队攻击山寨游戏?鼠会RatScam2018/07/23Pe?ter在Reddit爆料Fomo3D空投漏洞2018/07/24安比实验室发布Fomo3D及山寨版游戏空投漏洞预2018/07/24BAPT-LW20黑客团队攻击FoMoGame2018/07/26BAPT-LW20黑客团队部署新版攻击合约0x54832018/08/06类Fomo3D游戏LastWinner上线2018/08/07LW游戏开始火爆2018/08/07BAPT-LW20黑客团队开始攻击LW游戏2018/08/09以太坊未确认交易数创年内新高2018/08/10凌晨AnChain.ai态势感知系统发出预警2018/08/10安比实验室与AnChain.ai联手开展调查2018/08/10BAPT-LW20黑客团队转移旧合约中资金,使用新版合约继续开展攻击2018/08/11完成BAPT-LW20攻击时间线复原2018/08/12完成BAPT-LW20攻击手法复原2018/08/13针对更多攻击源分析2018/08/13完成BAPT-F3D和BAPT-LW20攻击数据全景分析,黑客获利超5000Ether2018/08/14BAPT-LW20黑客团队再次部署新版攻击合约,开始攻击一个不知名合约2018/08/17BAPT-LW20黑客团队夺取LW最终大奖7754Ether2018/08/17安比实验室完成BAPT-LW20攻击事件报告

参考文献区块律动:8万笔交易「封死」以太坊网络,只为抢夺Fomo3D大奖?https://mp.weixin.qq.com/s/5nrgj8sIZ0SlXebG5sWVPwPwningFomo3DRevealed:Iterative,Pre-CalculatedContractCreationForAirdropPrizes!,https://peckshield.com/2018/07/24/fomo3d/PéterSzilágyi提出的空投漏洞利用POC,https://www.reddit.com/r/ethereum/comments/916xni/how_to_pwn_fomo3d_a_beginners_guide/,2018/07/23AsicBoost-ASpeedupforBitcoinMining,https://arxiv.org/pdf/1604.00575.pdf,2016/03/31以上数据均由安比实验室和AnChain.ai提供,合作交流请联系。

来源链接:mp.weixin.qq.com

本文来源于非小号媒体平台:

安比实验室SECBIT

现已在非小号资讯平台发布1篇作品,

非小号开放平台欢迎币圈作者入驻

入驻指南:

/apply_guide/

本文网址:

/news/3626986.html

免责声明:

1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险

2.本文版权归属原作所有,仅代表作者本人观点,不代表非小号的观点或立场

上一篇:

一文看懂区块链安全6大分类3大问题

下一篇:

韩国政府宣布:被检查的21家加密货币交易所中有11家已实施安全措施

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

链链资讯

[0:31ms0-3:815ms