TendrilStaller:比特币块延迟攻击

阅读量    118932 |

分享到: QQ空间 新浪微博 微信 QQ facebook twitter

 

介绍了TendrilStaller,这是一种针对比特币对等网络的日蚀攻击。 TendrilStaller使攻击者能够将块传播到受害者的时间延迟10分钟。攻击者阻碍了受害者获取最新的区块链状态。仅需要一个比特币完整节点和两个轻量级节点即可执行攻击。轻量节点执行完整比特币节点功能的子集。该攻击利用了2016年4月引入的最新块传播协议。该协议规定一个比特币节点选择3个邻居,这些邻居可以主动发送新块。这些邻居是根据它们最近在快速提供块中的性能来选择的。攻击者通过使攻击节点比其他邻居更快地向受害者发送有效块,从而诱使受害者选择3个攻击节点。

为此,攻击者部署了一些轻量级的节点,以便攻击者本身更快地接收新的区块。然后,攻击者进行攻击,以延迟传播到受害者的信息块。在当前默认比特币协议之上实施攻击,在全球多个位置部署攻击节点,并随机选择受害者节点。根据攻击者和受害者之间的往返时间,可能会将50%-85%的块延迟给受害者。进一步表明,采用轻量级节点平均可使攻击概率平均提高/ 5%。最后,提出了几种缓解日食攻击的对策。

 

0x01 Introduction

截至2019年3月,比特币是使用最广泛的加密货币,流通的比特币超过/ 700万,市值达到760亿美元。比特币的基础技术区块链被认为可用于智能合约,医疗保健,供应链,审核系统和数据存储系统。

早期的作品分析了比特币的安全性和可靠性。 Nakamoto表明,如果一个参与方拥有超过51%的总挖矿能力,则比特币将被彻底破坏。自私挖矿使攻击者仅能指挥总采矿能力的33%以获得显着优势。双花攻击,扣块攻击和拒绝服务攻击都是利用比特币的弱点牟取暴利。这些研究大多数都假设大多数矿工几乎都可以立即使用比特币网络中的区块。

网络层面攻击针对比特币的点对点网络。网络层面攻击的受害者可能无法及时收到最新的区块链状态,从而导致他们将采矿能力浪费在陈旧的区块上。因此,攻击者可以获得更大的优势。 Heilman等人提出了对比特币对等网络的日蚀攻击[1]。攻击使攻击者将受害节点与网络的其余部分隔离开。攻击者需要控制大量IP地址并操作大量攻击节点。攻击节点不断启动与受害者的连接,并向受害者发送精心制作的addr消息。受害者的未来邻居表中将填充由攻击者控制的IP地址。受害者重新开始之后,所有邻居都将受到攻击者的控制,可能性很高。攻击者然后篡改发送给受害者的消息,以操纵其对区块链的看法。

Apostolaki等人提出了一种BGP劫持攻击[2],该攻击类似地导致比特币网络的划分,从而导致特定受害者的隔离。该攻击利用BGP劫持来拦截受害者节点的连接。自治系统(AS)级别的攻击者发送恶意路由公告。目的地为受害者或来自受害者的流量被发送到错误的位置。攻击者通过丢弃流量隔离受害节点。攻击者还可以通过操纵少量的比特币消息来延迟发送给受害者的信息。

以上两种攻击适合具有足够IP资源或网络带宽的AS级攻击者。成功攻击的成本可能很高。 [1]中的攻击要求攻击者操作大量具有不同公共IP地址的比特币节点。 [21]中的攻击要求攻击者接收并中继所有被劫持的AS(不仅是受害者节点)的互联网流量(不一定与比特币相关)。与[1,2]不同,本文攻击只需要3个比特币节点即可执行攻击。这些攻击节点不需要具有不同的公共IP地址。可以从防火墙后面的节点执行攻击。

