【论文阅读】Eclipse Attacks on Bitcoin’s Peer-to-Peer Network

文章目录

  • 摘要
  • 1 介绍
    • 1.1 eclipse攻击的含义
  • 2 比特币的点对点 络
    • 2.1 络信息传播
    • 2.2存储 络信息
    • 2.3 选择同行
  • 3 Eclipse攻击
    • 3.1 人口尝试和新
    • 3.2 重启受害者
    • 3.3 选择出站连接
    • 3.4 垄断被遮蔽的受害者
  • 4 有多少攻击地址li>
    • 4.1 僵尸 络攻击
      • 4.1.1谁可以发起
    • 4.2 基础设施攻击
      • 4.2.1 谁能发动基础设施攻击li>
    • 4.3 总结:基础设施还是僵尸 络li>
  • 5 测量实时比特币节点
  • 6 实验
  • 7 对策
  • 8 相关工作
  • 9 结论

摘要

我们介绍了对比特币点对点 络的eclipse攻击。我们的攻击允许控制足够数量IP地址的对手垄断与受害比特币节点的所有连接。攻击者可以利用受害者攻击比特币的挖矿和共识系统,包括n确认双消费,自私挖矿和区块链中的对抗分叉。我们详细研究了比特币的点对点 络,并通过概率分析、蒙特卡洛模拟、测量和使用比特币节点的实验来量化攻击中涉及的资源。最后,我们提出了对策,灵感来自僵尸 络架构,旨在提高eclipse攻击的门槛,同时保留比特币当前 络架构的开放性和去中心化。

1 介绍

虽然从20世纪80年代开始就有人研究加密货币[22,25,28],但比特币是第一个被广泛采用的加密货币。比特币成功的一个关键原因是它的去中心化。比特币没有使用中央银行来监管货币,而是使用去中心化的节点 络,这些节点使用计算工作证明来就分布式公共交易账本达成共识。区块链。Satoshi Nakamoto[52]认为,只要这些攻击者控制了 络中不到一半的计算能力,比特币在攻击者试图将区块链转移到不一致/不正确状态时是安全的。但是,在这种安全分析的基础上,有一个关于完全信息的重要假设;也就是说,比特币生态系统的所有成员都可以观察到同行所做的工作证明。

虽然在过去的几年里,人们对比特币的计算工作量证明协议的安全性进行了广泛的研究,如[14,29,36,37,45,49,50,52,58,60],但很少有人关注用于在比特币节点之间广播信息的点对点 络(见第8节)。比特币点对点 络被捆绑到核心比特币实现中,也称为。Satoshi客户机被设计成开放的、去中心化的、独立于公钥基础设施的。因此,不使用对等体之间的加密身份验证,节点通过其IP地址进行识别(第2节)。

每个节点使用随机协议选择8个节点,与它们形成长寿命的外向连接,并传播和存储 络中其他潜在节点的地址。拥有公共IP的节点还可以接受来自任何IP地址的117个未经请求的传入连接。节点与它们的传入和传出对等点交换区块链状态的视图。

我们的eclipse攻击使用极低速率的TCP连接,所以攻击者的主要挑战是获得足够数量的IP地址(第四节)。我们考虑两种攻击类型:(1)基础设施攻击,模拟一个ISP、公司或民族国家的威胁,他们拥有几个连续的IP地址块,并试图通过攻击其点对点 络来颠覆比特币;(2)僵尸 络攻击,由拥有不同IP地址范围的机器人发起。我们使用概率分析,(第4节)测量(第5节),以及在我们自己的实时比特币节点上的实验(第6节)来发现,虽然僵尸 络攻击需要的IP地址少得多,但有数百个组织有足够的IP资源来发动eclipse攻击(第4.2.1节)。例如,我们展示了一个拥有32个不同的/24 IP地址块(共8192个地址)的基础设施攻击者,或者一个由4600个机器人组成的僵尸 络,总是能以至少85%的概率吃掉一个受害者;这与 络中的节点数量无关。此外,在我们的实时比特币节点的测试中,400个机器人就足够了。为了说明这一点,如果8192个攻击节点加入今天的 络(包含≈7200个公共IP节点[4]),并诚实地遵循点对点协议,他们可以以大约(8192 7200+8192)8=0.6%的概率吃掉一个目标。

