织梦CMS - 轻松建站从此开始!

我的网站

当前位置: 主页 > 区块链

躲避子弹:以太坊状态问题(2)

时间:2021-05-21 09:10来源:未知 作者:admin 点击:
该漏洞的本质是触发随机的树查找。一个非常简单的变体是: 在他们的报告里,研究员通过 eth_call RPC 端点对同步到主网的节点执行了这一负载,下面是它

  该漏洞的本质是触发随机的树查找。一个非常简单的变体是:

x8mxTFPczmzYbgFg1F2NQRToODuBYrMcaPE7y5iA.png

  在他们的报告里,研究员通过 eth_call RPC 端点对同步到主网的节点执行了这一负载,下面是它们消耗 1000 万 gas 所需的时间。

  •   使用 EXTCOEHASH (名义 Gas 消耗量是 400)耗尽 1000 万 gas

    •   Parity:约 90 秒

    •   Geth:约 70 秒

  •   使用 EXTCODESIZE (名义 Gas 消耗量是 700)消耗 1000 万 gas

    •   Parity:约 50 秒

    •   Geth:约 38 秒

  (译者注:此处的意思是,如果一个 1000 万 gas 的区块全用这两个操作码填满,则节点需要这么长时间才能处理完这个区块)

  显而易见的是,EIP-1884 确实减少了攻击的效果,但还是远远不够的。

  那时候离大阪 Devcon 已经很近了。在 Devcon 期间,关于这一问题的知识在主网的客户端开发者之间传开来。我们也会晤了 Hubert 和 Mathias,还有 Greg Markou(他来自 Chainsafe 团队,一直在做 ETC 的工作)。ETC 区块链的开发者们也收到了这份报告。

  随着 2019 年接近尾声,我们发现,这问题比我们之前以为的还要棘手,恶意的事务可能导致出块时间延长到以分钟计。更难办的是,开发者社区已经对 EIP-1884 感到不满,它打破了一些合约,而且用户和矿工都希望提高区块的 Gas Limit。

  此外,仅仅两个月之后,到了 2019 年 12 月,Partiy Ethereum 就宣布要退出了,OpenEthereum 项目接管了 Parity 客户端的代码维护工作。

  于是大家创建了一个新的客户端协作频道,Geth、Netheremind、OpenEthereum 和 Besu 的开发者继续合作。

  解决方案

  我们意识到,只有双管齐下才能解决这个问题。一方面,我们要改进以太坊协议,也就是在协议层解决这个问题;最好是不要打破合约,也不要惩罚 “善意” 的行为,但又能防止攻击。

  另一方面,我们可以依靠软件工程,改变客户端内的数据模式和结构。

  协议层工作

  处理此类攻击的第一个思路是这个。在 2020 年2 月,其正式版本作为 EIP 2583 发布。该提案背后的观念是增加一个惩罚措施,每次树查找导致 miss (“未找到”)时就触发。

  不过,Peter 找出了一个绕过它的办法 ——“shielded relay” 攻击 —— 使得本质上惩罚有了一个上限(约为 800)(译者注:此处没有单位,疑为 gas)。

  惩罚 miss 方法的问题在于,必须先有查找的过程,然后才能确定要不要实施惩罚。但如果剩余的 gas 已不足于实施惩罚,则(从协议的角度看)一个没有得到充分支付的消耗流程又已经执行了。即使这会导致抛出错误,这些状态读取也可以封装到嵌套调用中,使得外部调用者可以重复执行攻击而不必支付(完整的)惩罚。 (责任编辑:admin)

织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容