查看原文
其他

EIDOS挖矿众生相:“抬价、阻塞、攻击”让EOS主网不堪重负

PeckShield PeckShield 2021-01-13




 

11月01日,enumivo 团队上线新空投项目,用户发送任意数额的 EOS 到 eidosonecoin 账户,就能免费获得项目方空投的 EIDOS 代币。截至目前,项目上线一周以来,引发了持续的 EIDOS 挖矿热潮。受此影响,EOSIO 主网的 CPU 资源消耗进入了高度饱和状态,用户需要抵押更多的 EOS 拥有更多 CPU 资源(成本飙升),才能正常使用 EOS 网络。


图示1:https://enumivo.org/get-free-eidos


区块链安全公司 PeckShield 监控并分析了期间 EOSIO 主网上的交易,以及 REX 租赁模式和 CPU 资源消耗机制,发现了一些有趣的事情。


抬升 CPU 价格,让普通用户无法使用 EOS 主网


11月01日下午16时,我们启动了一个程序,可以向 eidosonecoin 无限发送0.0001个 EOS,用来监控参与此次挖矿的羊毛党实时挖矿情况。我们首先发现,eidosonecoin 账户中没有足够的 RAM,导致新矿工无法参与挖矿。幸运的是,RAM 危机在10分钟内便得到解决。


下午16:30左右,我们部署的程序耗尽了所有 CPU 时间。如图2所示,CPU 资源的价格提升到0.2ms/EOS,这意味着用户抵押1个 EOS 仅能获得200 us 的 CPU 资源。但是正常情况下转账一次所要消耗的 CPU 资源都不止这些。在空投开始的两个小时内,CPU 资源价格提高到每个 EOS 0.1 ms。与图2中最近4周的 CPU 价格相比,一度达到了最近7天的历史最高水平。