我们的攻击只针对具有公共ip的节点;如果拥有私有ip的节点的所有出站连接都指向重叠的公有ip节点,则可能会受到影响。

对策。众所周知,大型矿商、商业客户和在线钱包会修改比特币的 络代码,以降低基于 络的攻击风险。[3]通常推荐两种对策:(1)禁用传入连接,(2)选择连接良好的对等点或已知矿工的“特定”传出连接(即,使用白名单)。

然而,将其扩展到完整的比特币 络还存在几个问题。首先,如果禁止传入连接,新节点如何加入 络,如何决定要连接到哪些“特定的”对等体币节点应该形成一个私有 络吗是这样,他们如何确保计算能力足够分散,以防止挖矿攻击上,如果比特币要兑现其作为一种开放和去中心化加密货币的承诺,我们认为它的p2p 络也应该是开放和去中心化的。

因此,我们的下一个贡献是一组对抗措施,通过允许未经请求的进入连接来保持开放性,同时提高eclipse攻击的门槛(第7节)。今天,一个拥有足够地址的攻击者可以遮蔽任何接受进入连接并重新启动的受害者。我们的对策确保,在很大的概率下,如果受害者存储了足够多的合法地址来接受传入的连接,那么无论攻击者控制的IP地址的数量如何,受害者都不能被掩盖。我们的对策1、2和6已经部署在比特币v0.10.1中;我们还开发了一个带有对策3,4的补丁[40]。

1.1 eclipse攻击的含义

除了破坏比特币 络或有选择地过滤受害者对区块链的看法外,eclipse攻击是其他攻击的有用构建块。

工程块比赛。当两名矿工同时发现区块时,就会发生区块竞赛;一个块将成为区块链的一部分,而另一个“孤儿块”将被忽略,不为发现它的矿工提供挖矿奖励。一个超越许多矿工的攻击者可以通过聚集被超越矿工发现的区块来设计区块竞赛,一旦发现一个竞争区块,就向被超越矿工和未被超越矿工释放区块。因此,黯然失色的矿工将精力浪费在孤儿区块上。

分裂开采能力。使x部分矿工的采矿能力从 络的其余部分消失,使其更容易发起采矿攻击(例如,51%的攻击[52])。为了隐藏自然变化[19]下采煤功率的变化,矿工可以逐渐或间歇性地被遮蔽。

自私的挖掘。在自私挖矿[14,29,37,60]中,攻击者战略性地保留区块,以赢得超过其公平份额的挖矿奖励。攻击的成功由两个值参数化:α,由攻击者控制的挖矿能力的比例,和γ,在区块竞赛中在攻击者的区块上挖矿的诚实挖矿能力的比例。如果γ较大,那么α可以较小。通过使矿工黯然失色,攻击者增加γ,从而减少α,这样自私的采矿就更容易了。为了做到这一点,攻击者丢弃所有被遮挡矿工发现的区块,这些区块与自私矿工发现的区块竞争。接下来,攻击者通过只向被遮挡矿工提供自私矿工的区块链视图来增加γ;这将获取重叠矿工的计算能力,并使用它在自私矿工的区块链上进行挖掘。

对矿工的攻击可能会损害整个比特币生态系统;如果矿池通往公共比特币 络的 关被掩盖,它们也很容易受到攻击。Eclipsing也可以用于对非矿工的双重消费攻击,攻击者多次消费一些比特币:

0-确认的双重消费。在0确认交易中,客户向商家支付交易,而商家在看到区块确认即在区块链中看到交易之前就向客户发放了货物[18]。这些交易是在不适合等待通常需要5-10分钟的区块确认时使用的[20],例如,在零售点系统如BitPay[5],或在线赌博 站如Betcoin[57]。为了对商家发起双重消费攻击[46],攻击者侵蚀商家的比特币节点,向商家发送货物的交易T,并发送交易T 这些比特币双重消费到 络的其他部分。商家向攻击者释放了货物,但由于攻击者控制了商家的所有连接,商家不能告诉 络的其他部分关于T,同时确认了T者因此获得了货物而没有付钱。0确认的双重消费已经在野外发生[57]。这种攻击与Finney攻击[39]一样有效,但使用的是黯然失色,而不是采矿能力。

