闪电网络易受时间膨胀攻击,防日蚀攻击或成关键
时间膨胀(Time-dilation)攻击,目前似乎是通过日蚀攻击(Eclipse attack)窃取闪电网络用户资金的最实用方法,原因有几个,攻击既不需要调用算力,也不只是针对商家。
这是关于闪电网络时间膨胀攻击的完整论文:https://arxiv.org/abs/2006.01418
简介
为什么它很重要?
只是理论上的问题吗?
难道受害者就没法看到区块停滞的情况吗?
攻击
好吧,怎么解决?
结论
(图片来自:pxhere.com)
比特币底层的协议真的很酷,它们在可扩展性、保密性和功能性方面提供了巨大的机会,但代价是新的安全性假设。
我们都知道支付通道必须受到监控,否则,资金就可能被盗。这听起来有点抽象,为此,我们决定研究一个攻击者究竟要做些什么,才能从闪电网络用户那里窃取到资金。
更具体地说,我们探讨了点对点层攻击如何有助于打破上述假设。每次时间膨胀攻击,攻击者控制受害者对比特币网络的访问(很难,但并非不可能),并延迟向受害者发送区块。之后,攻击者就利用受害者无法及时访问最近区块这一点施行攻击。在某些情况下,仅仅隔离受害者两个小时就足够了。
然后,攻击者在闪电网络上对受害者的通道执行两个(完全按规则行事的)操作,同时提交一个不同的状态。由于受害者在最新的区块链提示方面落后,他们无法检测到这一点并按照协议的要求作出反应。我们演示了攻击者从受害者处窃取资金的三种不同方式,并讨论了这些攻击的可行性/成本。我们还探索了广泛的对策,这可能会大大增加攻击成本。
简而言之,我们的研究收获是:
很多闪电网络用户(特指使用比特币轻客户端的用户)目前易受日蚀攻击(Eclipse attack)。
运行Bitcoin Core全节点的闪电网络用户对日蚀攻击(Eclipse attack)更为健壮,但正如最近的研究所表明的,这些攻击仍然是可能的。
日蚀攻击(Eclipse attack)可通过时间膨胀来窃取LN用户的资金。
仅仅观察慢区块到达,并不能缓解时间膨胀攻击,因此对于第3点,并没有简单的解决方案。
因此,时间膨胀是一种从被遮蔽的用户那里窃取资金的实用方法。这种方法既不需要算力,也不只针对商家。其中,轻(SPV)客户端用户是很好的攻击目标,因为他们容易受到攻击,而全节点用户同样也是很好的攻击目标,因为它们经常被主要的hub(或服务提供商)使用,窃取它们的总流动性,意味着即便是高昂的攻击成本也可能是合理的。
强大的反日蚀攻击措施是关键的解决方案,另外暸望塔(WatchTower)解决方案也很酷。
为什么这很重要?
首先,时间膨胀攻击目前对很多闪电网络客户端都是可行的。同时,这些问题是根本性的,不会消失。我们将在下一节中进一步讨论这个问题。
然而,这项研究工作不应被视为对闪电网络的批评。相反,我们的目标是使闪电网络的安全模型更加清晰。广义而言,了解这些问题并提出缓解措施将有助于使平台更加成熟。当闪电网络受到更广泛的关注时,成千上万的参与者将不得不考虑这些攻击,以确保他们的栈是安全的。
希望我们的研究工作可以:
为比特币和闪电网络协议开发人员提供相关的协议改进和对策。
让闪电网络集成商(如LN服务提供商)做正确的事情(部署对策并使用最佳实践)。
让闪电网络用户对他们使用的软件做出明智的决定。
确保比特币之上的其它协议是安全的。
让大家更关注闪电网络堆栈中不那么核心的部分(例如轻客户端)的安全问题。
只是理论上的问题吗?
攻击者既不必控制密钥基础设施(例如受害者的ISP),也不必租用任何算力。攻击者可以同时从多个通道(甚至属于不同的受害者)进行窃取,以证明攻击的代价是合理的。最后,受害者不一定要是商家。
为了利用时间膨胀来窃取资金,攻击者应打开与受害者的通道,并使受害者的比特币客户端失效(隔离)。前者通常是可行的:LN节点通常默认接受打开通道的请求。
而后者——日蚀攻击(Eclipse attack),通常被认为是非常困难的。
“攻击者可以在不对节点进行物理访问的情况下进行日蚀攻击(Eclipse attack)。” —— Sergi Delgado
根据最新的研究,只有在攻击者能够访问关键的互联网基础设施的情况下,它们才是攻击Bitcoin Core全节点的实用工具。仅仅攻击比特币软件(例如AddrMan poisoning)被认为是不够的。但是,如果攻击者窃取受害者的全部可用资金(甚至是一次攻击几个受害者),并因此可获得很高的收益,那么高昂的攻击成本也是具有合理性的(这是关于闪电网络hub或服务提供商的一个合理假设,一般而言他们都会运行一个全节点)。
至于轻(SPV)客户端,不幸的是,对它们发动日蚀攻击(Eclipse attack)一点也不难。能够为轻客户端提供服务的比特币节点非常少,此外,轻客户端的防女巫(anti-Sybil)机制也很差(Electrum也是一样的问题)。因此,它要求攻击者运行数百个恶意节点/服务器,并向Eclipse轻客户端提供不同的IP。需要明确的是,整个过程需要的时间就是1小时,花费则不到100美元。
但假设轻客户端连接到来自网络的随机比特币节点,这是正确的。如果轻客户端连接到用户自己的比特币节点(通过Neutrino或Electrum),那就很好了。Bitcoin Core 节点仍然可能受到攻击,但问题并没有那么严重。
轻客户端也可以连接到受信任的节点。例如,钱包应用可能有一个比特币轻客户端在后台与钱包开发者的全节点对话。闪电网络应该是非托管的,所以我们不能仅仅假设信任钱包提供商的节点是可以的。如果将受信任的节点与随机节点一起使用,则效果更好,但仍然难以推理。据我们所知,一些顶级的闪电网络钱包就是使用的这种模型。
这里的问题是,该软件可以正确地实现半信任模型(同时具有可信和随机对等节点),但可信方仍然可以时间膨胀攻击受害者的通道。例如,钱包开发者可以一次诈骗所有用户,然后消失。
在我们的研究工作中,我们关注的是一个信任最小化的场景(根本没有可信节点),这类似于比特币威胁模型,尽管大多数时间膨胀方面与受害者的区块源无关(我们仅假设日蚀攻击是可能的)。
难道受害者就没法看到区块停滞的情况吗?
这不是检测时间膨胀攻击的可靠方法,因为挖矿是一个随机过程。例如,比特币网络每天平均有7个区块的间隔时间超过了30分钟,这就是问题很难完全缓解的原因。
Bitcoin Core目前唯一可用的对策是过时提示检测(stale tip detection):如果一个节点在过去30分钟内没有观察到某个区块,它会尝试与网络中的某个人建立新的随机连接。
在论文中,我们认为最佳的攻击策略是在向受害者馈送新的区块之前保持29.5分钟的窗口。在这种情况下,只有其中一个区块自然地花费了太长时间(至少30分钟),攻击才会失败。而失败的概率大约为6%。
失败案例意味着受害者可能有机会(但不能保证)摆脱日蚀攻击。请注意,这一措施并没有在Neutrino中实现,因此攻击者完全可以停止馈送区块,并利用比Bitcoin Core更早的时间膨胀。
需要改进这种检测方法,因为它要么是可愚弄的,要么由于自然的“慢”区块而具有很高的假阳性率。一个诚实的用户无法区分一个“慢”区块是否受到攻击,所以他们只能做出一个很好的猜测。这些解决方案也有问题,因为即使是过时提示检测也有太高的假阳性率(1天7次),尽管它对时间膨胀不是很有效。
其他基于检测的解决方案也不是那么简单。例如,查看区块头中的时间戳是很棘手的,并且要应用的准确分析也不清楚。
那假设成功检测到了,受害者会怎么做?这种反应可归结为反日蚀措施,其应该首先实现,而无需任何触发。这就是为什么我们强调对抗日蚀攻击,是时间膨胀攻击的关键解决方案。
攻击
下面说说攻击的具体方法。
首先,攻击者应使诚实网络受害者的比特币客户端处于被遮蔽的状态。然后攻击者必须找到受害者的闪电网络节点,并与受害者打开一个通道。攻击者也可以从一个开放的通道开始,然后找到并日蚀攻击受害者的比特币客户端,这无关紧要。
在此之后,攻击者必须执行时间膨胀攻击:他们开始以较慢的速度向受害者传送区块,直到受害者比实际提示落后N个区块为止,其中N由特定配置定义(通常为几小时到几天) 。
对于Bitcoin Core,由于其实施了“过时提示检测”规则,时间膨胀速度受到每个区块延迟20分钟的限制。而对于Neutrino,攻击者可简单地停止向受害者提供区块。这就是为什么在下面的描述中,攻击Bitcoin Core需要花费更长的时间。
在我们的描述中,估计的攻击时间是基于论文中提出的最优时间膨胀策略。就数量而言,根据目前的实现,这三种攻击都可能导致窃取闪电网络通道的全部容量。
现在,我们来描述三种从时间膨胀的闪电网络节点的支付通道中窃取资金的方法。
1、通道状态终结攻击,类似于常规的比特币双花:攻击者假装他们同意更新通道状态并接收某些内容,然后使用不同的值关闭通道。由于受害者看不到最新的提示,因此他们不会发送撤销交易。当前实现的默认安全区块delta至少为144个区块,因此攻击者必须对受害者发动至少24小时的日蚀攻击(如果使用的是Bitcoin Core,则是36个小时)。
2、每跳数据包延迟攻击,它是基于受害者的路由,受害者与攻击者应至少有两个通道。
与第一种攻击类似,当受害者最终收到实际的区块链提示时,其做出反应将为时过晚。每次攻击,默认值约为14-144个区块,具体取决于实现情况,因此攻击者必须遮蔽受害者2-24小时(如果受害者使用的是Bitcoin Core,则需要4-36小时)。
3、数据包终结攻击,是最有创意的方法,也是最可行的攻击方法!当受害者向攻击者发送传入HTLC的原像时,攻击者不响应受害者。
在这种情况下,相关的安全策略就要7-11个区块,因此攻击者对受害者发动日蚀攻击最多只需持续2个小时(如果其使用的是Bitcoin Core,则是3个小时)。
好吧,怎么解决这个问题?
首先,WatchTower(瞭望塔)是很实用的(例如The Eye of Satoshi),它们应该可以帮你盯着通道,并且如果有人发动攻击,WatchTower(瞭望塔)就会采取行动。
但从协议的角度来看,这属于欺骗的行为:实际上,这是一种更可信的假设。用户将与WatchTower(瞭望塔)提供商绑定。一些设计提出了负责任的WatchTower(瞭望塔),但同样,这引入了新的假设,应该详细探讨。但毕竟,它们也可能会受到攻击,甚至是出现贿赂的情况!
我们将看到WatchTower(瞭望塔)在实践中是如何运作的,然后让我们考虑一下其它不需要进行新假设的解决方案。
大多数“非欺骗”(即无需信任的)对策都是关于访问比特币网络的冗余方式。越有创意越好!比如Blockstream卫星,或通过闪电网络中继区块头。你也可以在一些冗余的基础设施下运行自己的WatchTower(瞭望塔)(幸运的是,该软件通常是开源的)。
P2P层隐私改进也有帮助。不过,Dandelion可能行不通,Tor也很棘手。但是其他想法还是有希望的。也许将来我们会看到一些混合网(基于Lightning?)或SCION体系结构。
如果您想知道为什么我们不讨论基于检测的解决方案,请回到上面,并在论文中阅读更多内容。(它们可能也有帮助,但还是不够的)
结论
我们相信闪电网络是超级酷的,它已经是比特币堆栈的重要组成部分。它将在未来获得更多的关注,因此安全模型应该得到很好的理解,尤其是因为它不同于比特币的安全模型。时间膨胀就是一个例子:时间膨胀是一种特定于LN的攻击,尽管实际上它需要利用比特币的P2P层。
我们的研究工作详细探讨了时间膨胀攻击,并提出了如何最大程度地减少损害的建议。我们鼓励所有协议开发人员(尤其是那些在轻客户端上工作的开发人员)注意防女巫攻击和防日蚀攻击的措施。
希望我们的工作,将有助于使闪电网络变得更加成熟,并激励系统参与者使用最安全的方案。我们在这里讨论了一些很有意思的观点,但论文当中还有更多,你可以关注。
开放性问题
探索时间膨胀攻击引发了我们两人之间的一系列讨论,我们希望与设法找到此部分的人分享其中的一些话题。这与论文的“讨论”部分不同,因为它们与时间膨胀攻击的关联性较少。
如果这些想法中的任何一个,已经有人讨论过或者正在谈论当中,我们都会很高兴得知!
我们有兴趣探索支付通道的流动性/安全性权衡,特别是针对攻击问题。我们认为,不仅通道容量应该定义CSV/CLTV时间锁定值,还应考虑特定用户的安全性 (例如,是否使用了WatchTower)。
我们也有兴趣探索后单协定(post-unilateral agreement)的新机制。即使是因为Alice的反应迟钝,Bob而单方面发起关闭,Bob也有可能退回到快速合作关闭。
将来,如果闪电网络节点使用“过时提示检测”机制来强制关闭通道,我们可能会看到一群恶意矿工导致一系列通道关闭及费用增加问题的发生。我们有兴趣了解这对矿工是否有利可图,特别是鉴于减半后低区块补贴的情况。在今年早些时候,我们已经在邮件列表中提到了这个问题。
相比日蚀攻击受害者的比特币节点,攻击者可日蚀攻击一个闪电网络节点,以控制受害者接收哪个通道的通知。探索攻击者是否可通过这种方法操纵受害者的路由,来收取费用或监视受害者的付款,将是有趣的。
Scan QR code with WeChat