Gervais等人[3]提出了一种块延迟攻击。攻击者可以在相当长的时间内延迟将块传播到特定节点,而不会引起网络分区。该攻击利用了历史块传播协议。比特币节点广播新区块的广播。当节点收到同一块的多个广播时,它仅向发送广播的第一个邻居请求该块。因此,[3]中的攻击节点试图成为最早向受害人发送新区块广播的节点。一旦受害者从攻击节点请求阻止,受害者就会暂时放弃向其他邻居请求相同阻止的请求。在攻击节点实际发送该区块之前,受害者将不会获得新的区块。 getdata请求的超时为20分钟。因此,攻击者可能会将向受害者提供新块的时间延迟20分钟。此攻击对运行版本高达vO.IO的比特币软件的受害节点有效。比特币已经发展了多年。已经采用了新的块传播协议,该协议使[3]中的攻击变得过时了。

新的块传播协议允许节点V选择最多3个高带宽(HB)模式邻居[4]。 HB邻居列表称为HB邻居(HBN)列表。 HB邻居不发送新区块的广播;取而代之的是,他们一收到V,便立即向V发送一个新的,未经请求的块。此更改减轻了原始攻击。即使攻击节点设法第一个将广播发送给V,然后延迟了对V的getdata请求的响应,V的非攻击HB邻居之一也可以稍后将块自动发送给V。尽管有A的延迟,V仍然收到该新块而没有明显的延迟。

上图显示了TendrilStaller的设置。将攻击节点定义为攻击者控制的节点,将非攻击节点定义为公共比特币网络中的所有其他节点。攻击者部署两种类型的攻击节点,即,完整攻击节点和轻型攻击节点。完整的攻击节点建立与受害者的连接并执行实际攻击。轻量级攻击节点以两种模式中的任何一种进行操作。在模式1下,轻量级攻击节点不会连接到受害者。它们充当完整攻击节点的代理,以更快地接收新块。在模式2中,轻量级攻击节点也参与了攻击。上图和下图描述了在模式I下运行的轻型攻击节点的攻击。

共有3个完整攻击节点,分别称为a1,a2和a3。攻击分为两个阶段。每个完全攻击节点都会启动到受害者节点V的连接。在阶段I中,攻击者诱使受害者选择所有3个完全攻击节点作为其HB邻居。节点V根据最近发送块规则选择其HB邻居。如果邻居向V发送了新的有效块,则V将该邻居添加到HBN列表中。如果已有3个HBN邻居,则最早的邻居将从HB列表中删除。 a1,a2和a3继续向受害者发送新的有效块,直到受害者的HBN列表由3个完整的攻击节点组成,如下图a和下图b所示。在阶段2中,完整攻击节点的行为与[3]中的攻击类似。由于在第2阶段中没有非攻击邻居向V发送未经请求的块,因此完整的攻击节点会延迟将块传播到受害者。

•介绍了TendrilStaller,这是一种阻止延迟攻击,可能会在相当长的时间内延迟将阻止块传播到受害者。实现了 https://github.comlkewangcmu/block_delay_attack 中发布的攻击代码。

•在公共比特币网络中验证攻击算法。证明在攻击过程中,可能有多达50-85%的块延迟给受害者。进一步表明,采用轻量级节点可使攻击概率平均提高15%。

•提出了一些缓解TendrilStaller的对策。表明这些对策可能会使块延迟攻击变得不可行。

 

0x02 Historical Mechanism of Block Propagation and Block Delay Attack

A.比特币

比特币实施了一个区块链协议来记录和序列化用户之间的交易。上图显示了每个块与上一个块的关系,每个块都包含前一个的哈希。通过找到令人满意的随机数,计算节点(或矿工)彼此竞争,成为第一个构建新区块的人。矿工通过点对点网络相互连接,通过该网络广播新建的区块。矿工然后独立验证区块并开始处理下一个区块。在本文的其余部分中,将矿工和节点互换使用。每个矿工都保留区块链的本地副本,称为矿工所感知的视图。由于区块传播延迟,矿工对区块链的看法可能不同。区块链的不同视图包含不同顺序的不同交易集。如果一个矿工没有及时收到最新的区块,其观点将与大多数矿工的观点不同。该矿工将浪费其采矿能力,即使该矿工成功地成功建造了一个新的区块,该区块也不会被其他矿工接受,并且不会对该区块给予任何奖励。

B.比特币对等网络