N-confirmation花费的两倍。如果攻击者遮蔽了x部分的矿工,它也可以对遮蔽的商人发起n确认的双重消费攻击。在N确认交易中,只有在区块链[18]中深度为N?1的区块中确认交易后,商家才会释放货物。攻击者将其事务发送给重叠的矿工,矿工将其合并到他们的(过时的)区块链视图中。

然后攻击者将区块链的这个视图显示给被遮挡的商人,接收货物,并将来自非遮挡矿工的区块链(非过时的)视图发送给商人和被遮挡矿工。被遮蔽的矿工的区块链成了孤儿,攻击者不付钱就得到了货物。这类似于由矿池[10]发起的攻击,但我们的攻击者使矿工黯然失色,而不是使用他自己的采矿能力。

其他攻击也存在,例如,对运行在SPV模式[16]的节点的事务隐藏攻击。

2 比特币的点对点 络

我们现在基于比特币0.9.3版本描述比特币的点对点 络,该版本是2014年9月27日至2015年2月16日发布的最新版本,其 络代码自2013年以来基本没有变化。这个客户端最初是由中本聪(Satoshi Nakamoto)编写的,在公共ip节点中占有几乎普遍的市场份额(根据Bitnode统计,97%的公共ip节点占市场份额)。IO在2/11/2015[4])。

比特币 络中的对等体通过其IP地址进行识别。一个拥有公共IP的节点可以与其他比特币节点发起最多8个传出连接,并接受最多117个传入连接。一个私有IP的节点只发起8个出站连接。连接是通过TCP进行的。节点只传播和存储公 ip;一个节点可以通过比较IP包头和比特币版本消息来确定它的对等体是否有一个公共IP。节点也可以通过Tor连接;我们没有对此进行研究,而是参见[16,17]。我们现在描述节点如何传播和存储 络信息,以及它们如何选择传出的连接。

2.1 络信息传播

络信息通过DNS种子器和ADDR消息在比特币 络中传播。

DNS播种机。DNS种子器是一个服务器,它使用比特币节点的IP地址列表(未经加密验证)来响应来自比特币节点的DNS查询。种子程序通过定期爬行比特币 络获得这些地址。比特币 络有六个种子程序,只在两种情况下被查询。

第一个是当一个新节点第一次加入 络时;它尝试连接到种子程序以获得活动IP的列表,否则将失败转移到一个大约600个IP地址的硬编码列表。第二种是现有节点重新启动并重新连接到新的节点;在这里,仅当节点开始尝试建立连接,且节点的出站连接少于两个时,才查询种子器。

ADDR的消息。ADDR消息包含最多1000个IP地址及其时间戳,用于从对等体获取 络信息。节点接受未经请求的ADDR消息。ADDR消息仅在与对等体建立外向连接时被请求;对等体以最多三个ADDR消息响应,每个ADDR消息包含从其表中随机选择的最多1000个地址。

节点向对等体推送ADDR消息有两种情况。每天,一个节点通过ADDR消息向每个对等体发送自己的IP地址。另外,当一个节点收到一个不超过10个地址的ADDR消息时,它会将该ADDR消息转发给两个随机选择的连接对等体。

2.2存储 络信息

公 ip存储在节点的尝试表和新表中。

表存储在磁盘上,并在节点重启时持久化。

过表。被尝试的表由64个桶组成,每个桶最多可以为节点成功建立入站或出站连接的对等体存储64个唯一地址。除了每个存储的对等点的地址外,节点还保存到该对等点的最近一次成功连接的时间戳。

每个对等体的地址通过对对等体的(a) IP地址和(b)组的哈希值映射到try中的一个桶,其中定义的组是包含对等体IP地址的/16 IPv4前缀。桶的选择如下:SK =节点诞生时选择的随机值。

IP =对端的IP地址和端口 。

