首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

以太坊网络存在“致命报文” 漏洞,攻击者可瘫痪其2/3以上节点

北京时间 6月28日凌晨3时,在刚刚结束的硅谷Blockchain Connect Conference大会现场,区块链安全公司PeckShield披露了一个能够造成以太坊geth节点休克或崩溃的安全漏洞。

PeckShield将披露的漏洞命名为“Ethereum Packet of Death(EPoD)”,即“致命报文”,攻击者通过发送一个恶意报文即可向geth节点发动攻击。geth是以太坊主流的官方客户端,被众多重要节点采用,这也意味着一旦攻击者利用此漏洞向以太坊全部受影响geth节点实施攻击,涉及到的相关网络节点将随时可能停摆。对整个以太坊网络来说,这样的漏洞如若被用来开展恶性竞争,将扰乱市场秩序,造成不可估量的严重损失。

波及2/3以上以太坊网络节点

在深入探讨漏洞细节之前,我们首先介绍一下以太坊客户端应用。根据以太坊基金会官方网站的描述,以太坊官方客户端有若干个独立的运行版本,其中占较大市场份额的主要为Go Ethereum和Parity两种。

图1.Ethernodes网站统计的不同以太坊客户端的市场份额

Go Ethereum即geth,是使用Go 语言编写的官方客户端。geth完全开源,采用的是GNU LGPL v3的授权。根据Ethernodes网站的统计,geth的份额大概占整个以太网客户端的2/3,是目前以太坊网络较为主流的客户端。而排名第二的Parity(是Parity科技公司的产品,以Rust语言编写)则占据了剩余三分之一份额中的绝大部分(如图1所示)。还有其他客户端,占较小的一部分(如图2所示),共识机制的一致性,使得这些客户端在功能上几乎完全等同。

图2.Ethstats网站统计的不同以太坊客户端的市场份额

PeckShield的研究人员已经发现了一系列可能导致geth节点休克或崩溃的安全漏洞,而这些漏洞一旦被利用可能会给以太坊2/3以上的网络带来严重冲击。

图3.以太坊协议栈

“致命报文”漏洞细节

以太坊的核心在于所有的客户端都必须遵守同样的协议以保持共识。这些协议由RLPx、DΞVp2p和其他子协议,包括以太坊线路协议(Ethereum Wire Protocol)或者轻量级以太坊协议(Light Ethereum Protocol)等组成。

图3展示了以太坊应用的协议层。为了支持轻量级的客户端,轻量级以太坊子协议(LES)允许以太坊节点在同步获取区块时仅下载区块的头部,在需要时再获取区块的其他部分。为了实现这一功能,我们还需要一个全节点(或archive节点)作为LES服务器,为轻量级节点提供服务。

执行以下命令可以启动一个支持LES服务的geth全节点

geth --lightserv 20

在向LES服务器请求区块头部时,LES客户端会发起类型为GetBlockHeaders的消(message),而LES服务器的消息处理器(message handler)负责相应的解析工作。图4给出了geth客户端负责处理GetBlockHeaders类型消息的代码片段

(GetBlockHeaders)的信息处理器的代码片段:

图4.geth客户端中获取区块头部信息处理器

由LES客户端发送的查询(query)请求遵循如下格式

从图4的第17行开始,LES服务器处理not reverse分支。在第19行,LES服务器会检测在忽略了query.Skip个区块之后,是否还有可用的区块头部。如果检测通过, GetBlockHashesFromHash()方法就会被调用(即第20行),并返回一个区块头部数组。

然而对作为输入的请求(即query),LES服务器并未验证其有效性。攻击者可以构造形如query.Skip = -1 (0xFFF...F)这样的恶意请求。当query.Skip+1被作为待分配数组的最大长度参数传递至GetBlockHashesFromHash()方法时,长度为0的数组即被分配并返回。随后,通过索引query.Skip = 0xFFF…F访问该长度为0的数组时,LES服务器就会彻底崩溃。

漏洞危害及后续

公链作为区块链世界的“操作系统”,为区块链生态提供数据储存、网络传输、交易计算、共识机制等底层协议。当前市面上已经有多条竞争公链,总市值稳居第二的以太坊无疑目前公链领域的领跑者,一旦以太坊网络遭到攻击,将会给整个区块链生态带来重大影响。

此次漏洞所波及的以太坊geth客户端很可能包含着数字货币交易所以及部分矿池等关键节点。攻击者可以借助此漏洞实施恶性竞争,通过直接瘫痪竞争对手算力赢取更大的市场份额,这会严重影响以太坊市场秩序的稳定。我们在发现漏洞后的第一时间向以太坊基金会提交了漏洞报告,目前以太坊geth客户端的相关开发团队已发布了相应的补丁,在此我们也呼吁受影响的关键节点尽快升级至最新的版本,以抵御可能发生的攻击和危害.

图5.CVE-2018-12018 错误报告

这只是我们披露一系列漏洞的开始,在合适的时间我们将会公开所发现的其他漏洞。

关于我们

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180628G0HWDZ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券