从表面上看,日蚀攻击(Eclipse Attack)与女巫攻击(Sybil Attack)相似。尽管它们具有某些相似之处(攻击者通过攻击节点扰乱网络),但它们最终的攻击目标是不同的。日蚀攻击的目标是单个节点(原因将在下文中说明),而女巫攻击的目标是整个网络范围,旨在篡改网络协议的信誉体系。
2015年所发表的《在比特币对等网络上的日蚀攻击》论文中,对该概念进行了详尽的讨论,其中来自波士顿大学和希伯来大学的研究人员报告了他们进行日蚀攻击的实验结果,以及与之对抗的防范措施。
日蚀攻击的工作原理
比特币矿工需要专用设备生成验证新区块,但是非挖矿(或完整)节点仅需要非常小的算力即可运行。通过这种方式,任何人都可以在廉价设备上运营节点,这也有助于比特币的去中心化。软件程序维护了与对等方同步的事务处理数据库,以便与网络保持同步。
对大量节点连接的限制因素是带宽。因此,尽管有大量设备可以运行该程序,但比特币网络中设置了连接数量限制(最多只能连接125个),普通设备无法直接与其他设备进行互连。
在日蚀攻击中,攻击者会确保目标的所有连接都建立在攻击者所控制的节点上。攻击者将首先从自己的IP地址向目标地址发送泛洪,受害者可能会在程序重启时连接到攻击者的IP地址。可以强制重启(即对目标进行DDoS攻击),或者仅等待程序自动重启。
如果发生这种情况,毫无戒心的受害者就会听从恶意节点的摆布,攻击者向它们提供了错误数据,他们无法从真实网络中获取到数据。
日蚀攻击造成的后果
如果攻击者通过消耗网络节点的资源,能够使其从网络中分离,那么他们就有动机实施此类攻击。如果节点被隔离了,攻击者就可以实施几次连续攻击。
无需确认的“双花”
如果独立节点接受了未经确认的交易,那么就会发生“双花”风险。如果发生的交易在进入区块之前(提交至区块链),可能已经进行广播了,那么发送方就可以在其他地方轻松得进行一次新的交易,花费掉与此前交易相同的金额。如果新产生的交易手续费较高,这个时候矿工们会优先处理该笔交易,并认为这笔交易是最先发生的,从而造成最先发生的交易无效。
某些商户和个人接受这些0确认交易。假设某个商人Bob,他销售高端汽车。他不知道Alice已将将他的节点进行了日蚀攻击,再看到她的豪华跑车订单后,也没有产生任何怀疑。Alice创建了交易,Bob随即将其广播到网络。在看到付款消息即将被确认后,感到非常满意,他将车钥匙交给了Alice,Alice开车加速离开。
而实际上,交易并没有被广播到网络中,Bob只是将交易传递到了Alice的恶意节点中,而Alice所控制的恶意节点也不会将交易传递到真实节点中。因此,该笔交易会被认为无效,这个时候Alice在(真实)网络上又支付了同样的金额,可以是转给她自己也可以是转给其他人。即使最后在真实网络中看到了最初和Bob之间的初始交易,但由于Alice账户中的资金已经使用掉,该笔交易也无法被验证。
需N次确认的“双花”
需N次确认的“双花”与无需确认的“双花”相类似,只是涉及更多的准备工作。许多商户都希望付款被标记为有效之前能够先等待一定数量的确认。为了解决该问题,攻击者必须使矿工和商户节点都进行日蚀攻击。如果攻击者与商户建立了订单,他们就会向(遭受日蚀攻击)的矿工广播交易。商户可以在区块链网络中看到交易被确认,但由于矿工和商户所在的网络都被隔离了,因此该区块链并不是大多数真实节点所能够见证的。
攻击者将该虚假的区块链网络信息发送给商户,商户在看到交易已经被确认后,就进行了商品的交接。而当这些遭受日蚀攻击的节点重新加入真实网络后,真实的区块链网络会认为这部分节点是无效的,从而将这部分节点进行孤立(这与51%攻击相类似)。
削弱矿工之间的竞争
遭受日蚀攻击的节点会继续运行,不会受到被网络隔离的影响。矿工将继续在协议规定的规则范围内对区块进行验证,但是添加的区块将会在和真实网络节点进行通过的过程中进行丢弃。
从理论上讲,对大部分矿工的大规模日蚀攻击可用于促进51%攻击。就目前的情况而言,即使是最有资源的攻击者,接管大多数比特币算力(约80TH/s)的成本也过于高昂,攻击者至少需要以超过40TH/s的算力进行尝试。
我们假设将这种算力分布在10个参与者中(每个参与者大约拥有8TH/s),攻击者可以通过将这些参与者从网络隔离,大大降低51%攻击的要求。如果其中的5个节点遭受日蚀攻击,攻击者就可以减少40TH/s的算力,用于来寻找下一个区块,并且攻击者现在只需要提高20TH/s的算力即可实现对节点的控制。
通过对目标实施日蚀攻击,可以实现的其他破坏性活动,包括操纵节点进行非法挖矿活动,或利用矿工之间的算力竞争来获取下一个区块。
减缓日蚀攻击的影响
如果拥有足够多的IP地址,攻击者就可以对任何节点实施日蚀攻击。而防止这种情况发生的最直接方法是让阻止节点的非法接入,并仅建立到特定节点(例如已被对等网络中的其他节点列入白名单的IP)的出站连接。但是,正如研究论文所指出的那样,这并不是一种可以大规模实施的方案,如果所有参与者都采取这些措施,则新节点将无法加入到网络。
作者曾对比特币程序提出了的一些调整方案,而其中的一些也在白皮书发布后,集成到了比特币程序中。通过对代码进行较小的修改,例如随机选择新连接和提升地址的存储空间,这些措施都会使日蚀攻击的成本不断升高。
总结
日蚀攻击是在对等网络上进行的。作为一种可独立攻击部署的方式,它们会让人感到厌烦。进行日蚀攻击的真正目的,其实是为了实施其他能够造成更大影响的攻击,或者为攻击者提供了在挖矿方面的优势。