比特币节点通过TCP / IP相互连接。每个节点维护一个尝试过的新表来存储公共IP。尝试表存储节点最近建立连接的邻居的[P个地址。新表存储可能与之建立将来连接的节点的地址。当节点首次加入网络时,最初会使用DNS服务器的信息填充新表。节点还通过addr消息交换已知节点的P个地址,以定期更新其新表。当节点需要建立新连接时,它会从两个表中随机选择。在默认配置中,一个比特币节点从两个表中最多选择8个节点来建立连接,称为传出连接。一个节点还接受其他节点发起的连接,称为传入连接。一个节点总共可以有125个连接。

C.矿池

成为第一个开采块的人的可能性很小。单个矿工的收益是惊人的。因此,矿工组成了矿池。池的成员不与池外的节点建立连接。相反,它们仅从池管理器接收信息。采矿池部署了多个池网关节点,以将采矿池与公共比特币网络连接。已知池网关节点比默认节点具有更多的连接,因为它们必须确保挖掘池的低延迟中继块和事务。

D.历史块中继模型

比特币协议实现了各种方法来最小化带宽消耗。首先,比特币采用如上图所示的基于广播的块中继机制。当节点cfl通过挖掘新块本身或从其邻居那里接收到一个新块来获知新块时,它会向其其他邻居广播inv消息,以便宣布新块的存在。对于邻居N,如果它还没有该块,则将getdata消息发送到cA以请求该块。然后,节点cA用实际块响应N。与在接收到新块后直接发送新块相比,通告优先方法减少了邻居已经拥有的块的冗余块传输。一个块可以大到1MB,而inv消息仅包含40字节块的哈希。其次,节点仅响应其收到的第一个广播。它暂时停止从其他邻居请求相同的块,直到先前的getdata请求超时。这样可以节省邻居的出站带宽。最后,比特币对getdata请求采用20分钟的超时时间(现在减少到10分钟)。比特币节点配备了不同的网络带宽。出站带宽有限的节点需要更长的时间来传输块。在网络或网络拥塞较慢的情况下,较长的超时可以避免不必要的块重传。

E.原始块延迟攻击

块延迟攻击如下进行。攻击者cA首先设法成为向受害人V发送块B(inv消息)的广播的第一个节点。攻击节点实现了两种方法,以便第一个发送广播。

•首先,攻击节点比默认的比特币节点建立更多的连接。更多的连接使攻击节点可以在挖掘新块时更快地了解它。

•其次,攻击节点在收到新块后立即对其进行公告,而无需验证其正确性。

默认的比特币节点在向邻居宣布新区块之前会对其进行完全验证。验证可防止在网络中传播格式错误的块。验证过程涉及一系列步骤,并且需要花费大量时间。它检查该块是否包含正确的工作量证明,是否正确设置了该块的挖掘难度等等。对于该块中的每个事务,验证还检查事务格式是否正确以及事务的所有输入是否有效,未花费的事务输出(UTxO)。在Amazon EC2双核实例上,验证平均需要174毫秒。绕过验证过程平均可使攻击者获得174毫秒的优势。

如果攻击节点成功成为第一个发送inv消息的节点,则受害人V然后向A发送一个getdata请求,并暂时阻止其他邻居请求B。攻击者A在收到受害者的getdata消息后等待了足够长的时间。 getdata请求的超时通常为20分钟。攻击者可以将对受害者的阻止交付延迟至少20分钟。平均而言,每10分钟开采一次区块。到受害者收到块时,它会比最长链条落后2个块。

 

0x03 New Model of Block Propagation

比特币协议已经发展了多年。新的块传播协议已被采用,以使网络更具可扩展性,感兴趣的是四项新措施。

A.新措施1:直接块头公告

由于20 IS中的v0.1 0.0版本,节点仅在收到该块的有效头后才请求该块。收到inv消息后,节点N首先发送agetheaders消息以请求该块的头。 N接收并验证头消息后,它发送getdata请求。有效的头消息应包含具有正确工作量证明并构建在当前区块链之上的块头。以前的1.5往返时间(RTT)增加到2.5 RTT。为了减少传播延迟,从v0.12.0版本开始,建议直接头声明并将其添加到比特币协议中。如上图所示,节点A在获知新块时会直接发送头消息。与以前一样,往返时间减少到1.5 RTT。

B.新措施2:紧凑块中继

对于在邻居之前收到一个块的节点,块中继会导致明显的出站带宽峰值。一个节点接收到比其邻居更早的块需要多次发送新块,一次发送给每个邻居。这样的带宽尖峰延迟了块的传输。结合一个节点一次仅向一个邻居请求同一块的事实,块传播时间将增加。

提出紧凑块中继以节省带宽,高达1 MB的完整块包含一个80字节的头和一个事务列表。这些大多数事务在块传播之前已经可供其他节点使用。代替发送完整的块,节点可以发送该块的精简版。紧凑块由块头,交易ID列表和一小部分预填充交易组成。

•块头包含80个字节,与常规块相同。

•交易ID是交易的哈希值。当接收到一个紧凑块时,接收者应该从接收者自己的内存中事务表中查找实际事务。

•预设交易是常规交易。构造紧凑块时,如果发送方认为接收方未看到某些交易,则发送方会将实际交易放入紧凑块中,而不是交易哈希中。

紧凑块中继的目的是发送最少的数据,同时为接收器提供足够的信息以重构块。如果接收者不知道某个交易ID,并且该交易不在预填充交易集中,则接收者随后会请求该特定交易。在最佳情况下,仅需0.5 RTT即可中继一个块。在最坏的情况下,紧凑块中缺少事务时,需要进行一次额外的往返。它总共需要1.5个RTT,与直接头通告相同,但是带宽消耗要少得多。紧凑块是响应getdata请求而发送的,或者是在HB模式下主动发送的(下一部分)。

C.新措施3:高带宽(HB)模式邻居

节点选择3个邻居作为高带宽(HB)邻居。将HB邻居列表称为HBN列表。节点N指示其HB邻居主动发送紧凑块。将此类块称为未经请求的紧凑块。将邻居添加到HBN列表时,N向该邻居发送sendcmpct(true)消息。类似地,如果从HBN列表中删除了邻居,则N向被驱逐的邻居发送sendcmpct(false)消息,指示其停止发送未经请求的紧凑块。将HBN列表限制为仅3个邻居可以减少带宽消耗。选择m个HB邻居会导致传输m-1个冗余紧凑块,因为所有HB邻居在接收到它时都会发送一个新的紧凑块。

如上图所示,HB邻居cA通过直接发送紧凑块将新块中继到N。如有必要,节点N进一步发送getblocktxn消息以请求丢失的事务。然后,CA用blocktxn消息进行响应。节点N验证该块,然后更新cA的最后一个块发送时间。发送的最后一个块时间戳记录了cA向节点N发送新的有效块时的最后一次时间戳。在将新的HB邻居添加到列表中的情况下,此时间戳用于确定将淘汰哪个HB邻居。如图所示,当非HB邻居B获知一个新块时,将发生以下事件序列。

1.B发送块头消息以通告新块。

2.如果节点N之前从未听说过此块头,则N随后发送一个getdata请求以请求紧凑块。

3.B响应紧凑块。

4.如果节点N错过紧凑块中的某些事务,则将交换getblocktxn / blocktxn消息。

N更新其HBN列表以包括节点E。根据其上一个发送的上一个时间戳,将先前的HB邻居从列表中逐出。

另外,如果满足以下附加要求,则HB邻居cA仅向其邻居N发送紧凑块。

•RI:节点cA认为N没有当前块。例如,N一定没有将此块通告给A。这是为了避免发送不必要的紧凑块。

•R2:节点cA认为节点N知道当前块的前一个块。例如,节点N已将前一个块通知给节点A,或者节点A之前也已将前一个块发送给节点N。这是为了确保节点N在接收紧凑块时能够验证和重建实际块。

D.新措施4:缩短块下载超时

自v0.10.5版本以来,比特币协议缩短了块下载超时。基本超时值为10分钟。对于每个额外的并行getdata请求,超时将增加5分钟。这是为了防止由于节点自身的下游链路饱和而导致对等节点超时。

E.对原始攻击的影响

使用新的块传播协议不可能在块延迟攻击。攻击节点不知道受害者是否选择了其HB邻居。在常见情况下,如果有HB邻居向受害人V发送未经请求的紧凑块,则攻击将失败。如上图所示,攻击节点A设法成为第一个发送块头消息的对象,然后延迟了对受害者的getdata请求的响应。 HB邻居N随后向受害人V发送未经请求的紧凑块。受害人仍然接收新块而没有明显的延迟。仅在极少数情况下攻击成功了,在这种情况下,没有邻居能够直接发送紧凑块,即受害人V的HB邻居都没有同时满足要求RI和R2。仅当V最近加入网络时才会发生这种情况。

[3]中的攻击还能够将块延迟更长的时间,超过了getdata请求的超时时间。新的比特币块传播协议都不可行。一旦受害者V向攻击节点发送getdata请求,而V不响应后续的块头消息,它就会记录谁发送了这些块头消息。如果攻击节点A将阻止延迟了10分钟以上,则受害人V与A断开连接。然后V在传出同一块的块头消息的传出连接中选择邻居。 V根据建立出站连接的时间选择邻居。最早连接的邻居被选中。由于攻击节点位于V的传入连接上,并且攻击者不知道V的传出连接建立时间的顺序,因此V很有可能选择一个非攻击节点并在不久后从该邻居接收到阻止。因此,不可能将块延迟超过getdata请求的超时时间。

 

0x04 Tendrilstaller Attack Algorithm

TendrilStaller可以在有或没有轻型攻击节点的情况下运行。因此首先描述仅具有完整攻击节点的Tendri IStaller。然后,介绍轻量级攻击节点并讨论TendrilStaller的完整操作。

A.仅具有完整攻击节点的攻击

TendrilStaller需要最少3个攻击节点。攻击分为两个阶段。在阶段I中,攻击节点尝试被选择为受害者的HB邻居。三个不同的攻击节点建立了与受害者的连接。每个攻击节点都会不断向受害者主动发送新的压缩块,即使它尚未出现在受害者的HBN列表中。根据比特币源代码,当节点V收到来自非HB邻居的未经请求的压缩块时,如果满足以下两个条件,V仍将尝试重建该块。

•条件C1:V之前没有看到块。

•条件C2:V在之前已经在此紧凑块中接收到所有交易。

观察到,对于大多数加入对等网络的受害人V,C2大部分时间都占有足够长的时间,以观察到一些新近开采的区块。如果重构的块有效,则受害者将发送攻击的节点添加到HBN列表中。受害者向发送者发送一条sendcmpcutrue消息。攻击节点采用三种方法来增加其成为第一个将新紧凑块发送给受害者的节点的机会。

•方法O1:攻击节点建立的传出连接比协议中定义的默认8个连接更多。只要其邻居中的任何一个接收到新块,攻击节点也将在不久后接收到该块。因此,攻击节点可能会与更多的邻居更快地获得新开采的区块。

•方法O2:攻击节点指示所有邻居发送未经请求的紧凑块。攻击节点不限制其自身HBN列表的大小。攻击节点更有可能更快地接收新块。

•方法O3:收到新的压缩块后,攻击节点会将其发送给受害者,而无需完全验证该块。与[3]中的攻击类似,绕过验证过程可以使攻击节点将新块传播给受害者的时间减少数十毫秒。

攻击节点从受害者那里收到sendcmpcutrue / false)消息。当攻击节点收到sendcompact消息时,它将通知所有其他攻击节点。因此,每个攻击节点都知道受害者的HBN列表中当前存在哪些攻击节点。尚未在V的HBN列表中的攻击节点会继续向V发送紧凑块,直到将其添加到列表中。一旦将攻击节点添加到列表中,它就不会将压缩块中继到V,从而使其他攻击节点有更好的机会被添加到HBN列表中。当HBN列表中有三个攻击节点时,所有攻击节点都进入阶段2。每个攻击节点根据状态转换图独立运行,如下图所示。

