模糊测试以太坊网络 (devp2p)

该文章提出了一个关于模糊测试以太坊网络 (devp2p) 的项目,旨在通过创建模糊器来发现潜在的漏洞。该项目计划使用 Go 语言,并基于 Geth 客户端修改其 devp2p 实现,以发送恶意消息。目标是测试网络升级和客户端的 devp2p 实现,从而发现可能导致崩溃、内存泄漏等问题,并最终提高以太坊网络的安全性。

模糊测试以太坊网络 (devp2p)

创建用于 devp2p 协议的模糊器,以发现潜在的漏洞。

动机

为了确保以太坊的良好运行,至关重要的是它保持高度安全。作为一个大型区块链,以太坊代表了潜在黑客的目标。

以太坊网络和 devp2p 的不同协议在实现节点之间的通信方面发挥着重要作用,这对于协议的运行至关重要。

此网络中的漏洞或错误可能会导致重大问题。因此,保证网络和节点之间交换的最大安全性至关重要。

为了避免这种情况,以太坊贡献者开发了许多工具,包括模糊器。

模糊器程序是将无效、意外或随机数据作为输入提供给计算机程序的程序。然后,程序会受到监控,以查找诸如崩溃、内置代码断言失败或潜在内存泄漏之类的异常。

这是一个由以太坊贡献者制作的不同模糊器列表(感谢 Fredrik):

https://github.com/MariusVanDerWijden/tx-fuzz

https://github.com/MariusVanDerWijden/FuzzyVM

https://github.com/holiman/goevmlab/

https://github.com/infosecual/nosy

https://github.com/ethereum/c-kzg-4844/tree/main/fuzz

https://github.com/jtraglia/kzg-fuzz

https://github.com/sigp/beacon-fuzz

https://github.com/infosecual/wormtongue

我们可以注意到的一件事是,没有(我没有找到任何)模糊器使用执行客户端与 devp2p 交互,只有一个使用 prysm 与 devp2p 交互。

项目描述

为了提高安全性,我建议创建模糊器,目的是潜在地发现以太坊网络和实现 devp2p 的客户端上存在的漏洞和错误。

该项目最初由 Fredrik 提出。

模糊器可以构建并通过 devp2p 发送随机或指定的 payload。目标是找到 DoS 向量和崩溃的潜在触发因素。这些模糊器将在私有网络和测试网上运行,以不干扰以太坊的运行。 这样做可以帮助:

  • 测试网络升级
  • 测试客户端的 devp2p 实现
  • 导致意外行为,例如崩溃、内存泄漏等。

然后将报告这些行为,以便能够纠正它们并保护网络。

规范

我的解决方案的实现需要使用我将开发的模糊器发送消息。该过程分为两个基本步骤: 连接到以太坊网络并发送消息。 开发不同的模糊器并将恶意输入发送到网络。

为了构建解决方案,我选择使用 Go 编程语言。 Go 是开发模糊器的理想选择,它具有出色的性能。性能是模糊器的关键:它们需要生成并发送大量的输入。Go 还有其他优势,例如良好的生态系统、内存安全性、易于学习......

然后,为了连接到构成 devp2p 的不同协议,我必须在两个选项之间进行选择:

  • 自己实现 devp2p 规范,以便连接到以太坊网络。
  • 使用并编辑 devp2p 的现有实现。

出于时间原因,我决定选择第二个选项:

我选择使用 Geth 项目。 为什么选择 geth?原因有几个:

  • Geth 是 Go 中以太坊的实现,这与我选择用于开发模糊器的语言相同。这将允许我使用单一语言。
  • Geth 速度快且非常高效;它将允许我使用模糊器进行 spam。
  • Geth 的文档非常详细。
  • Geth 受到以太坊社区的赞赏,并且有许多工具和项目可以帮助我完成此项目。

因此,一旦我通过修改 geth 源代码以发送自定义消息来正确集成 devp2p 实现,我就能够通过以太坊网络进行通信,并且能够开始集成我的模糊器。

对于模糊测试,有很多模糊测试技术;目标是确定最合适的、优先集成它们,然后使用最大数量的不同技术,以便获得最多的结果。

对于模糊测试,我将在私有网络上发送消息。这将允许我测试对模糊测试的反应,并可能检测 devp2p 上的问题或特定于节点的问题(例如:一条消息使使用 geth 的节点崩溃,但同一条消息对 reth 没有造成任何影响)。

路线图

在 EPF 剩余的 3 个月里,我是这样划分工作的:

第一个月:

第一个月将致力于开发自定义 geth 节点以与 devp2p 交互、研究各种 devp2p 协议的规范以及开发第一个模糊器。 目标是连接到以太坊网络并使用模糊器发送消息。

最后两个月:

最后两个月将致力于研究模糊器获得的结果,以确定哪些其他模糊测试技术可能有用。 以及开发额外的模糊器,包括更高级的模糊器。

可能的挑战

第一个挑战将是对 devp2p 以及节点之间交换的消息有很好的理解。 然后,正确集成和修改 Geth 的网络部分以发送恶意消息。

我可能遇到的第二个问题是通过模糊器找到安全漏洞。使用模糊器并不一定意味着可以找到漏洞和错误;这将取决于我开发好的模糊器并使用适当的技术来实现这一点。

为了克服这些问题,我打算投入自己并花时间开发这个项目。我打算每周投入 50 到 60 个小时。

项目目标

该项目的目标是通过在以太坊网络上发送恶意消息来为以太坊的安全性做出贡献。 为了找到潜在的安全漏洞或错误,并测试节点是否正确实施了 devp2p 和网络更新。

如果到 EPF 结束时,该工具正在运行并且可以在网络升级上运行模糊测试,则该项目将被认为是成功的。

EPF 的结束不一定会标志着此项目的结束;它将始终可用,并且始终可以接收贡献。 随着时间的推移,可能需要对项目进行更新,以使该工具在网络升级方面保持良好的工作状态。

就我个人而言,我的目标是为以太坊的安全性做出贡献,因此将来继续贡献可能会让我感兴趣。

合作者

研究员

导师

资源

  • 原文链接: github.com/eth-protocol-...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
eth-protocol-fellows
eth-protocol-fellows
江湖只有他的大名,没有他的介绍。