2024-11-08
揭示区块链P2P层中的DoS攻击威胁
内容
- 介绍
- 了解区块链中的 P2P 层
- 为什么区块链中的 P2P 层安全性很重要?
- 存在哪些类型的 DoS 攻击?
- 结论:针对 P2P 层的 DoS 攻击是真正的威胁吗?
概括
- 区块链的P2P层在分布式网络中保持高度可靠的连接性方面发挥着至关重要的作用,通过建立节点之间连接和通信的规则来实现其功能。P2P层的关键特性包括节点发现、节点连接和数据传播。
- 相比于智能合约漏洞或共识机制失败等威胁,P2P层的安全性往往不为人知并且容易被忽视。然而,如果P2P层被攻破,像双重支付和自私挖矿等严重攻击可以用较少的资源实施。
- 像“日蚀攻击”和“厄瑞波斯攻击”这样的攻击手法是通过学术研究提出的,旨在改进区块链P2P层的防护措施,特别是抵御DoS攻击。尽管在比特币和以太坊等主流区块链上进行了大量的安全研究,但较小的新兴区块链往往缺乏有效的防护措施,导致实际中发生了损害。因此,P2P层的安全性需要引起更多的关注。
1. 简介
随着区块链技术的不断发展,其生态系统面临的安全威胁也在不断增加。虽然钱包黑客和智能合约漏洞等安全问题往往是人们最关心的问题,但一种更为隐蔽的威胁也引起了人们的关注:区块链网络上的拒绝服务 (DoS)。对于那些密切关注区块链行业近期事件的人来说,很明显,这些类型的威胁可能会导致严重且长时间的网络中断(或安全问题),从而破坏整个系统。
典型的 DoS 攻击发生在系统、服务器或网络因过多的流量或资源请求而无法承受时,导致其无法处理合法的用户交互并有效运行。此时,有人可能会问:“区块链网络不是为解决单点故障 (SPOF) 问题而设计的,就像分布式系统一样吗?”与传统的客户端-服务器模型不同,如果集中式服务器发生故障,网络中断是不可避免的,而像区块链这样的点对点 (P2P) 网络则遵循每个参与者既充当服务器又充当客户端的原则。如果一个对等点发生故障,只需从另一个对等点与网络同步即可。那么,这种分散的系统怎么还会容易受到 DoS 攻击呢?
虽然去中心化提供了弹性,但它并不能使网络免受所有类型的 DoS 漏洞的影响,尤其是那些源于网络拥塞和资源耗尽的漏洞。随着区块链系统的发展变得更加去中心化并包含各种组件以满足各种需求,出现了一个悖论:增强功能的复杂性也引入了更多的故障点(即攻击媒介)。如今,区块链生态系统中 DoS 攻击的目标范围很广,包括加密钱包、中心化交易所 (CEX)、内存池、采矿池、支付渠道、智能合约,甚至共识参与者。
在本报告中,我们将从 P2P 层的角度特别关注针对区块链共识参与者的 DoS 攻击。在第 2 节介绍区块链中 P2P 层的基础知识之后,第 3 节将解释为什么 P2P 层的安全性至关重要。然后,在第 4 节中,我们将讨论针对 P2P 层开发的各种类型的 DoS 攻击,最后,在第 5 节中,我们将讨论这些威胁实际上有多么切实。
2. 理解区块链中的 P2P 层
区块链系统需要保持分布式节点之间高度可靠的网络连接,即使在面临重大网络攻击或故障的情况下也是如此。在这里,P2P 层在支持这一点方面发挥着至关重要的作用,它建立了节点之间连接和通信的规则,确保系统保持稳定和弹性。P2P 层执行各种任务,但在这里我们将重点关注它的三个关键属性:节点发现、节点连接和数据传播。
节点发现
如果 Bob 刚刚加入一个无需许可的区块链网络,他需要做的第一件事就是找到一个新朋友(即对等节点)来连接和同步。但是,由于 Bob 身处新环境,他应该小心不要与恶意节点成为朋友,因此他必须首先连接到一些知名或预定义的节点,以了解网络中的合法对等节点。
在比特币中,节点发现始于使用DNS 种子程序,这些预定义服务器为加入网络的新客户端提供活动节点列表。当比特币节点启动时,它首先查询这些 DNS 种子程序,这些种子程序返回一组已知节点的 IP 地址。此初始对等列表存储在每个节点的对等数据库中,称为“对等表”,并允许新节点(如 Bob)选择并在它们之间建立最多10 个传出连接。连接后,Bob 可以开始参与网络(即下载区块链、验证区块和交易)。
比特币的节点发现协议通过在网络上传播对等地址来帮助 Bob 维护和更新对等表,并允许他在现有连接终止时建立新的传出连接。此外,Bob 的 IP 地址也会在整个网络中传播,从而允许来自其他节点的最多 114 个入站连接。因此,得益于节点发现协议,Bob 总共可以建立最多 125 个对等连接。(*10 个传出连接 + 114 个入站连接 = 124 个连接,为什么总共 125 个?对于那些对此感到好奇的人,请查看触角连接)
图 1:比特币的节点发现协议
(来源:Presto Research)
以太坊使用基于 Kademlia DHT 的协议,采用更结构化的方法进行节点发现。与比特币类似,当新的以太坊节点加入时,它使用启动节点开始发现其他节点。从那里,它查询这些节点,了解网络中的其他节点,并相应地填充其路由表。在以太坊的网络中,每个节点都有一个唯一的节点 ID,该 ID 源自其公钥,并映射到一个 256 位的大空间中。以太坊中的节点发现依赖于这个 ID 空间,其中节点维护路由表,其中填充了 ID 上“接近”(即 XOR 距离)的其他节点。
节点连接
鲍勃找到朋友后,他现在需要决定是否要维持这些友谊。他可能会重新考虑是否继续与那些行为不端的朋友保持友谊,或者决定与一些老朋友分道扬镳,为新朋友腾出空间。
在比特币中,当节点检测到有害行为(例如发送无效区块、向网络发送冗余数据或违反共识规则)时,它会为违规对等方分配一个惩罚分数。分数是根据不当行为的严重程度分配的,根据违规程度,可获得10、20 甚至 100 分。如果分数超过预定义阈值(即 100),节点会自动禁止对等方,在一定时间内(即 24 小时)阻止与其进行任何进一步通信。在此禁令期间,节点拒绝来自违规对等方的连接和消息。
当尝试向连接槽已满的节点发起新的入站连接时,节点连接协议也会发挥作用。在这种情况下,比特币会运行其对等驱逐机制 - 每个节点根据几条规则(即最近发送的交易和区块)对其现有连接进行优先排序,然后驱逐优先级最低的连接以腾出空间给新连接。以太坊目前没有在其客户端实现中部署对等驱逐机制。
图 2:比特币的节点连接管理
(来源:Presto Research)
数据传播
通过节点发现和节点连接协议实现可靠的网络连接后,现在是时候在网络上传播数据(即区块和交易)了。但是,此过程还需要精心设计协议。如果以一种简单的方法,区块链网络中的每个节点在收到新区块或交易后立即将其广播给所有连接的对等节点,则网络将充斥着同一交易的冗余副本。对等节点将从不同节点多次收到同一交易,这可能导致严重的网络拥塞和资源耗尽。
事情还没完。这种方法还可能威胁到交易隐私。虽然区块浏览器允许我们查看哪些地址向其他人发送资产以及金额,但现实世界的身份(如 IP 地址)仍然隐藏(它们应该是隐藏的)。但是,如果交易立即传播到所有对等点而没有任何延迟,那么装备许多节点的攻击者可能会推断出谁首先创建并广播了特定的交易。由于节点知道其连接的对等点的 IP 地址,这可能会危及交易隐私。
出于这些原因,每个区块链网络都实施了自己的数据传播协议,称为交易扩散过程。在比特币的情况下,每个节点都以独立的随机延迟向其对等节点广播数据(它们有新信息:INV 消息)。对于入站连接,节点会生成平均 5 秒的随机延迟,而对于传出连接,延迟平均为 2 秒。对于以太坊,节点会无延迟地将新学到的交易广播到其邻居对等节点的子集 (sqrt(n)),并将交易哈希发送给其余节点。
图 3:比特币和以太坊中的数据传播
(来源:Presto Research)
它与共识层的区别
说到这儿,有些人可能会想:“那么,区块链中的 P2P 层处理节点之间的通信。但共识层似乎也涉及节点之间的大量通信以达成协议。那么,这两者有何不同?”
举一个简单的比喻来理解两者之间的区别,想象一下一群朋友试图决定一起看哪部电影。P2P层 就像他们用来交流的方法。也许他们在同一个房间里聊天,或者他们在使用群聊或视频通话。这一层 确保每个人都可以发送和接收消息,这样小组就可以听到彼此的电影建议和回应。它处理信息如何从一个人传递到另一个人,确保每个人都保持联系。
另一方面,共识层就像他们为就一部电影达成一致而遵循的决策过程。假设他们都必须对选项进行投票,得票最多的电影获胜。这一层确保他们所有人都做出一个决定,避免混淆,就像两个不同的小组同时观看不同的电影一样。这是他们用来确保每个人最终都同意相同结果的系统或规则。
简单来说,P2P 层是节点之间的连接(通信),而共识层是就决策达成一致(决策规则)。两者对于群体决定一部电影都至关重要,就像它们对于区块链的正常运作一样。
图 4:P2P 层与共识层的区别
(来源:Presto Research)
3. 为什么区块链中的 P2P 层安全性很重要?
现在的下一个问题是,为什么我们必须了解 P2P 层的这些细节,以及为什么在区块链中保护它很重要?让我们快速回顾一下上一节中讨论的内容:节点发现找到要连接和同步的合法节点,节点连接保持健康的连接,数据传播过程在整个网络中广播交易。如果所有这些都无法正常运行(或受到攻击)怎么办?
图5:如果P2P层不能正常运作会发生什么?
(来源:Presto Research)
如果节点发现无法正常工作,像 Bob 这样的新节点可能会在引导过程中遇到问题,并且更有可能连接到恶意或有故障的节点。如果节点连接失败,恶意连接无法终止,导致 Bob 被精心设计的区块和交易淹没。最后,如果数据传播中断,可能会导致整个网络同步不佳,增加分叉的风险或阻止节点与合法区块和交易同步。
总体而言,如果 P2P 层无法正常运行,则会导致单个(或一组)网络参与者与合法网络的其余部分隔离(孤立)。受害者的连接将被故障连接垄断,错误信息将不断流入他们,并且由于同步性较弱(拒绝服务),他们重新与规范链对齐的机会较少。
这种分裂状态的真正危险在于,分裂的受害者更容易受到额外的攻击,例如双重支付攻击。双重支付攻击最初被认为是只有拥有大量资源的攻击者才能实施的攻击,例如 51% 攻击的情况。
例如,在发生 51% 攻击的情况下,攻击者可以先与商家(即受害者)进行合法交易,然后秘密构建一条不存在该交易的替代链。一旦攻击者的替代链超越旧链并成为规范链(因为它拥有大多数挖矿/投票权),他们就会将其广播到网络,导致网络接受其新版本为有效链。原始链上的先前交易随后失效,这意味着攻击者重新获得对已使用硬币的控制权,从而可以“双重支付”。这种攻击确实非常强大,但它被认为是一种不切实际的理论攻击,因为对于目前主流的 PoW 和 PoS 链而言,攻击者控制大部分挖矿权或投票权在经济上是不可行的。
但是,如果受害商家与网络的其他部分隔离,即使没有太多资源,双重支付攻击也会变得容易得多。由于受害者只连接到攻击者的节点,他们别无选择,只能接受攻击者提供的交易和区块作为合法交易。这允许攻击者两次使用他们的资产——一次用于受害者,一次用于网络的其他部分——而受害者没有意识到资产已经被花掉了。受害者相信精心设计的交易是有效的,交出货物并收到付款。然而,一旦隔离被解除,来自外部网络的合法交易和区块被恢复,与受害者的交易将变得无效,而发送到网络其他部分的交易仍然有效,导致受害者遭受经济损失(图 6)。
图 6:网络分区导致额外漏洞(例如双重支付)
(来源:Presto Research)
4. 存在哪些类型的 DoS 攻击?
在上一节中,我们解释了 P2P 层中的 DoS(即网络分区)是如何危险的,因为它可以实现双重支付等攻击,而无需大量资源,例如 51% 攻击所需的资源。然而,在实践中,将受害者与网络隔离并非易事:如果检测到可疑的连接尝试(例如,来自类似 IP 的 1K 次连接尝试),受害者也可以手动阻止这些恶意连接。因此,在本节中,我们将探讨学术界为以更隐蔽、更可行、更可持续的方式实现网络分区所做的努力。
连接匮乏攻击
P2P 层的 DoS 攻击通常被称为连接饥饿攻击。如上一节(图 6)所述,这种攻击通过占用所有可用的连接槽,有效地将一个或一组受害节点与网络的其余部分隔离开来。
针对区块链网络 P2P 层的连接匮乏攻击的概念最早由Eclipse Attack(E. Heilman 等人,USENIX' 15)提出。这种攻击的核心思想很简单:攻击者部署僵尸网络(即由攻击者控制的受感染计算机网络),并向具有不同 IP 的受害比特币节点发送大量连接尝试,从而占用受害者的所有连接槽并阻止其他合法比特币对等节点与受害节点建立新连接。除非攻击者释放自我强加的分区攻击,否则受害节点将无法与 P2P 网络的其余部分通信并保持孤立状态。受害受害者不仅遭受双重支付攻击等漏洞,还可能遭受交易审查:他们的交易可能会被周围的对手审查和丢弃。
图 7:连接饥饿攻击
(来源:Presto Research)
在Erebus 攻击(M. Tran 等,S&P' 20) 中,恶意自治系统 (AS)(可能是一级或二级互联网服务提供商)控制了受害节点的对等表,这些节点的 IP 地址受攻击者控制。因此,受害者发起的与这些 IP 的任何连接都将通过攻击者的 AS 路由,从而为其提供了作为中间人攻击者的优势。当目标的所有对等连接都通过攻击者的 AS 路由时,目标将被隔离。这种攻击的新颖之处在于其隐蔽性:由于攻击的有效载荷传输速率极低(520 bit/s),并且数据平面或控制平面中都没有路由操纵,因此 Erebus 攻击被视为一种很难被发现的隐蔽攻击。原始研究表明,受害者节点可能在攻击实施后的 5-6 周内被隔离。
SyncAttack(M. Saad 等人,CCS' 21)利用比特币的无权限特性将整个比特币网络分成两个独立的组。攻击者通过控制比特币 P2P 网络中当前存在的所有可访问节点的入站连接,同时用对手的 IP 淹没比特币 DNS 种子来实现这一点。结果,新加入的节点被迫只连接到敌对节点。因此,比特币 P2P 网络被分成两个不同的组:预先存在的节点组和新进入的节点组。
5.结论:针对 P2P 层的 DoS 攻击是真正的威胁吗?
至此,我们探讨了 P2P 层在区块链网络中的作用、其安全性为何如此重要,以及目前学术界在这方面开展的相关研究。从头关注这篇文章的朋友可能会想:“现在我明白了 P2P 层在区块链中扮演着重要的角色,而这一层的 DoS 攻击会对受害者造成严重的损害。但为什么我没有在新闻中听说过 P2P 层发生 DoS 攻击事件呢?这真的可行吗?”
这个观点很有道理。与针对区块链系统的其他类型的攻击相比,针对 P2P 层的 DoS 攻击确实发生得较少,也不太为人所知。此外,上述攻击通常假设攻击者相当强大(例如,僵尸网络、ISP 作为攻击者)。这也是因为这些连接匮乏攻击的目标通常是一小组节点而不是整个网络,因此与整个网络关闭的其他攻击情况相比,这些事件不太引人注目。
然而,现实生活中确实存在针对区块链 P2P 层的 DoS 攻击。2020 年,Monero 遭受了一次日蚀攻击,攻击者使用了大约 130 个 IP 地址,导致多个用户的交易延迟了几分钟。在 NDSS '23 上发表的Gethlighting Attack 论文表明,即使不需要使目标的所有对等连接都失效,也有可能对以太坊客户端发起 DoS 攻击。以太坊基金会承认了这一漏洞,并在 Geth 1.11.0 中发布了一个修补程序。这表明,P2P 层的连接饥饿攻击仍然是一个重大威胁,影响着当今大大小小的区块链网络。
尽管区块链系统的设计初衷是去中心化的,但到 2024 年,实际挑战已导致这些网络中出现了优先实体。如果这些实体成为 P2P 层 DoS 攻击的目标,从而破坏特定节点,其影响可能远远超出几分钟的交易中断或轻微的财务损失——它可能使整个系统处于危险之中。这使得继续研究 P2P 层 DoS 攻击的缓解策略至关重要,公众应该更加意识到解决这一问题的重要性。