在阶段2中,攻击节点执行实际的块延迟攻击。攻击节点尝试成为第一个向受害人V发送新块的广播(头消息)。收到新的压缩块后,攻击节点将提取块头并将其发送给受害人,而无需进行验证过程。如果V响应agetdata请求,则表明攻击节点的广播确实是V接收并接受的第一个广播。然后,攻击节点将发送该块的时间延迟了10分钟。如果没有攻击节点从受害方接收到getdata请求,则表示无攻击节点已在攻击节点之前将头消息发送给V。受害者随后向非攻击节点请求新的阻止。结果,该非攻击节点将被添加到受害者的HBN列表中,而攻击节点之一将从列表中删除。攻击节点监视来自受害者的sendcmpct(false)消息。从HBN列表中删除至少一个攻击节点后,攻击将转换回第一阶段,如图所示。攻击节点再次开始发送紧凑块。

B.轻量级攻击节点

轻量级攻击节点消耗更少的CPU,带宽和磁盘空间,并且在云环境中部署的成本更低。具体而言,轻量级攻击节点不会在磁盘上存储任何事务或块数据。与完整的比特币节点相反,它不执行初始块下载过程。轻量级攻击节点的磁盘大小要求可以小于IG。相反,一个完整的比特币节点需要存储至少230G的数据,并且每个新块都会增加存储的数据量。此外,轻量级攻击节点不执行块验证,从而大大降低了必要的计算能力。他们不维护任何区块链状态。轻量级攻击节点可以两种方式中的任何一种进行操作。在模式I中,轻量级攻击节点实现了完整比特币节点功能的最小子集。在模式I中,轻量级攻击节点仅执行一项主要操作:当它从邻居那里收到新的压缩块时,它将立即将压缩块发送到完整的攻击节点。类似于完整攻击节点,轻量级攻击节点指示其所有邻居发送未经请求的压缩块。此外,轻量级攻击节点还执行基本例程,例如响应来自邻居的心跳消息以使连接保持活动状态。他们还与邻居交换地址以定期更新地址表。

