EIDOS挖矿众生相:“抬价、阻塞、攻击”让EOS主网不堪重负
摘要: 11月01日,enumivo 团队上线新空投项目,用户发送任意数额的 EOS 到 eidosonecoin 账户,就能免费获得项目方空投的 EIDOS 代币。截至目前,项目上线一周以来,引发了持续的 EIDOS 挖矿热潮。受此影响,EOSIO 主网的 CPU 资源消耗进入了高度饱和状态,用户需要抵押更多的 EOS 拥有更多 CPU 资源(成本飙升),才能正常使用 EOS 网络。
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 平台租赁 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 安全盾工具提供的过滤合约账户服务,并请求第三方安全公司协助。