ETH硬分叉里的安全隐患
ETH对 PoS共识系统进行了升级,在一些团体的支持下,原来的 PoW机制 ETH硬分叉(以下简称 ETHW)得到了成功。然而,一些协议在设计之初并未考虑到可能出现的硬分叉问题,因此,相应的协议在 ETHW分叉链中会出现一些安全问题,而最大的威胁就是回放。
在硬分叉完成之后, ETHW主网中至少发生了2次使用回放机制的攻击,即 OmniBridge的回放攻击和 Polygon Bridge的回放。本文通过两起事件的实例,分析了回放攻击对分叉链造成的影响,并探讨了协议在这种攻击中应该采取的措施。
播放类型
首先,在进行分析前,我们要先了解回放攻击的种类,通常将回放攻击分为两种,一种是交易回放,另一种是签名回放。现在,让我们来谈谈这两种播放方式的不同之处
业务回放
所谓的交易重放就是把原来的一条链上的交易全部转移到一条目标链上,这是一种在交易层次上的回放,然后再进行一次交易。最有名的例子就是 Optimism上的 Wintermute攻击事件, OP Token超过2000万。但在执行 EIP 155之后,交易自身就不能完成再现,因为该事务的签名自身具有 chainId (chainId),这是为了将该链接自身与其它分叉链区分开来。
签名邮件回放
签署信息回放与事务回放不同,它是用私人密钥签署的报文(e. g. Cobo is the best)所做的回放,在这个过程中,攻击者无需重新播放全部的交易,而是直接播放签署的信息。在邮件签名方面,就拿 Cobois the best来说吧,因为这个消息没有包含与链路有关的特别的参数,因此这个消息在签名之后,理论上是可以被验证的。为了防止在分叉上播放这个消息,你可以将 chainId加入到邮件内容中,比如 Cobo是 best+ chainId ()。在使用了一个特殊的链识别码后,不同的分叉链路上的报文内容会发生变化,并且信息的特征也会发生变化,所以不能进行直接的回放和复用。
奥尼桥和多棱桥的攻击原则
接下来,我们将对 OmniBridge和 Polygon Bridge进行分析。首先得出的结论是,这两次攻击都不属于交易回溯,因为 ETHW所用的 chainId与 ETH的主要网络不同,因此不能通过直接播放交易。接下来,我们将会逐一分析这些消息在 ETHW分叉链上的回放中的每一个。
OmniBridge
OmniBridge是一种用于在 xDAI与 ETH主网间的资源转移的桥梁,它主要通过赖桥上的指定 validator来提交跨链信息来实现跨链资产的传递。在 OmniBridge中,验证消息的逻辑如下
在此功能中,先从#L2行的签名检验判断是否已被指定的 validator签署,然后在#L11行中对 data消息进行译码。通过解码的内容,不难看出,在返回字段中,含有 chainId字段,这是否意味着不能重新播放一个签名信息?我们接着来看。
通过对函数逻辑的进一步分析,不难看出,对于 chainId的检查并不是用 evm的 chainId操作代码,而是用 uintStorage变量中的一个数值,显然是由管理员设置的,也就是说,这条消息没有任何链接标识,理论上是可以播放的。
因为在硬分叉阶段,所有的分叉状态都会保持在两个链子上,而 xDAI小组并没有进行更多的处理。ETHW和 ETH主网 Omni Bridge合同在分叉后的状态不会改变,也就意味着合同的价值不会改变。从这个例子可以看出,在主网中, validator的签名同样可以通过 ETHW进行认证。然后,因为签名信息自身没有 chainID,所以攻击者可以使用签名回放来从 ETHW中获取相同的资源。