• 售前

  • 售后

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

矿业动态 Alexandre
2018-9-5 16:26 196人浏览 0人回复
摘要

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

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



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


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


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


图片1.png

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


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


图片2.png

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


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


图片3.png

图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.png


图4.geth客户端中获取区块头部信息处理器由LES客户端发送的查询(query)请求遵循如下格式


image.png


从图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客户端的相关开发团队已发布了相应的补丁,


在此我们也呼吁受影响的关键节点尽快升级最新的版本,以抵御可能发生的攻击和危害。


image.png

图片6.png

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


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

本文暂无评论,快来抢沙发!

星点区块网定位于全球区块链资讯情报站,集区块链行业新闻、资讯、行情、数据、百科、社区等一站式区块链产业信息服务平台,我们追求及时、全面、专业、准确的资讯与数据,致力于为区块链创业者以及数字货币投资者提供最好的产品和服务。
  • 官方手机版

  • 微信公众号

  • 商务合作