Group = peer ‘s Group i = Hash(SK, IP) % 4 Bucket = Hash(SK, Group, i) % 64 return Bucket这样,每个IP地址在try中对应一个桶,每个组最多对应四个桶。

当一个节点成功连接到一个对等体时,该对等体的地址被插入到相应的尝试桶中。如果桶已满(即包含64个地址),则使用比特币驱逐:从桶中随机选择4个地址,最老的(1)替换为try中的新peer的地址,然后(2)插入到新表中。如果对等体的地址已经存在于桶中,则更新与该对等体地址相关的时间戳。当主动连接的对等体发送VERSION、ADDR、INVENTORY、GETDATA或PING消息且距离上次更新超过20分钟时,时间戳也会更新。

新表。新表由256个桶组成,每个桶可以为节点尚未发起成功连接的对等体保存64个地址。节点用从DNS种子器或ADDR消息中学到的信息填充新表。

a在new中插入的每个地址都属于(1)一个组(在我们对try表的描述中定义)和(2)一个源组(源组中包含连接的对等体的IP地址或从该组中学习到的节点地址a的DNS种子器的IP地址)。

Group = /16包含要插入的IP。

Src_Group = /16包含对端发送IP。

i = Hash(SK, Src_Group, Group) % 32 Bucket = Hash(SK, Src_Group, i) % 256 return Bucket每个(Group, source Group)对哈希到一个新的桶,而每个组选择最多32个新的桶。

每个桶保存唯一的地址。如果一个桶已满,那么一个名为isterrorble的函数将遍历桶中的所有64个地址;如果其中任何一个地址是糟糕的,因为它(a)超过30天,或(b)有太多失败的连接尝试,那么糟糕的地址将被删除,取而代之的是新地址;否则,使用比特币驱逐与小的变化,驱逐的地址被丢弃。

2.3 选择同行

如果节点重新启动或 络丢弃了一个出站连接,则选择新的出站连接。

比特币节点从不故意放弃连接,除非满足黑名单条件(例如,对等体发送的ADDR消息太大)。

具有ω∈[0,7]出站连接的节点按照以下方式选择ω + 1个连接:(1)决定是否从试过或新中选择,其中Pr[select from试过]=√ρ(9?ω) (ω + 1) +√ρ(9?ω) (1)

ρ是存储在try中的地址数量和存储在new中的地址数量之间的比率。

(2)从表中随机选择一个地址,偏爱时间戳较新鲜的地址:(i)在表中随机选择一个非空桶。(ii)在该桶中随机选择一个位置。(ii)如果该位置有一个地址,则返回概率p(r,τ) = min(1,1.2 r1 +τ)(2)的地址,否则,拒绝该地址并返回(i)。接受概率p(r,τ)是r的函数,r是到目前为止被拒绝的地址的数量,τ是地址的时间戳与当前时间之间的差,以10分钟的增量为单位进行测量(3)连接到地址。如果连接失败,执行(1)。

3 Eclipse攻击

我们的攻击目标是拥有公共IP的受害者。我们的攻击者(1)用攻击节点的地址填充尝试表,(2)用不属于比特币 络的“垃圾”IP地址覆盖新表中的地址。“垃圾”地址是未分配的(例如,[56]将其列为“可用”地址)或[43]将其列为“保留供将来使用”地址(例如,252.0.0.0/8)。我们用“垃圾”填充new,因为与攻击者地址不同,“垃圾”不是稀缺资源。攻击会持续到(3)受害节点重新启动,并从其持久化存储中的已尝试表和新表中选择新的传出连接(章节2.3)。很有可能,受害者建立了所有8个出口连接到攻击者的地址;所有8个地址将从尝试,因为受害者不能连接到“垃圾”在新的。最后,攻击者(5)占用受害者剩余的117个传入连接。现在我们详细描述攻击的每一步。

3.1 人口尝试和新