模式I中的轻量级攻击节点充当完整攻击节点的代理。每个轻量级攻击节点都连接到公共比特币节点的随机且至少部分不同的子集。轻量级攻击节点也将紧凑块直接中继到完整攻击节点,而无需验证块。结合所有轻量级攻击节点的邻居,一大群比特币节点距完整攻击节点仅一跳。因此,平均而言,完全攻击节点可以更早地接收到新挖掘的块。

轻量级攻击节点也可以在模式2下运行,在其中参与攻击并与受害者建立连接。轻量级攻击节点实现与完整攻击节点相同的两阶段攻击逻辑。另外,由于轻量级攻击节点不存储任何块,因此它需要实现逻辑,以将来自受害者的getdata请求中继到完整攻击节点,并将来自完整攻击节点的相应响应中继回受害者。如下图所示,攻击节点m的重量较轻。成功在阶段2中成功发送了头消息,受害方以getdata请求进行回复。由于不想实际延迟对受害者的块,因此m需要及时响应实际的阻止。为此m将请求中继到完整的攻击节点A。A做出相应的响应,将实际块发送给m。最后,m将响应转发回受害者。

当轻量级攻击节点以模式2运行时,攻击者可以用轻量级节点替换原始的完整攻击节点,而只剩下一个完整的攻击节点。在云中部署轻量级节点比完整攻击节点便宜。

 

