重放攻击是什么?深入探讨区块链上的重放攻击

  • QuickNode
  • 发布于 2024-12-17 15:15
  • 阅读 53

本文详细介绍了以太坊及其他EVM链上的重放攻击,重点讲解了重放攻击的定义、如何发生以及防止的方法。提供了关于以太坊交易的工作机制、nonce和链ID的解释,分析了不同层级的重放攻击及其缓解策略,帮助读者理解如何保护智能合约免受重放攻击的影响。

概述

重放攻击在以太坊(以及其他EVM链)上已造成用户损失数百万美元,但仍然时常发生。在本指南中,我们将更深入地讲解什么是重放攻击以及其发生的方式。随后,我们将提供一些知识,帮助你更好地保护你的智能合约免受重放攻击。

你需要准备什么

  • 对以太坊和智能合约有基本的了解
  • 之前有过使用Solidity的经验(在这里获得经验)

你将会做什么

  • 回顾以太坊交易的内部工作机制
  • 了解重放攻击
  • 学习预防重放攻击的技术

以太坊上的交易

在深入了解重放攻击之前,让我们首先了解以太坊上的交易是如何工作的。在以太坊上有不同类型的交易(例如,type-0(传统)或type-2),但所有交易必须符合某些兼容标准,才能被节点接受并包含在待处理交易的mempool中。该签名交易通常必须在其有效负载中包含以下字段:tovaluegaspricedata(v, r, s)chainIdnonce。类型II交易包括新的气体字段,如maxFeePerGasmaxPriorityFeePerGas

这些字段共同组成一条签名交易有效负载,用一长串十六进制值表示,例如:

0xf86b80850ba43b7400825208947917bc33eea648809c285607579c9919fb864f8f8703baf82d03a0008025a0067940651530790861714b2e8fd8b080361d1ada048189000c07a66848afde46a069b041db7c29dbcc6becf42017ca7ac086b12bd53ec8ee494596f790fb6a0a69

现在,让我们重点关注这两个字段。

Nonce

Nonce是在生成签名交易时包含的一个顺序编号值,用于跟踪一个地址已发送的交易数量。这个交易计数器(即nonce)记录在以太坊的世界状态中,节点对其持有状态。

由于每个交易(即确认交易)都有一个唯一的nonce,这也导致了一个唯一的签名。这意味着恶意行为者无法重新广播你的有效签名交易(重放),因为它需要有一个不同的nonce。了解更多关于nonces的信息,请查看本指南:什么是Nonce?你在以太坊交易中的管理技巧

Chain ID

Chain ID用于指定交易所针对的区块链。这个值并不是每个交易的唯一值,而是每个区块链的唯一值(例如,以太坊、Optimism、Polygon)。例如,以太坊主网使用1,Optimism主网使用10,Polygon PoS使用137,等等。如果用户尝试在不是该chain ID所对应的网络上提交交易,节点将不会接受。这也是一种预防措施,恶意行为者无法将已执行的签名交易重新提交到另一个链上。

此特定保护措施因以太坊经典硬分叉而引入,EIP-155旨在防止以太坊与其分叉版本以太坊经典之间的重放攻击。还有一个network ID字段,它不用于交易验证,而是在网络层面上的节点通信中使用。

要了解更多关于以太坊交易的信息,请查看这个深入的指南:什么是以太坊交易。现在,请牢记这些信息,因为我们将深入探讨恶意行为者如何利用签名交易进行重放攻击。

什么是重放攻击?

在区块链的上下文中,高层次上讲,重放攻击涉及利用区块链级别或智能合约级别的签名交易。这种类型的漏洞最初是在区块链级别引入的,恶意行为者会将一个链上的有效签名交易拿去尝试在另一个区块链上重新提交,以达到不当目的。这种类型的攻击发生在区块链客户端(例如,geth、nethermind)或智能合约未实施适当的安全措施,导致有效交易再次被用于恶意目的时。

这是如何发生的?正如我们在“以太坊上的交易”部分讨论过的,交易由多个字段组成,包括接收地址、金额、gas价格、nonce、chain ID和签名。利用这些字段,可以生成有效的交易有效负载。然而,如果该签名交易没有得到妥善保护(即没有使用足够独特或随机的数据)或接受该交易的区块链客户端没有验证其是否未被使用,则该交易可能会再次被接受,从而导致潜在的未授权资金访问或数据状态操纵。

重要的是要认识到,重放攻击并不是区块链特有的,也在网络安全领域已有所了解。然而,在区块链的上下文中,我们将更深入探索当前的攻击向量:

区块链级别的重放攻击

恶意行为者可以从一个区块链复制并广播有效交易,寻求未授权访问资金或合约状态的操纵。这种类型的攻击利用不同链之间交易结构或签名的相似性,利用跨链交易验证的弱点。

缓解策略

  • 特定链签名:实施唯一的ID,如chainID,可以防止交易在另一条链上重放(EIP-155)
  • Nonce:在交易中结合nonce,以确保每个交易都是唯一的

智能合约级别的重放攻击

智能合约级别的重放攻击涉及利用同一链内部的漏洞。这通常发生在自定义签名机制的智能合约未安全地编写其逻辑时。为了防止这种情况,可以考虑实施类似于交易的机制,如nonce。或者,另一种方法是存储签名日志并拒绝重复使用的签名交易。

缓解策略

  • Nonce:实施每个账户交易历史的计数,拒绝任何带有已使用nonce的签名
  • 唯一智能合约标识符:哈希其他合同特定值,如合约地址或ABI,以确保相同的签名不能在不同的智能合约上被重放
  • 代码审计:寻求可靠审计公司的服务,以检查合约逻辑和签名方案

最后思考

重放攻击可能代价高昂;然而,凭借你刚刚学到的知识,你将更好地准备识别和防范重放攻击。

如果你有任何问题,请访问我们的Discord服务器或使用下面的表单提供反馈以获取帮助。通过关注我们的Twitter(@QuickNode)和Telegram公告频道,及时了解最新动态。

我们❤️反馈!

告诉我们如果你有任何反馈或新话题的请求。我们期待听到你的声音。

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

0 条评论

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