攻击者利用以下方法来填充try和new:

  1. 来自未经请求的传入连接的地址存储在try表中;因此,攻击者只需从该地址连接到受害者,就可以将一个地址插入受害者的尝试表中。此外,比特币驱逐规则意味着攻击者的新地址很可能会驱逐存储在尝试表中的任何旧的合法地址(章节2.2)。

  2. 一个节点接受不请自来的ADDR消息;这些地址被直接插入到新表中,而不测试其连接性(第2.2节)。因此,当我们的攻击者从一个对抗性地址连接到受害者时,它也可以发送带有1000个 “垃圾 “地址的ADDR消息。最终,垃圾地址覆盖了新的所有合法地址。我们使用 “垃圾 “是因为我们不想把我们的IP地址资源浪费在覆盖new上。

  3. 节点很少从对等人和DNS播种者那里索取 络信息(第2.1节)。因此,虽然攻击者覆盖了受害者的尝试表和新表,但受害者几乎从未通过查询合法的对等者或播种者来反击对抗性信息的泛滥。

3.2 重启受害者

我们的攻击需要受害者重新启动才能连接到敌对地址。比特币节点可能重启的原因有几个,包括ISP中断、电源故障、升级、主机操作系统失败或攻击;事实上,[16]发现一个拥有公 IP的节点有25%的几率在10小时后脱机。另一个可以预见的重启原因是软件更新;例如,在1/10/2014,位节点。io看到942个节点运行着Satoshi客户端0.9.3版本,到2014年12月29日,这个数字已经上升到3018个节点,相当于超过2000次重启。因为更新通常不是可选的,特别是当它与关键的安全问题相对应时;2013年发生了三次比特币升级,2014年,心脏出血漏洞[53]导致了一次升级。此外,由于 区需要提前得到关于升级的通知,攻击者可以监视通知,然后开始攻击[2]。重启也可以通过DDoS[47,65],内存耗尽[16],或数据包死亡(已经发现比特币[6,7])故意引发。归根结底,点对点 络的安全性不应依赖于100%的节点正常运行时间。

3.3 选择出站连接

如果在重新启动时,受害者将所有的对外连接都发送到攻击者地址,则攻击成功。为此,我们利用了从trying中选择具有新时间戳的地址的偏向;通过在攻击中投入额外的时间,我们的攻击者确保它的地址是新的,而所有合法地址都变得越来越陈旧。我们用几个简单的假设来分析这个问题:

  1. 受害者的尝试表中的f -部分地址由对手控制,其余的1 -f -部分是合法的。(第4节分析了对手因此必须控制多少地址。)

  2. new中的所有地址都是“垃圾”;所有到new中的地址的连接都失败,受害者被迫连接到try中的地址(章节2.3)。

  3. 攻击分回合进行,每回合重复,直到受害者重新开始。在单轮攻击中,攻击者从其每个对抗IP地址连接到受害者。一个回合需要时间τa,因此所有被试对抗性地址都小于τa。

  4. try中的f分数地址在受害者重新启动之前主动连接到受害者。这些合法地址上的时间戳每20分钟或更久更新一次(章节2.2)。我们假设这些时间戳在受害者重新启动时是新的(即,τ = 0);这对攻击者来说是最糟糕的情况。

  5. 花费在攻击τ上的时间对手开始攻击的时刻到受害者重新启动的时间。如果受害者在攻击过程中没有获得新的合法 络信息,那么,除去上面描述的f 数,try中的合法地址比τ。

成功的概率。如果对手在尝试中拥有f部分的地址,在第一次尝试中接受对抗地址的概率是p(1,τa)·f,其中p(1,τa)如式(2)所示;这里我们使用的事实是,对手的地址不超过τa,即回合的长度。如果在尝试从尝试中选择一个地址的过程中拒绝了r?1个地址,那么在第r次尝试中接受对抗地址的概率为

3.4 垄断被遮蔽的受害者

图1假设受害者正好有8个出站连接;就传入连接而言,我们所需要的只是受害者有几个开放的插槽来接受攻击者传入的TCP连接。