0x05 Experiment

在云中设置了3个具有不同地理位置的完整攻击节点,以展示攻击的可行性。在全球范围内随机选择受害者,并对他们进行“部分”攻击。证明随着攻击节点更靠近受害者,攻击会更加有效。使用3个完整攻击节点和一组轻量级攻击节点执行攻击。轻量级攻击节点在模式I下作为完整攻击节点的代理运行。证明采用轻量级攻击节点可以比其他方式延迟更高的块百分比。使用一个在模式2下运行的完整攻击节点和多个轻量级节点执行攻击。证明与仅使用完整攻击节点的攻击相比,该攻击可能更具成本效益。

A.仅具有完整攻击节点的攻击

表明只要受害者适度位于攻击节点附近,攻击就很有可能成功。设置了3个完整的攻击节点,每个节点都连接到200个邻居。这三个攻击节点已部署在Google Cloud Platform中。分别在美国东部,欧洲和亚洲3个不同地区重复实验。这是为了消除攻击的任何地域偏见。在全球范围内随机选择受害者,并在不实际延迟块的情况下对选定的受害者执行“部分攻击”。将实验限制为“部分攻击”,以验证攻击而不会实际影响比特币节点的运行。在攻击阶段2中,当攻击节点设法首先发送头消息并接收来自受害者的getdata请求时,攻击节点将立即响应该请求。将阶段2中的每个getdata请求视为成功攻击的验证。以攻击节点可以并行针对多个受害者的攻击方式实施攻击。节点为每个受害者维护一个单独的攻击状态,当接收到新的块时,节点针对每个受害者独立地采取相应的动作。

