创建一个针对Ethereum网络的协议解包器
Enabling security analysis and education of the Ethereum platform
本篇论文旨在探讨如何通过创建一个Wireshark网络包解码器来分析和教育以太坊平台的安全性。使用了定制化的私人以太坊Docker网络来促进Go Ethereum执行客户端之间的通信,并使Wireshark解码器能够捕获实时网络数据。最后,作者还使用了解码器来比较DiscoveryV4和DiscoveryV5的区别,并跟踪RLPx协议中的交易在网络上的传输过程。本文的研究方法包括创建Wireshark解码器、使用定制化的私人以太坊Docker网络以及对比不同版本的DiscoveryV4和DiscoveryV5协议。最终结果表明,该解码器可以有效地帮助人们理解和分析以太坊平台的安全性和网络流量。
方法描述
该论文提出了一种新的网络包解码器(dissector),用于分析以太坊DEVP2P协议套件中的数据包。该解码器能够解析UDP基的DiscoveryV4、DiscoveryV5以及RLPx协议,并支持其子协议ETH和SNAP的消息能力。这个解码器使用Wireshark作为平台来实现,通过拦截网络流量并提供实时视图,可以识别协议、解码数据、跟踪流和对话、计算统计信息等。
方法改进
传统的网络包解码器通常用于调试、协议分析、安全性和可扩展性分析以及教育目的。目前有两种已知的以太坊DEVP2P协议解码器:一个是基于Wireshark插件引擎使用LUA编程语言构建的;另一个是使用C编程语言编译Wireshark源代码而构建的。然而,这两种解码器都存在一些限制,只支持加密发现V4,而不支持在EIP-868中于2019年10月发布的新型数据包类型。此外,它们也不支持DiscoveryV5和RLPx及其任何子协议,如ETH和SNAP。
这两个项目都已经被放弃,原因是复杂度高,需要社区完成这项工作。由于RLPx的数据包解码过程比较复杂,因为TCP连接是使用ECIES(椭圆曲线集成加密方案)加密的,因此需要私钥才能解密通信。私钥因素包括我们的私钥、节点的公钥以及一个随机生成的临时密钥。
解决的问题
该解码器解决了现有的解码器无法处理新型数据包类型的问题,同时也填补了DiscoveryV5和RLPx及其子协议的安全性和性能分析方面的空白。此外,该解码器还可以帮助证明其价值,为社区和教育者提供更深入的分析,包括安全性和性能差异的比较,以及交易和块传播等方面的研究。
论文实验
本文介绍了作者使用Wireshark创建一个针对Ethereum网络的协议解包器,并对不同协议进行了分析和展示。在实验中,作者构建了一个私有开发网络,并通过MetaMask连接了该网络上的账户,演示了如何在两个节点之间进行交易。以下是每个实验的详细介绍:
-
实验目的:创建Wireshark解包器并分析不同协议
在这个实验中,作者的主要目的是创建一个Wireshark解包器来解析Ethereum网络中的不同协议。这包括DiscoveryV4、DiscoveryV5和RLPx协议以及它们的子协议ETH和SNAP。作者还创建了一个名为PYDEVP2P的Python库作为后台支持,提供大部分解码、解密和数据布局工具,以帮助Wireshark显示数据包信息。
-
实验步骤:构建私有开发网络并进行交易
在这个实验中,作者构建了一个私有开发网络,其中包括一个Bootnode和三个节点。每个节点都运行在一个Docker容器中,并且使用GETH客户端。作者使用MetaMask连接到该网络,并从不同的账户向另一个账户发送了200个ETH。整个过程被记录下来并在后续章节中进行分析。
-
实验结果:性能和安全性的分析
在这个实验中,作者分析了DiscoveryV4和DiscoveryV5协议的性能和安全性,并比较了它们与RLPx协议的不同之处。此外,作者还对实际交易进行了详细的分析,以了解在网络层面上发生了什么。
总的来说,本文旨在展示如何使用Wireshark创建一个用于Ethereum网络的协议解包器,并展示了如何在私有开发网络上进行交易。作者还对不同协议的性能和安全性进行了分析,以便更好地理解Ethereum网络的工作原理。
总结
该论文主要介绍了以太坊网络及其相关协议,并通过两个现有分解器的比较,探讨了如何使用分解器来解析网络数据包以及理解底层协议。该论文的优点包括:
- 全面深入地介绍了以太坊网络及协议,包括公共和私人网络、节点类型、网络协议等。
- 提供了两种现有的分解器的比较,帮助读者了解它们之间的差异和优缺点。
- 论文作者在介绍过程中提供了大量的代码示例和详细的解释,使读者更容易理解和应用所学知识。
方法创新点
该论文的方法创新点在于,通过对已有分解器的比较,提出了一些改进和完善的想法,例如可以将ENRRequest和ENRResponse添加到C dissector中,以便更好地支持新版本的DiscoveryV4协议。此外,该论文还提出了一个基于用户界面的演示应用程序,可以帮助用户更直观地观察和理解以太坊网络中的数据传输过程。
未来展望
随着以太坊网络的发展和技术的进步,未来的展望包括:
- 进一步完善已有的分解器,使其能够更好地支持新的协议和功能。
- 开发更加高效和智能的分解器,能够自动识别和解析更多的数据包类型和协议。
- 利用机器学习和人工智能技术,实现对以太坊网络数据的自动化分析和预测,为用户提供更好的服务和支持。
附1:实现方式
项目概述
该项目通过构建一个自定义的 Docker 网络环境来模拟以太坊节点之间的通信,并使用 Wireshark 和自定义的 Lua 解析器插件来捕获和分析这些通信。具体来说,它包括以下组件:
- Go-Ethereum (Geth) 定制源代码:用于暴露私有会话密钥。
- Docker 环境:包含多个 Geth 节点和一个路由器容器,用于模拟小型私有以太坊网络。
- Lua 解析器插件:用于在 Wireshark 中解剖 DEVP2P 协议的数据包。
- PYDEVP2P 库:用于 Python 和 Lua 之间的交互。
操作与实现步骤
1. 环境设置
确保安装了必要的软件和库:
1 | sudo apt-get update && sudo apt-get upgrade |
2. 设置 Lunatic-Python 桥接
Lunatic-Python 是一个双向桥接库,允许 Lua 和 Python 之间的交互。
1 | # 克隆 Lunatic-Python 仓库 |
3. 克隆并安装 LUA Dissector 和 PYDEVP2P
1 | # 克隆 LUA Dissector 和 PYDEVP2P |
-
使用本地
.pcapng
文件测试:1
wireshark-r final.pcapng
这将运行 Wireshark 并加载捕获的
.pcapng
文件。您可以查看解剖后的 DEVP2P 数据包。 -
实时捕获网络流量:
- 启动 Wireshark 并选择适当的接口捕获数据包。
- 观察和分析捕获的数据包,特别是 RLPx 握手和 DiscoveryV5 数据包。
4. 构建 Docker 环境
1 | # 克隆 GETH-Docker 仓库 |
5.安装编译和运行自定义的 Go Ethereum 客户端:
1. 克隆自定义的 Go Ethereum 源代码
首先,你需要克隆自定义的 Go Ethereum 源代码仓库。
1 | git clone https://github.com/jmkemp20/go-ethereum.git |
2. 安装 Geth 或所有 Go Ethereum 工具
进入克隆的 go-ethereum
目录,并编译 geth
或所有工具。
安装 Go 1.20
确保你已经安装了 Go 1.20 或更高版本。如果没有,请按照以下步骤安装:
1 | # 下载 Go 1.20 |
编译 geth
或所有工具
进入 go-ethereum
目录并编译 geth
或所有工具。
1 | cd go-ethereum |
3. 运行 Geth
编译完成后,你可以运行 geth
。确保 geth
可执行文件在你的 PATH
中,或者直接在 go-ethereum/build/bin
目录下运行它。
1 | # 如果 geth 在 PATH 中 |
成功安装并运行自定义的 Go Ethereum 客户端
项目结构
- Dockerfile:用于构建 Docker 镜像的配置文件。
- docker-compose.yml:用于启动和管理 Docker 容器。
- lua-devp2p-wireshark-dissector:Lua 解析器插件,用于在 Wireshark 中解剖 DEVP2P 数据包。
- pydevp2p:Python 库,用于处理以太坊 DEVP2P 协议中的 ECIES 和其他加密操作。
- lunatic-python:Lua 和 Python 之间的桥接库。
总结
通过上述步骤,设置并运行一个自定义的 Docker 环境来模拟以太坊节点之间的通信,并使用 Wireshark 和自定义的 Lua 解析器插件来捕获和分析这些通信。有助于进行安全分析和教育,深入理解以太坊网络的工作原理。
附2:原文翻译(结论篇)
6.1 引言和回顾
本论文提出了一种为以太坊的 DEVP2P 点对点协议套件创建 Wireshark 剖析器的新方法,包括带有 ETH 和 SNAP 子协议的 DiscoveryV4、DiscoveryV5 和 RLPx。正如我们所讨论的,以太坊网络促进了以太坊网络节点之间的相互通信,为去中心化的应用程序和账户提供了便利。因此,为了满足创建支持 RLP 解码和 ECIES 解密的 Wireshark 剖析器插件的要求,涵盖了许多贡献。首先,讨论了利用自定义的 Go Ethereum 源创建一个私有的 Ethereum docker 网络。接下来,介绍了 LUA Wireshark 插件的实际实现;首先是支持 DEVP2P 发现协议的 “discovery.lua” 插件,然后是 “rlpx.lua”,它允许剖析 RLPx,包括 ETH 和 SNAP 子协议。然后,我们深入研究了 PYDEVP2P,这是一个基于 python 的最小第三方依赖库,为 RLP 解码、ECIES 解密和解剖辅助函数提供了工具。最后,利用剖析器和PYDEVP2P分析了椭圆曲线数字签名算法 (ECDSA) 椭圆曲线 Diffie-Hellman 背后的技术细节。
Wireshark 是一种广泛使用的网络分析工具,允许用户检查和解码网络数据包。但是,Wireshark 本身不支持以太坊的 DEVP2P 协议,这限制了研究人员和开发人员监控和理解以太坊节点行为的能力。最重要的是,Wireshark 支持使用解剖插件,这些插件是 Wireshark 解剖功能的插件。正如我们所讨论的,当前由 BCSEC Org 和 ConsenSys 提供的两个剖析器插件并不完全支持 DiscoveryV4 的最新消息结构,并且对 DiscoveryV5 和 RLPx 的支持为零。为了解决这一差距,本论文在 LUA 中开发了一个自定义 Wireshark 剖析器插件,该插件可以以用户友好的格式解析和显示 DEVP2P 数据包。该插件利用 PYDEVP2P,这是一个基于 python 的库,用于协助解码 RLP(递归长度前缀)和解密 DEVP2P 协议使用的 ECIES(椭圆曲线集成加密方案)。
此外,本论文还创建了一个具有自定义 Go Ethereum 映像的私有 docker 网络,该网络可生成真实的 DEVP2P 流量,用于开发、测试和分析目的。使用这个剖析器插件和环境,本论文演示了 Wireshark 剖析器如何分析 DEVP2P 数据包流的各个方面,例如跟踪交易在整个网络中的传播、分析 DiscoveryV4 椭圆曲线数字签名算法 (ECDSA) 和 DiscoveryV5 对椭圆曲线 Diffie-Hellman (ECDH) 的使用。本论文为研究以太坊的点对点通信层和增强去中心化应用程序的透明度和安全性提供了实用工具,为区块链研究领域、以太坊社区成员和教育工作者做出了贡献。
6.2 解剖和分析结果
本论文介绍了 Wireshark 剖析器插件的设计和实现,用于剖析 DEVP2P 的 DiscoveryV4、DiscoveryV5 和 RLPx 协议。剖析器插件可以解码和显示以太坊节点之间交换的各种消息,这些消息要么是实时网络,要么是事后捕获数据包。此外,剖析器插件还支持使用从握手过程中派生的会话密钥来解码 DiscoveryV5 和 RLPx 消息。
创建剖析器的过程和剖析器的众多功能在第 4 章中展示。具体来说,DEVP2P 剖析器支持在 DiscoveryV4 中找到的所有消息,如第 4.3.1 章所述,包括 Ping、Pong、FindNode、Neighbors、ENRRequest 和 ENRResponse。由于新的“enr-seq”字段,以前的剖析器(包括 BSECORG 的 LUA 剖析器插件和 ConsenSys 的 C 剖析器)无法完全剖析 Ping 和 Pong 消息的较新消息架构。这些以前的剖析器也不支持 EIP-868 中描述的最新 ENRRequest 和 ENRResponse 数据包,这些数据包已于 2019 年 10 月添加到协议中。
接下来,新的剖析器支持第 4.3.2 章中讨论的 DiscoveryV5 的最新实现,包括 Ping、Pong、FindNode、Nodes、TalkReq 和 TalkResp。以前的剖析器不支持此功能,因为协议的性质会混淆数据包标头信息和 ECDH 握手以交换会话密钥以进行加密通信。但是,这种新的 DEVP2P 剖析器提供了维护在网络上的已知节点之间创建的会话的所有功能,从而无缝解密和破译捕获的网络数据。
DEVP2P 剖析器插件可以分析和破译 RLPx 促进的以太坊节点之间经过身份验证和加密的通信。这包括使用 AuthInit 和 AuthAck RLPx 消息在节点之间创建会话密钥的握手过程,然后是内置的 RLPx 功能“P2P”Hello 消息,如第 4.4 章所示。剖析器支持其他 RLPx P2P 消息、Ping、Pong 和 Disconnect。由于 RLPx 用作多种功能的 TCP 传输,因此剖析器可以解码、解密和剖析 RLPx 下的两个主要子协议或功能 ETH 和 SNAP。这些协议支持区块传播、链同步和交易,然后是状态管理和 SNAP 同步。剖析器支持 2 条 RLPx 握手消息、4 条 RLPx P2P 消息、13 条 ETH 功能消息和 6 条 SNAP 功能消息。
关于区块链状态和交易的 Connected Peer 节点。剖析器还可以显示消息格式的详细信息,例如 RLP 编码和解码、数据包标头和尾部以及消息类型和内容。该工具允许轻松访问 DEVP2P 的内部工作原理,并为研究人员、一般区块链社区和类似领域的教育工作者提供帮助。
6.3 限制与未来工作
剖析器是对以太坊网络分析的新颖贡献,因为它是第一个在统一且用户友好的界面中剖析所有三种 DEVP2P 协议的工具。剖析器可以帮助研究人员和开发人员了解 Ethereum 网络的行为和性能,并识别和缓解潜在的安全威胁。剖析器还可以通过使椭圆曲线密码学在实际应用中更易于访问来帮助教育工作者,同时帮助开发和测试以太坊网络的新协议或功能,同时提供可靠的
为未来改进和扩展对现有协议的支持奠定了基础。
但是,剖析器也有一些局限性和缺点,必须在未来的工作中解决:
剖析器需要自定义 Go Ethereum 源代码,其中包括每个节点在 RLPx 握手期间生成的随机私钥,用于会话密钥共享和后续数据包的加密。剖析器不支持使用官方 GETH 或 Ethereum 客户端进行 RLPx 剖读。
剖析需要 Python 配合 PYDEVP2P 使用, 在幕后处理剖析、解码和解密的主要逻辑。这增加了剖析器设置和执行的复杂性和开销,需要安装 Python PIP 包的 PYDEVP2P 以及 LUA 和 Lunatic-Python 桥。
剖析器存在不完整的消息错误,当某些消息大于特定大小时,会导致它们被截断或跳过。此错误会影响捕获握手数据包或格式错误的数据包时剖分结果的准确性和完整性。
剖析器不会在 Wireshark 显示屏上以清晰的人类可读格式显示 DiscoveryV5 消息的未屏蔽“authdata”,其中包含节点 ID、签名和临时公钥等基本信息。
随着以太坊及其底层网络的复杂性不断增长并随着时间的推移而发展,未来工作可能会有一些可能的改进或扩展:
在权益证明环境中使用剖析器,查看权益证明共识算法网络中的执行客户端中使用了哪些 DEVP2P 协议和消息。看看哪些 DEVP2P RLPx 功能消息被新协议改编或未使用,以进行权益证明,这将是一件有趣的事情。
剖析 LIBP2P 并将其与 DEVP2P 进行比较。LIBP2P 是以太坊共识客户端使用的另一个点对点网络堆栈。在功能、性能和安全性方面对 LIBP2P 和 DEVP2P 进行比较和对比会很有用。
添加 LES、PIP、WIP 和其他 RLPx 子协议的剖析。剖析器目前仅支持 ETH 和 SNAP 子协议。这些其他子协议用于不同的目的,例如轻以太坊子协议 (LES) 支持、奇偶校验轻协议 (PIP) 支持和以太坊见证协议 (WIT)。剖析器也应该扩展以支持这些子协议。
调查网络发现泄漏,这是 DiscoveryV4 中发现的问题。网络发现泄漏是一个问题,即为特定链/网络 ID 设置的 Ethereum 节点会错误地通信并发现其他 Ethereum 网络上的节点。
实施 DiscoveryV4 和 DiscoveryV5 拒绝服务 (DoS) 攻击。DiscoveryV4 协议容易受到拒绝服务 (DoS) 攻击,这些攻击可能会用虚假的 ping 或 pong 消息淹没节点。这些消息会消耗节点的带宽和处理资源,并可能阻止它们响应合法消息。剖析器可以通过捕获网络上的此类恶意数据包来帮助检测和监控此类攻击。
实施 RLPx 已知明文攻击。RLPx 协议使用 AES-CTR 加密,每条消息使用固定的 IV(初始化向量)。这使得它容易受到已知的明文攻击,如果攻击者知道一些明文-密文对,该攻击可以恢复加密密钥。剖析器可以通过随机化每条消息的 IV 或使用不同的加密方案来帮助避免这种攻击。
执行 Wireshark 统计分析。Wireshark 提供各种统计网络流量分析工具,例如图形、图表、表格、过滤器等。剖析器可以利用这些工具对 DEVP2P 协议进行更高级和全面的分析,例如吞吐量、延迟、数据包丢失、消息分发、节点行为等。
6.4 最后的思考
解剖器的设计、实现及其结果的分析证明了它对社区、教育工作者、开发者和研究者的有用性。LUA Wireshark 解析插件和 PYDEVP2P 库为教育工作者、研究人员及开发者提供了理解以太坊网络内部运作所需的所有工具。该解析器还允许可视化流行的密码学概念,利用椭圆曲线密码学(ECC),同时帮助理解递归长度前缀(RLP)编码的工作方式。在创建此解析器的过程中克服了许多障碍,无论是更新文档还是实现以太坊特有的ECIES技术细节。本文档中穿插的大多数技术细节直接来自以太坊DEVP2P GitHub规范页面以及最常用的执行客户端源代码Go Ethereum。因此,这些方法对于更广泛的以太坊社区成员、分析师尤其是教育者来说并不容易获得。
本文讨论的贡献使得进入以太坊节点网络通信变得更加容易,并且克服了由大型区块链技术解决方案公司ConsenSys指出的一些障碍。这包括可以使用单个命令启动一个完整的私有以太坊网络的Go Ethereum Docker网络,随后是只需几个简单步骤即可安装的LUA Wireshark插件和PYDEVP2P库。正如所讨论的那样,PYDEVP2P库还提供了易于理解的椭圆曲线加密实现,让教育工作者和学生能够在一个实际环境中亲身体验并理解这些底层概念。
本文档的主要目标是提供所有必要的工具来支持未来的改进,为教育者提供一种轻松访问的工具来展示ECIES密码技术,同时也为了安全分析师能够进一步增强点对点区块链网络的健壮性。