虽然通常认为计算机可以建立的TCP连接的数量受到操作系统或源端口数量的限制,但这只适用于使用操作系统提供的TCP套接字时;专门的攻击者可以使用自定义TCP堆栈打开任意数量的TCP连接。一个自定义的TCP栈(例如,zmap[35])需要最小的CPU和内存,并且通常只受带宽的限制,我们攻击的带宽成本是最小的:攻击连接。为了填充尝试表,攻击者从其每个地址重复连接到受害者。每个连接包括TCP握手、比特币版本消息,然后通过TCP RST断开连接;上游花费371字节,下游花费377字节。有些攻击连接还发送一个包含1000个地址的ADDR消息;这些ADDR消息上游花费120087字节,下游花费437字节,包括TCP ack。

垄断的连接。如果攻击成功,受害者有8个到攻击节点的传出连接,攻击者必须占用受害者剩余的传入连接。为了防止其他人连接到受害者,这些TCP连接可以维持30天,此时受害者的地址是可怕的,并被 络忘记。虽然比特币支持区块库存请求和发送区块和交易,但这消耗大量带宽;因此,攻击者不响应库存请求。因此,每建立一个TCP连接,需要上游377字节,下游377字节,由乒乓 文和TCP ack维护,每80分钟消耗164字节。

我们通过实验证实,一个比特币节点将接受来自同一IP地址的所有传入连接。(我们假设这样做是为了允许NAT后的多个节点连接到同一个节点。)保持缺省的117个传入TCP连接花费164×117 80×60≈4字节/秒,很容易允许一台计算机同时垄断多个受害者。

另外,这还允许连接饥饿攻击[32],在这种攻击中,攻击者垄断了点对点 络中的所有传入连接,使新节点无法连接到新节点。

4 有多少攻击地址h1>

3.3节说明了攻击的成功很大程度上取决于τ攻击中投入的时间,f,攻击者地址在受害者的尝试表中的比例。我们现在使用概率分析来确定对于给定的f值,攻击者必须控制多少个地址;然而,重要的是要记住,即使f很小,攻击者仍然可以通过增加τ。回顾2.2节,比特币非常小心地确保一个节点不会存储来自同一组的太多IP地址(即/16 IPv4地址块)。因此,我们考虑两种攻击变体:僵尸 络攻击(第4.1节)。攻击者持有多个IP地址,每个IP地址属于不同的组。该模型模拟了由分散在不同IP地址块中的主机组成的僵尸 络发起的攻击。第4.1.1节解释了为什么许多僵尸 络有足够的IP地址多样性来进行这种攻击。

基础设施攻击(章节4.2)。攻击者控制多个IP地址块,可以拦截发送到该IP块中的任何IP地址的比特币流量,即攻击者持有同一组中的多个地址集。

该模型模拟了一家公司或一个民族国家试图通过攻击比特币的 络来破坏比特币。第4.2.1节讨论了可以发起这种攻击的组织。

我们关注的是试过的;附录B考虑如何发送“垃圾”填充的ADDR消息覆盖new。

4.1 僵尸 络攻击

僵尸 络攻击者在不同的组中持有t个地址。我们将每个地址建模为散列到Tried中的一个均匀随机的桶中,因此散列到每个桶中的地址数量是二项分布3,即B(t, 1 64)。攻击者能占据try中64×64个条目中的多少个对各种情况进行建模,并将结果绘制在图2中。

对于a = 0…Ai,设Ya为实际存储在桶i中的对抗地址数,假设对手在桶i中插入了一个唯一的地址。如果插入的ath地址成功覆盖了合法地址,则设Xa = 1,否则设Xa = 0。然后,

4.2.1 谁能发动基础设施攻击h3>

哪些组织有足够的IP地址资源来发起基础设施攻击从2014年7月开始编制了组织IPv4地址分配的数据映射,使用CAIDA的AS到组织数据集[23]和AS到数据集[24]的前缀数据集,用来自成熟数据库[55]的信息补充我们的数据。我们确定了给每个组织分配多少组(即同一/16 IPv4地址块中的地址)和每个组的地址;参见图5。有448个组织有超过s = 32个组,每个组至少t = 256个地址;如果这些组织投资τ5小时,τa = 27分钟,然后他们以大于80%的概率掩盖受害者。

