发布Attacknet:基于混沌测试的区块链节点漏洞挖掘新工具
今天,Trail of Bits发布了Attacknet,这是一款与传统运行时验证工具相比具有突破性的新工具,由我们与以太坊基金会合作开发。Attacknet旨在通过让执行和共识客户端面临最具挑战性的网络条件,增强EF当前的测试方法。
区块链节点必须达到最高级别的安全保障。历史上,实现这一目标的主要工具包括详尽的规范说明、测试、客户端多样性、手动审计和测试网络。虽然这些工具传统上表现良好,但它们共同存在严重局限性,可能导致关键漏洞在生产环境中显现,例如2023年5月以太坊主网发生的最终性事件。Attacknet通过让开发网络承受比传统测试网络更广泛的网络条件和错误配置来解决这些局限性。
Attacknet工作原理
Attacknet使用混沌工程,这是一种主动向生产环境注入故障以验证系统对特定故障容忍度的测试方法。这些故障重现了真实世界的问题场景和错误配置,并可用于创建极端场景来测试区块链的边界条件。
Attacknet使用Chaos Mesh向Kurtosis生成的开发网络环境注入故障。通过在Kurtosis和Chaos Mesh之上构建,Attacknet可以创建各种网络拓扑结构,结合不同类型的故障集合,将区块链网络推向最极端的边缘情况。
部分故障类型包括:
- 时钟偏移:将节点的时钟向前或向后偏移特定持续时间。Trail of Bits曾使用时钟偏移故障重现了以太坊最终性事件,如我们去年的TrustX演讲所述
- 网络延迟:将节点与网络的连接(或其相应的EL/CL客户端)延迟一定时间。此故障有助于重现全局延迟条件,或帮助检测区块链共识中无意的同步假设
- 网络分区:将网络分割为两个或多个无法相互通信的段。此故障可以测试网络的分叉选择规则、重组能力和其他边缘情况
- 网络数据包丢弃/损坏:丢弃gossip数据包或将其内容损坏一定比例。此故障可以测试节点的gossip验证功能,以及网络在敌对网络条件下的稳健性
- 强制节点崩溃/离线:非正常关闭特定客户端或类型客户端。此故障可以测试网络对验证器不活动的恢复能力,以及客户端重新同步到网络的能力
- I/O磁盘故障/延迟:对节点进行的所有I/O操作施加一定延迟或错误率。此故障有助于分析节点以了解其资源需求,因为I/O通常是节点性能的最大限制因素
故障结束后,Attacknet对网络中的每个节点执行一系列健康检查,以验证它们是否能够从故障中恢复。如果所有节点都从故障中恢复,Attacknet将继续执行下一个配置的故障。如果一个或多个节点健康检查失败,Attacknet将生成日志和测试信息工件以进行调试。
未来工作
在此首次发布中,Attacknet支持两种运行模式:一种具有手动配置的网络拓扑和故障参数,另一种是"规划器模式",该模式针对特定客户端运行一系列故障,拓扑参数定义较为宽松。未来,我们计划添加"探索模式",该模式将动态定义故障参数、注入故障并重复监控网络健康状况,类似于模糊测试器。
Attacknet目前正用于测试Dencun硬分叉,并定期更新以提高覆盖率、性能和调试用户体验。然而,Attacknet不是以太坊专用工具,其设计具有模块化特性,可轻松扩展以支持具有完全不同设计和拓扑的其他类型链。未来,我们计划扩展Attacknet以针对其他链,包括其他类型的区块链系统,如L2。
如果您有兴趣将Attacknet集成到您的链/L2测试流程中,请与我们联系。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码