矿池一直是确保多种PoW加密货币安全的重点。在Stratum协议下矿池允许矿工合作,发现新的区块,并共同赚取奖励。最近区块链社区一直在推动更安全的Stratum协议Stratum V2的采用。
本文介绍了EROSION,一种适用于Stratum和V2协议的新型网络层攻击。EROSION攻击的本质在于它能够破坏矿工与目标矿池之间的连接,显著损害矿工贡献的工作量证明,并降低攻击目标的挖矿算力。具体来说,发现了Stratum V2协议中的一个漏洞,其允许攻击者通过篡改单个数据包来持续破坏连接,增强了攻击的隐蔽性。EROSION可以轻易地攻击 Top 10 加密货币中的绝大多数挖矿池(91%)都。此外,还观察到了极端的集中化挖矿,这使得EROSION攻击者能够同时针对多个矿池和加密货币。最后,针对比特币的矿池挖矿进行了重点评估,结果显示数千个不同的攻击者可以控制绝大多数比特币的挖矿算力,而一个潜在的恶意自治系统甚至能够占据96%的总挖矿算力。
比特币和其他各种加密货币利用工作证明(PoW)共识算法作为其区块链系统的基石。PoW区块链涉及专门的参与者,称为矿工,他们参与挖矿过程—即向新区块添加随机数据,直到其哈希满足预定义的标准,这通常需要特定数量的前导零。一旦矿工发现新区块,他们通过点对点(P2P)网络向其他参与者广播这些区块作为已完成工作的证据,并获得新生成的加密货币的奖励。
随着区块链系统所监督的利益不断增加,近年来已成为越来越受攻击的吸引目标。现有的攻击已经证明比特币的P2P网络可以被分区,以至于节点无法与其他分区中的节点交换区块链数据(例如,交易、区块)。在这些分区攻击中,攻击者通常针对挖矿节点,通过阻止它们与最新的区块链状态同步,浪费它们挖掘的区块和相应的奖励。此外,通过破坏目标区块链系统的挖矿能力,这些攻击使其共识变得不可靠,并且可能导致严重的后续利用,例如自私挖矿和51%攻击。攻击者还可能有动机攻击加密货币以破坏其声誉,从而利用另类途径,例如空头销售来获取利润。
针对区块链系统的大规模攻击通常涉及网络层的攻击者,例如恶意自治系统(AS)。特别是,这些恶意的AS破坏了自然截获的P2P连接,或者通过对其前缀发动边界网关协议(BGP)劫持来有意地吸引流量到目标P2P节点 ,从而有效地同时针对多个P2P节点。处理这些网络层级攻击是具有挑战性的,当攻击者破坏它们已经截获的连接时,定位这些干扰并进行溯源很困难。当需要前缀劫持时,攻击者可以通过策略性地规避BGP监视器来最小化攻击暴露。网络层攻击已经成为区块链系统及其他领域(例如,联邦学习、Tor和公钥基础设施)中一个令人担忧的威胁。。
然而,先前针对区块链的网络攻击在针对P2P节点时存在几个限制。首先,攻击者只能针对具有公共IP地址的节点(例如可访问的比特币节点),这通常只占P2P网络的少数。近年来,随着P2P节点越来越多地隐藏其地址,攻击表面进一步减小,例如,几乎三分之二的可达比特币节点现在只能通过Tor访问。其次,由于区块链P2P网络的分布式特性,攻击者通常需要巨大的互联网拓扑优势(Tier-1或大型Tier-2 AS)或同时劫持大量前缀(例如,80个前缀托管了50%的比特币节点)。因此,只有少数AS能够发动这些攻击,这可能无法持续足够长的时间。第三,目前没有可靠的方法来识别具有挖矿能力的P2P节点,这些是主要的攻击目标。特别是用于识别挖矿节点的侧信道攻击已经被修补,而假设挖矿节点比其他P2P节点更早传播其区块已被证明容易出错。简而言之,针对P2P节点以破坏区块链协议似乎是不切实际的。
挖矿池已成为许多区块链的关键基础,几乎占据了它们所有新区块的产生。例如,已知的挖矿池产生了近99%的最近比特币区块。挖矿池是协作群体,其中矿工结合其算力以增加挖矿成功的机会,并比单独挖矿更频繁地获得奖励。默认情况下,大多数挖矿池使用Stratum协议,其中池操作员(或简称池)协调参与矿工之间的挖矿任务。虽然挖矿池不会公开其P2P节点的IP地址,但它们通常维护一些公开可访问的Stratum服务器,以便全球矿工可以轻松连接到它们。出于同样的原因,矿池通常将它们的名称附加到它们找到的区块上,向攻击者揭示他们矿工的集体算力。
本文提出了EROSION攻击,允许网络攻击者削减一个或多个挖矿池的哈希算力。EROSION攻击涉及网络攻击者识别目标挖矿池的Stratum服务器,拦截这些服务器的挖矿连接,并损害通过这些连接提交的矿工的工作。在下图中举例说明了EROSION攻击的示例。与针对攻击目标的的P2P节点不同,EROSION攻击者直接干扰攻击目标的挖矿池服务器之间的连接(例如托管在AS V中的服务器)和其参与矿工之间的连接。在这个示例中,恶意AS通过操纵已经自然拦截的连接上的数据包(例如,来自AS A和C的矿工)或者在执行BGP劫持攻击后吸引的连接(例如,来自B的矿工)来浪费矿工的哈希算力。
EROSION攻击适用于Stratum协议的主流版本V1以及即将到来的V2协议。在过去的十年里,大多数挖矿池都默认使用V1协议,尽管它在矿池和矿工的通信中缺乏加密。Stratum V1协议的这种固有漏洞使得挖矿池容易受到网络攻击,并成为将其替换为Stratum V2的主要动机。要破坏运行Stratum V1协议的矿池,攻击者会丢弃拦截到的矿池和矿工连接中的所有数据包。关于Stratum V2协议,本研究发现了其密码学协议规范中的一个漏洞,使得EROSION攻击者可以通过篡改单个数据包来导致相同的持续中断。随后,这个新的漏洞使得EROSION攻击更具隐秘性,因为数据包不会被丢弃,并且更加可持续,因为不需要维护流量拦截。
EROSION攻击尽管简单,但在矿池中证明具有极高的破坏性。在前十大加密货币中,高达91%(即55个中的50个)的挖矿池容易受到EROSION攻击的影响。此外,少数几个挖矿池和相应的托管它们的AS哈希算力集中度非常高。例如,单个AS托管了八个不同的挖矿池,在四种加密货币中占据了超过50%的哈希率。这种多级集中化为大规模攻击奠定了基础,EROSION攻击者可以同时破坏多个挖矿池和加密货币。在对比特币挖矿池攻击效果进行的广泛评估中,几乎总会有至少一个潜在的恶意AS能够浪费每个挖矿池超过一半的哈希算力,而几乎所有的挖矿池都可以被几乎所有的AS完全摧毁。此外,确定了超过1300个不同的AS,只要通过对挖矿池进行BGP劫持,可以单独控制比特币大部分的哈希算力。更令人担忧的是,一个潜在的恶意AS可以破坏高达96%的整个比特币网络的哈希率。
区块链是一种分布式账本技术,记录加密货币交易(例如比特币)在P2P网络中的多个节点之间的交易。它由密码学链接的区块组成,每个区块包含确认的交易。特定的参与者,通常称为矿工,周期性地被选中来扩展区块链,从而获得新创建的加密货币和交易费用的奖励。
在像比特币这样的加密货币中,矿工被选为PoW共识下的区块创建者。具体来说,他们通过重复对新区块的数据进行哈希运算(使用SHA-256)来竞争解决一个密码学难题。这个难题要求找到具有特定属性的哈希值,例如特定数量的前导零,表明其难度。此外,这个难题的难度定期调整,以保持一个稳定的区块生成速率(比特币中大约是10分钟)。这个难度通常用哈希率来衡量,表示区块链网络的计算能力,即每秒计算的哈希数。当一个矿工找到一个有效的解(即,一个新区块),他们会将其广播到P2P网络作为工作证明。其他参与者然后验证新区块,并将其添加到他们的区块链副本中,如果它被认为是有效的。
随着矿工的哈希率增加和区块时间保持一致,池式挖矿的概念应运而生,导致生成新区块的难度显著上升,例如,在过去的十年中,创建一个新的比特币区块的难度已经增加了1600万倍。因此,矿工可能会经历长时间而无法独自找到一个区块,最强大的挖矿设备大约需要八年的时间才能挖出一个比特币。为了减少这种高奖励差异,矿工参与到挖矿池中,共同创建新的区块并分享奖励。池中的矿工计算哈希以解决子难题,并将部分解决方案(即份额)提交给池。当一个矿工的份额导致一个有效的区块解决方案时,所有参与者根据他们对池的哈希率贡献或提交的份额数量,分享区块奖励。池式挖矿有助于减少奖励的差异,因为池比单独的矿工更频繁地发现区块。
Stratum V1是一种广泛使用的基于PoW的加密货币的池式挖矿协议,旨在促进矿工与其挖矿池之间的高效通信。在下图中说明了在Stratum协议下的池式挖矿的工作原理。具体来说,挖矿池包括一个或多个服务器和一个连接到P2P网络的网关节点。挖矿池通常公开接受新参与矿工的订阅连接;见步骤1。一旦矿工被授权,池服务器会向矿工发送一个挖矿任务,提供详细信息,如包含未确认交易的区块模板以及寻找有效区块解决方案的目标难度;见步骤2和3。收到挖矿任务后,矿工开始执行所需的计算。然后,矿工将满足目标难度的所有解决方案发送回池(步骤4),池服务器验证它们是否也满足网络难度以成为新的区块(步骤5)。虽然不是Stratum协议的一部分,但池服务器通常根据矿工的计算能力调整挖矿任务的难度(即通过VarDiff算法)。这种做法确保了矿工的份额提交与挖矿池中所需的服务器负载保持一致(例如,每隔几秒钟收到一个份额)。
然而,Stratum V1协议最初设计时并未考虑安全性,因为它最初仅用于矿工的本地网络通信(例如,一个挖矿农场)。随着挖矿池开始全球范围内积累矿工的算力以获得更好的收益,未加密的挖矿流量经过互联网传输,恶意的网络攻击者可以发动危险攻击。为了解决这些安全问题,区块链社区最近开发了Stratum V2,即该协议的下一代。Stratum V2包括加密和认证机制,增强了矿工和挖矿池之间的通信安全性。因此,它防止了中间人攻击,并确保双方可以验证彼此的身份。
假设一个网络攻击者,其目标是降低挖掘特定加密货币的受害矿池的算力。具体而言,考虑攻击者控制一个称为恶意AS的单个自治系统。这个恶意的AS可以检查和操纵通过其网络传递的数据包(例如,篡改、丢弃或延迟它们)。攻击者还可以发动主动路由攻击,例如通过BGP操纵劫持IP前缀。攻击者还可以建立一个新的AS,并在几千美元的费用下从其他ISP购买过境服务。攻击者的主要目标是削减目标矿池的所有挖矿算力。在更大的范围内,攻击者还可能旨在通过攻击一个或多个矿池来降低网络的哈希率,即整个区块链网络的累积计算能力。此外,攻击者还可以同时针对多个区块链发动攻击。
现在对攻击范围做出一些现实的假设。首先,攻击者仅针对为工作量证明(PoW)区块链生成新区块的挖矿池进行攻击。排除了在不同共识机制下运行的挖矿池(例如PoS区块链中的权益池),因为它们可能不会通过互联网直接与参与的挖矿者进行交互。
其次,为简单起见,假设受害挖矿池使用的是Stratum V2协议,尽管该协议仍在积极开发中,尚未被广泛采用。请注意,EROSION攻击也适用于Stratum V1协议,遵循相同的步骤,尽管在操作拦截的数据包时略有差异。一些早于Stratum的PoW挖矿协议已经不再使用,因此不在攻击范围内。不常使用的P2Pool挖矿协议对攻击是无效的,因为它不是在客户端-服务器范式下运行,而是在独立的挖矿者P2P网络中运行。
第三,EROSION攻击不适用于隐藏其身份并限制矿工加入的私人挖矿池,这些挖矿池仅控制网络算力的微不足道的部分,因此将它们忽略。
步骤I:识别受害矿池的服务器。在这个侦察步骤中,攻击者的目标是识别目标攻击目标的的所有Stratum服务器,以及它们的IP地址、前缀和托管它们的AS。如下图所示,攻击者可以利用多个信息来源来提取攻击目标的