各国的国家isp为此目的持有足够数量的组(s≥32);例如,苏丹(Sudan Mobile)、哥伦比亚(ETB)、阿联酋(Etisalat)、危地马拉(Telgua)、突尼斯(突尼斯电信)、沙特阿拉伯(沙特电信公司)和多米尼加(Cable and Wireless)。美国内政部有足够多的小组(s = 35),韩国信息通讯部(s = 41),以及其他数百个小组。

4.3 总结:基础设施还是僵尸 络h2>

图4,2显示,僵尸 络攻击远远优于基础设施攻击。填补f=98%的受害者尝试表需要一个4600个节点的僵尸 络(根据方程(4),攻击的回合数足够多)。

相比之下,基础设施攻击者需要16000个地址,由s=63个组(公式(9))组成,每组t=256个地址。然而,根据第3.3节,如果我们的攻击者增加了在攻击中投入的时间τ么它可以在填充尝试方面远没有那么积极。例如,根据图1,攻击τ 24小时,τa = 27分钟回合,我们的成功概率超过85%,只需f = 72%;在攻击者的最坏情况下,这只需要3000个机器人,或一个基础设施攻击s = 20组,每组t = 256地址(5120地址)。同样的攻击(f=72%,τa=27分钟)只运行了4个小时,仍然有>55%的成功概率。为了说明这一点,如果有3000个机器人加入今天的 络(有

5 测量实时比特币节点

我们简要地考虑了影响eclipse攻击成功的参数在“典型”比特币节点上的表现。因此,从2014年12月23日到2015年4月2日,我们用公共ip测试了5个比特币节点(连续运行,没有重启)43天。我们还分析了一些其他人在2015年2月15日捐赠给我们的同行文件。注意,有证据表明,不同年龄和不同地区的节点的度量有很大差异[46];因此,我们的分析(第3-4节)和我们的一些实验(第6节)主要关注攻击者的最坏情况,即表最初充满了新地址。

6 实验

现在我们用实验来验证我们的分析。

方法。在我们的每个实验中,受害者(比特币)节点位于攻击机器上的虚拟机上;我们还输入了受害者的密码。

受害节点运行在公共比特币 络(又称主 )上。攻击机器可以从公共比特币 络读取所有受害者的数据包,因此可以从任意IP地址伪造TCP连接。为了发动攻击,攻击机器从每个攻击者地址伪造TCP连接,向受害者建立一个传入连接,发送一个VERSION消息,有时也发送一个ADDR消息(参见附录B),然后断开连接;攻击连接定期发起,很少占用受害者的所有可用的传入连接插槽。为了避免伤害公共比特币 络,(1)我们使用240.0.0.0/8-249.0.0.0/8中的“保留将来使用”的[43]ip作为攻击地址,将252.0.0.0/8作为ADDR消息中发送的“垃圾”地址,(2)我们删除(受污染的)受害者试图发送到公共 络的任何ADDR消息。

在攻击结束时,我们重复地重新启动受害者,并查看它进行了哪些传出连接,丢弃到“垃圾”地址的连接,并为攻击者地址伪造连接。如果所有8个传出连接都是到攻击者的地址,则攻击成功,否则攻击失败。每个实验重新启动受害者50次,并 告成功的百分比。在每次重新启动时,我们将受害者的表恢复到攻击结束时的状态,并将受害者的系统时间倒回到攻击结束时的时刻(以避免在try和new中确定时间戳)。我们重新启动受害者50次,以衡量我们(概率)攻击的成功率;在真正的攻击中,受害者只会重启一次。

初始条件。我们尝试各种初始条件:

  1. 最坏的情况。在攻击者的最坏情况下,受害者最初有尝试过的和新的表,这些表完全充满了具有新鲜时间戳的合法地址。为了设置初始条件,我们在一个刚出生的受害者节点上运行我们的攻击,时间不超过一小时,用251.0.0.0/8、253.0.0.0/8和254.0.0.0/8的IP地址填充尝试和新的地址,我们指定这些地址为 “合法地址”;这些地址在攻击开始时不超过一个小时。然后我们重新启动受害者并开始攻击它。

  2. 移植案例。在我们的移植实验中,我们在2015年8月2日从五个活跃的比特币节点之一复制了尝试过的表和新表,将它们安装在一个使用不同公共IP地址的新受害者中,重新启动受害者,等待它建立8个外接连接,然后开始攻击。这让我们能够在一个一致的初始条件下尝试各种攻击。

  3. 生活情况。最后,在2015年2月17日和2015年2月18日,我们攻击了连接到公共比特币 络的实时比特币节点;此时,我们的节点已经在线了52或53天。

结果(表2)。结果见表2。前五列总结了攻击者的资源(组的数量s,每个组的地址t,在攻击τ上投入的时间长τa每3-4节)。接下来的两列表示初始条件:在攻击之前,try和new地址的数量。

【论文阅读】Eclipse Attacks on Bitcoin’s Peer-to-Peer Network

8 相关工作

比特币点对点 络。最近的研究研究了比特币 络如何延迟或阻止区块传播[31]或用于比特币用户去匿名化[16,17,48]。这些作品讨论了比特币 络协议的各个方面,[16]提供了ADDR消息传播的出色描述;我们关注的是尝试过的和新的表的结构、时间戳以及它们对地址选择的影响(第2节)。[17]表明,通过Tor连接的节点可以被同时操作比特币和Tor的Tor出口节点掩盖。其他工作将比特币对等点映射到自治系统[38],对对等点进行地理定位并测量扰动[34],并使用侧通道来学习比特币 络拓扑[16,51]。

p2p和僵尸 络架构。在建立在分布式哈希表(DHT)基础上的结构化p2p 络中,已经有大量关于日蚀攻击的研究[27, 61, 62];见[64]的调查。许多建议通过添加更多的结构来防御日蚀攻击;[61]限制了对等人的程度,而其他建议则使用基于距离指标的限制,如延迟[42]或DHT标识符[13]。相比之下,比特币使用一个非结构化的 络。虽然我们专注于利用比特币现有 络中的特定怪癖,但其他工作,如[11, 15, 21, 44]设计了新的非结构化 络,对拜占庭攻击有很强的适应性。[44]将行为不端的对等人列入黑名单。Puppetcast的[15]集中式解决方案是基于公钥基础设施[15],这不适合比特币。Brahms[21]是完全去中心化的,而是限制了对等体交换 络信息的速度–这是一个有用的想法,与比特币目前的方法有很大的不同。同时,我们的目标也比这些作品中的目标更加温和;我们并不要求每个节点都有同样的可能被诚实的节点采样,而是只想限制对最初连接良好的节点的蚀刻攻击。因此,我们的反措施受到僵尸 络架构的启发,它们有着相同的目标。Rossow等人[59]发现许多僵尸 络,如比特币,使用非结构化的点对点 络和八卦(即ADDR信息),并描述了僵尸 络如何防御用假信息充斥本地地址表的攻击。Sality僵尸 络拒绝驱逐 “高声誉 “地址;我们的锚定对策也是类似的(第7节)。Storm使用testbefore-evict[30],我们也推荐用于比特币。Zeus [12] 不允许来自同一个/20的多个IP的连接,并通过测试对等人是否在线来定期清理表格;我们的feeler连接也是类似的。

9 结论

我们提出了对比特币点对点 络的eclipse攻击,破坏了比特币的核心安全保证,允许对挖矿和共识系统的攻击,包括n确认双花费和区块链中的对抗分叉。我们的攻击针对的是拥有公共ip的节点。我们建立了攻击的数学模型,并用蒙特卡洛模拟、测量和实验验证了它们。我们通过在自己的实时比特币节点上执行攻击演示了攻击的实际效果,发现一个具有32个不同/24个IP地址块的攻击者,或一个4600个节点的僵尸 络,可以在攻击者最坏的情况下以超过85%的概率掩盖受害者。此外,即使一个400节点的僵尸 络也足以攻击我们自己的比特币活节点。最后,我们提出了使eclipse攻击更加困难的对策,同时仍然保持比特币的开放性和去中心化;最近的一次比特币软件升级中包含了其中的几个功能。

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览92564 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年10月11日
下一篇 2022年10月11日

相关推荐