将成功率定义为攻击过程中延迟阻止的百分比。上图显示了攻击节点和受害者之间具有不同往返时间的成功率。每个数据点代表一个包含/ 50到200块的试验。测量从攻击发起后的第一个块开始,到从受害人的HBN列表中删除攻击节点的一个块结束。下表总结了每个区域的结果。由于攻击节点距离受害者更近,因此攻击成功率更高,可能会更有效。当往返时间小于80ms时,成功率可高达85%。考虑到全球云提供商的广泛可用性,可以轻松部署TendrilStaller。

还观察到结果显着不同,即使两个受害者对攻击节点的往返延迟相似。由于无法访问受害节点,因此推测原因如下。首先,受害者之间的联系数量各不相同。一些受害者可能仅连接到几个节点,而其他受害者则建立了更多的连接。攻击具有更多连接的节点会更加困难,因为在攻击阶段2中,攻击节点需要与更多非攻击节点竞争。第二,某些受害者平均而言可能更接近新区块的来源。它们似乎已连接到池网关,在这种情况下,受害者可以更快地收到新开采的区块。攻击很难成功。第三,受害者可能未遵循默认协议。例如,受害者可能会增加其HBN列表的大小,或者永远不会从HBN列表中驱逐任何邻居。

B.在模式1中以轻量级攻击节点进行攻击

现在,以在模式I下运行的轻型攻击节点执行攻击。在每个区域中,设置了3个完整攻击节点和5个轻型攻击节点。选择在同一区域中部署轻量级节点,以最大程度地减少完整攻击节点与其轻量级对应节点之间的等待时间。这些轻量级节点设置为连接到网络中的200个随机节点,并指示其所有邻居仅发送紧凑块。他们在收到后将压缩块中继到三个攻击节点。仅从与攻击节点相同的地理区域中选择受害者。同样,执行部分攻击,其中不会延迟对受害者的getdata请求的响应。将受害者的getdata请求视为成功攻击的指标。证明借助轻量级攻击节点,完全攻击节点可以更快地接收新块。因此,更多的块可能会延迟给受害者。

如图上所示,这三个区域的成功率都有显着提高。由于轻量级节点充当代理,三个区域的成功率分别提高了13%,20%和13%。通过记录完整攻击节点接收到的新块的第一个发送者来进一步验证这一点。如下表所示,轻型节点分别中继了约59%,49%和58%的新块。如果不采用轻量级节点,这些块将在以后的时间被接收。

由于重量轻节点的低成本特性,可以通过最小程度地增加资源来实现这种功效的提高。

C.在模式2中以轻量级攻击节点进行攻击

现在,以在模式2下运行的轻量级攻击节点执行攻击。证明了用轻量级攻击节点(完全)攻击节点的(部分)替换可以降低攻击成本,同时达到相同的攻击成功率。在每个区域中设置了两个轻量级攻击节点和一个完整的攻击节点。受害者是与攻击者位于同一地理区域中的随机选择的节点。

上图显示攻击成功率分别为56%,68%和58%,这与3个完整攻击节点的情况相当。这表明可以结合使用轻量级攻击节点和完整攻击节点来有效延迟块,同时利用更少的资源。下表比较了完整攻击节点和轻量攻击节点的资源消耗。由于轻量级攻击节点不存储块,因此操作所需的磁盘空间要少得多。轻量级攻击节点不验证事务/块,从而减少了CPU消耗。配置了轻量级节点,除了完整的攻击节点和受害者之外,不将任何块中继到邻居。因此,出站带宽消耗较低。

攻击成本的降低表明,攻击者可以在较小的,价格更便宜的实例上部署轻量级的攻击节点。对于相同的资源成本,攻击者可以设置更多的节点并同时攻击更多的受害者。这将允许恶意实体在资源消耗相同的情况下攻击网络的更大部分。

D.块延迟攻击的影响