图示2:CPU 时间(ms)/EOS  (来源:https://labs.eostitan.com)


CPU 资源的价格飙升将会对 EOSIO 主网的用户产生较大影响。如图3所示,根据 DAppTotal.com 数据显示,EOS 主网的日活跃用户从8万跌到了仅2万人(蓝色线)。很显然,这是由于 CPU 价格被拉升后,不少用户没办法正常使用网络所致。


图示3:最近30天三大公链活跃用户情况(来源:https://dapptotal.com/)


然而,如图4所示,我们发现EOS 主网的交易次数却在持续攀升。这让人非常不解,为何 EOS 主网活跃用户越来越少而交易次数却越来越高了呢?在分析了这段时间每个交易之后,我们发现,这些交易大多数参与 EIDOS 挖矿的用户发起的薅羊毛行为,他们占据了大部分的 CPU 资源,导致普通用户根本无法正常使用网络。


图示4:最近30天三大公链日交易次数情况(来源:https://dapptotal.com/)


正如图5所呈现的那样,11月06日,与 EIDOS 相关的操作消耗了总 CPU 资源的56%。在承担不起较高 CPU 价格的情况下,用户就不再抵押 EOS 到 REX 平台上,取而代之的是开始租赁平台上的 CPU/NET 资源。特别是,排名前5的 EIDOS 矿机已经租用了数百万 EOS 等值的 CPU 资源。吊诡的是,这些头部挖矿服务商在空投开始前就租用了大量 CPU,这让他们在空投开始时就租用了相对便宜的CPU(1个 EOS 可以租用3000个 EOS 的 CPU 资源,且可续用30日)。 


图示5:EOS 主网 CPU 资源消耗分布图


掏空 EOSREX 系统,让 EOS 租赁市场几近崩溃


对普通用户而言,尽管他们可以从 EOSREX 平台租赁 CPU 资源,但只有很少数的人知道如何操作。这样一来,EIDOS 矿工和掌握丰富 CPU 资源的服务提供商就成了 EOSIO 主网上仅剩的“活跃用户”了。如图6所示,租 CPU 或者 NET 的话,用户需要抵押一些 EOS 代币进入 REX 基金池内,进而执行租赁操作。这对普通用户而言是一件较为复杂的事,以至于很多人还是没办法通过租赁CPU 以正常使用 EOS 主网。

图示6:EOSREX 操作流程图


随着越来越多的新矿工加入租赁 CPU,CPU 资源变成稀缺品,最高价格涨至1个 EOS 仅能租赁 180个 EOS。这对参与 EIDOS 挖矿的矿工而言并不是一个好兆头。更糟糕的是,REX 系统于11月04日,其 CPU 资源池里的可租用 EOS 已经耗光了。如图7所示:


图示7:EOSREX 平台无法正常租赁


根据 REX 智能合约中的程序,可租赁 EOS 的计算公式如下:


available_unlent = total_unlent - 2 * total_lent / 10 It means all rentcpu actions are suspended when around 83 % of the pool is consumed: available_unlent = 16.66666666% pool - 2 * 83.33333333% pool / 10 = 0 


这意味着当 REX 资金池中资产消耗至83%时,一切租赁 CPU 的请求都将宣告暂停。我们需要抵押更多 EOS 进入资金池,以便 REX 系统能够正常运转。


攻击窃取平台 CPU 资源,危机蔓延至整个 EOS 网络


当越来越多的人在寻找廉价 CPU 资源时,一些黑客开始尝试从 DApp 中偷取 CPU 资源进行挖矿。由于 BigGame 是为玩家代付 CPU 资源的 DApp 之一,也就成了首个被攻击的对象。黑客是如何实施攻击的呢?具体而言:黑客劫持了用户和 DApp 间的交易信息,在转账通知中嵌入了非法操作,故而可以实现窃取 DApp 代付给用户的免费 CPU 资源,直到 DApp 的可用 CPU 资源被耗尽为止。


转账通知攻击可以发生于任何 EOS 代币的转账过程中。11月07日凌晨3时,另一款 DApp 游戏 BetHash 也遭到了同样的攻击。


具体而言:BetHash 的博彩游戏机制,允许玩家可以猜测0-100之间的数字和系统给出的随机数比大小,以赢取相应赔率的奖金,投注数字越小赔率会越大。玩家每一次投注,BetHash 的智能合约 dicereceipt()函数都会被调用通知玩家账号。此时,黑客就可以控制恶意程序劫持该通知嵌入内联操作,进而实施攻击行为。尽管每一次攻击,攻击者也需要支付一定的赌注,但只要一直保持0.1个 EOS 并且保守投注97的点位(高概率),就可以始终获得0.1011 EOS 的返奖,同时窃取 CPU 资源的攻击行为。如图8所示,为一次成功的攻击。


图示8:黑客成功实施攻击过程(来源:https://eosq.app)


直到11月08日下午3时,不仅BetHash,一些其他的博彩类游戏包括EOSBet、EOSMMM,Trust-Dice,WinPlay 等等也被相继攻击了。例如,EOSBet 遭到了多个黑客的攻击( hotsexygames, cyscyscys235 和 juyhgdf1234u)等。在分析完关联交易后,我们发现,最近两天 EOSBet 消耗了将近38s的 CPU 资源。通常情况下,一次恶意的攻击交易会平均消耗52 ms 的 CPU 资源,而正常的交易仅消耗2 ms。尽管 EOSBet 宣称他们将抬升下注金额来增加单次攻击的成本,但实际情况显示EOSBet 仍在持续遭受攻击。图9所示为 EOSBet 的 CPU 消耗量始终保持在100%,被消耗殆尽。


图示9:EOSBet CPU 消耗情况 (来源: https://bloks.io/account/eosbetcasino#keys)


11月11日凌晨3时以来,作恶开始延伸至 EOSIO 系统的 bidname  短账号竞拍上,甚至可以无限制的使用 EOS 系统的 CPU 资源。具体是怎么做到呢?如果你想竞拍一个短账号,例如:baaa,你开始从0.0001个 EOS 起竞拍。当某人出价高出了10%的话,你的出价就会被返还。特别是,eosio::bidrefund 将由 EOSIO 系统调用且返还,黑客可以在系统返还的过程中劫持转账通知实施攻击。更糟糕的是,由于 EOSIO 系统拥有无限量的 CPU 资源,黑客就可以持续通过攻击获得 CPU 资源。这将使得黑客在不需要抵押和租赁 CPU 资源的情况下,让 EOSIO 主网运行更繁重的工作。(图10为一次攻击的交易信息。)针对竞拍系统出现的攻击行为,EOS 社区普遍认为,可以通过提高竞拍的最低出价来解决该问题。


图示10:黑客利用 EOSIO 系统 CPU 资源情况(来源:https://eosq.app)

自救指南


PeckShield 建议,在发送 EOS 代币时或接收通知之前应检查目标账户是否为智能合约。现在 EOSIO 网络上的智能合约中并没有检查 EOS 账户状态的 API。建议DApp 合约开发者可以采用类似 DAppShield 安全盾工具提供的过滤合约账户服务,并请求第三方安全公司协助。


推荐阅读:


Fomo3D式套利模式再现:“聪明”玩家狠狠地薅了一把羊毛!

暗夜临近,DApp江湖上演现实版"狼人杀

"图文追踪PlusToken资产转移行踪(一): BTC部分有1,203个流入交易所

资金盘FairWin漏洞系统详解:项目方可以撇开“作恶”嫌疑了?




    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存