零成本瘫痪EOS或"稳赢"所有竞猜DApp:详解CVE-2019-6199

PeckShield
PeckShield 机构得得号

Jan 16, 2019 PeckShield是面向全球的业内顶尖区块链安全团队。

摘要: PeckShield认为该补丁并不能确保 DApp 免疫该漏洞,除了 EOS 主网升级之外,还需 DApp 开发者进一步就随机数生成问题进行处理,去除可控变量如账号余额或时间等因素参与随机数生成,并引入类似DAppShield安全盾这样的风控机制,减少或避免因阻塞攻击造成资产损失。

(图片来源于网络)

01月11日起,区块链安全公司 PeckShield 率先披露了 EOS.Win 等一系列EOS竞猜类游戏遭到了新型交易阻塞攻击事件。不同于以往频发的随机数或交易回滚攻击等合约层的攻击行为,这是一种利用底层公链缺陷而发起的攻击行为。PeckShield 研究人员进行深入分析后发现,这是存在于主网层的致命拒绝服务漏洞,攻击者可发起大量垃圾延迟交易导致 EOS 全网超级节点(BP)无法打包其它正常交易,即通过阻断打包正常用户的交易进而瘫痪 EOS 网络。 

同时,该漏洞也对链上竞猜类游戏造成致命威胁。目前已经有EOS.Win、FarmEOS、影骰、LuckBet、GameBet、EOSDice、STACK DICE等多款热门游戏遭到攻击。由于该漏洞本质上属于底层主网问题,任何DApp游戏,只要依赖如账号余额或时间等相关链上因素产生随机数,都存在被攻击的可能。

PeckShield 安全人员已确认并复现该问题,并认为这是迄今为止 EOS 主网出现的最为致命的高危拒绝服务漏洞,可被黑客用来大面积攻击现有DApp,直接会影响现有几乎全部 EOS 竞猜类 DApp 的正常开奖,进而严重制约 EOS DApp 生态的发展,甚至可能导致主网瘫痪。

PeckShield安全团队第一时间(01月11日)通知了 block.one 团队,并配合进一步修复处理。同时PeckShield团队通过媒体发出预警,且积极配合block.one 团队进行漏洞修复处理。截止发稿前,block.one 已经发布漏洞补丁,并联合超级节点实施了主网升级。但PeckShield认为该补丁并不能确保 DApp 免疫该漏洞,除了 EOS 主网升级之外,还需 DApp 开发者进一步就随机数生成问题进行处理,去除可控变量如账号余额或时间等因素参与随机数生成,并引入类似DAppShield安全盾这样的风控机制,减少或避免因阻塞攻击造成资产损失。

 

    (block.one官方新版本1.6.0发布说明)

下面PeckShield技术团队先详解CVE-2019-6199漏洞对EOS主网的影响:

交易阻塞攻击攻击原理:

一般的交易发送与执行过程如图所示:用户通过 cleos 客户端或其他方式将交易请求发送给 API 节点,在 API 节点处理后,最终到达超级节点进行打包出块。

(图一:普通交易发送流程)

问题出在,EOS 公链允许正在执行的交易里发送延迟交易(即在指定未来某个时间执行的交易),从而绕过 API 节点的验证,直接加入超级节点待执行队列,同时会将这些交易信息同步给其他 BP 节点,如图所示: 

(图二:合约内延迟交易发送流程)

这样一来,攻击者便可在一个被执行的交易中发出大量垃圾延迟交易,且在每个延迟交易中都做无限循环操作,从而使得超级节点执行这些垃圾延迟交易时,都会执行超时,进而耗光可用 CPU 时间,无法打包其它正常交易,最终导致 EOS 主网瘫痪。

攻击成本预估:

如果攻击者大量的延迟交易都成功执行且上链,必然花费攻击者大量的CPU 资源。然而 EOS 主网对于 BP 执行超时的交易不上链,导致交易中出现的状态修改全部回滚,不会产生任何帐号的 CPU 消耗成本,但却实实在在消耗了 BP 节点的 CPU 执行时间,使得出块时间内无法打包正常交易。因此,攻击者实施攻击所需消耗的仅为发送大量延迟交易的那个交易的 CPU 成本。以当前CPU抵押价 50ms/EOS 计算,抵押一个 EOS 足以阻塞主网几秒,且 CPU 抵押机制可在24小时后重置,意味着攻击者可以用抵押的同一批 EOS 每天攻击一次,接连持续攻击,最终抵押的 EOS 又可以全部赎回,因此其攻击成本近乎为0。

验证性攻击测试:

基于以上分析,我们做了短暂的验证性测试。测试交易中分别发送100个和300个延迟交易,每个延迟交易中都是执行无限循环直到超时。300个延迟交易执行后的影响如下图所示: 

(图三:交易阻塞攻击后的出块情况)

从块36981513开始到块36981782结束,共269个块,大约134秒,BP产生的块中仅部分包含大量交易,其他大部分块中交易数在0~2之间。而发送100个和300个延迟交易的CPU消耗仅为4.82 和 16.5 ms,按 50 ms/EOS计算,抵押大约0.4 EOS 就能完成一次发送300个延迟交易的攻击。当然 CPU 的价格波动比较大,计算不够准确,但不难看出,黑客若妄图实施攻击,致使 EOS 主网瘫痪的成本并不高。

潜在危害及影响:

因为这个是公链层面的漏洞,不同于以往 DApp 合约层的安全事件影响,该漏洞一旦被利用,危害的会是基于主网生态上的每一个参与者,包括超级节点、DApp 开发者,乃至每一个用户。

PeckShield 最新推出的安全盾风控平台 DAppShield,会就黑客攻击特征做分析,从而就可能存在的安全风险向广大 DApp 开发者发送预警及防御举措建议。EOS.Win 是第一个利用此漏洞实施攻击的成功案例,此后,FarmEOS、影骰、LuckBet、GameBet、EOSDice、STACK DICE等多款游戏接连被攻击。而且根据攻击者的过往链上行为,黑客很可能会向全网实施“撒网式”批量攻击,预计给整个 EOS 生态内的众多 DApp 都带来持续威胁。在此之前,希望广大开发者应高度警惕,应及时采用block.one官方推荐的随机数生成方案(包含链下随机种子),做好安全布控或搭建风控系统,排查潜在被攻击的风险。

(作者:PeckShield,内容来自链得得内容开放平台“得得号”;本文仅代表作者观点,不代表链得得官方立场)

链得得仅提供相关信息展示,不构成任何投资建议
本文系作者 PeckShield 授权链得得发表,并经链得得编辑,转载请注明出处、作者和本文链接

更多精彩内容,关注链得得微信号(ID:ChainDD),或者下载链得得App

分享到:

相关推荐

    评论(0

    Oh! no

    您是否确认要删除该条评论吗?

    分享到微信