阻止延迟攻击有效地降低了受害者的采矿能力。受害节点无法在新块上进行挖掘。无效采矿功率的百分比可以如下计算。假设最坏的情况是每个新开采的区块延迟10分钟。两个块之间的时间间隔遵循指数分布,平均块间隔为10分钟。受害者可能在最新的区块上进行挖掘的预期时间为:

其中A = 0.1min ^(-1)。这是受害者总采矿能力的36.7%。这次袭击还鼓励矿工组建采矿池,使采矿权集中化的问题更加严重。众所周知,池网关节点可以运行修改后的比特币源代码,以增强安全性和更快地进行块中继。例如,池网关节点通常会建立更多的连接。根据观察,对于具有更多连接或不遵循默认比特币行为的节点(例如池网关节点),攻击成功率将较低。另一方面,当矿工加入矿池时,它仅与矿池管理器建立连接。因此,在这些矿工上使用TendrilStaller攻击是不可行的。鉴于这些观察结果,单个矿工更愿意加入矿池以避免TendrilStaller攻击。

 

0x06 Countermeasures

[3]中提出的一些对策已经集成到当前的比特币协议中,例如块头优先公告。节点仅在收到新块的有效块头后才发送getdata请求。在本文中提出了一些对策,可以提高新引入的紧凑块传播协议的可靠性。

A. HB邻居的部分随机选择

根据当前协议,如果节点最近已发送了有效块,则默认情况下会选择其HB邻居。就像提出的攻击算法一样,这使攻击节点有机会操纵受害者的HBN列表。为了限制攻击节点对HBN列表的影响,一个比特币节点只能根据最近发送块规则选择2个HB邻居,并随机选择一个剩余的HB邻居。然后,攻击节点无法完全控制受害人的HBN列表,并且很有可能总是有一个非攻击节点可以向受害人主动发送紧凑块。

B. HB邻居在传出连接上

同样,一个比特币节点只能从传出连接上的节点中选择HB邻居。由于攻击节点通常会启动与受害者的连接,因此不会选择它们作为HB邻居。但是,攻击节点可能会诱使受害者连接到它们。例如,攻击者可以执行复杂的操作来操纵受害者的地址表,如[1]中的日食攻击一样。这种过程既耗费资源又耗时。

C.更短的块下载超时

观察到截至2018年12月,90%的块传播时间已显着减少至不到4秒。这表明提供给比特币节点的网络带宽已大大增加。这也使getdata请求的当前10分钟超时过时。减少块下载超时可减少攻击的影响。给定一个k分钟的超时时间,由于块延迟攻击而降低的挖掘能力为e ^(-λk)。如果将下载超时缩短到1分钟,那么攻击节点成功将受害者的每一个区块都延迟了,只能将受害者的挖掘能力降低到原始攻击力的90.4%。

 

0x07 Conclusion

本文提出了针对比特币对等网络的TendrilStaller攻击。攻击使攻击者能够将块传播到受害者的时间延迟10分钟。提出并实现了新的攻击算法,并证明了攻击成功率可以达到85%。此外,采用轻量级攻击节点可以提高攻击成功率(在模式I下)或减少攻击的资源消耗(在模式2下)。此外表明,成功的攻击可能会使受害者的采矿能力降低至36.7%。这使攻击者可以获得更高的采矿优势,还提出了一些缓解TendrilStaller攻击的对策。

 

Reference

[1] Heilman, E., Kendler, A., Zohar, A. and Goldberg, S., 2015, August.Eclipse Attacks onBitcoin’s Peer-to-PeerNetwork. In USENIXSecurity Symposium (pp. 129-144)
[2] Apostolaki, M., Zohar, A. and Vanbever, L., 2017, May. Hijacking bitcoin: Routing attacks on cryptocurrencies. In Security and Privacy (SP), 2017 IEEESymposium on(pp. 375-392). IEEE
[3] Gervais, A. , Ritzdorf, H., Karame, G.O. and Capkun, S., 2015, October.Tampering with the delivery of blocks and transactions in bitcoin. In Proceedings of the 22nd ACM SIGSAC Conference onComputer and CommunicationsSecurity(pp. 692-705). ACM.
[4] https:l/github.comlbitcoin/bipslblob/master/bip-O I52.mediawiki

分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读
|发表评论
|评论列表
加载更多