当闪电网络路由节点被垃圾填充时,会发生什么情况?简而言之,这会给路由节点带来很多麻烦。曾经精明的脚本编写者可以用不费吹灰之力就锁定了曾经是一个流畅的、全球性的支付系统。
在一个由路由节点组成的小组中,我们成功地用资金发起攻击进行测试,并演示了Joost Jager描述的“Griefing”攻击。这次袭击被称为“悲伤”攻击,因为它不是盗窃资金,但它会导致受害者的闪电基金被冻结:一个重大恐慌。我们发现,悲痛攻击是对大型“wumbo”频道的严重威胁,它们希望通过比特币赚取收益,但却被冻结了一段时间。
这主要是一次“悲伤”攻击:没有损失资金,但受害者可能被迫支付昂贵的渠道力量关闭。这是一个已知的主干网闪电漏洞,需要理解和优先考虑,特别是在比特币闪电网络的早期阶段。
感谢Clark Burkhardt和Phillip Sheppard,感谢他们愿意参加这次测试,感谢 Jager不懈的努力,让人们关注和重视这一问题。Jager在我们的演示中扮演了攻击者的角色,而Burkhardt和Sheppard作为连接的受害者路由节点加入了行列。
如何进行攻击操作?
攻击者用散列时间锁定契约(HTLC)使一个(或多个)通道饱和,这些合约不能作为最终付款来解决。这些是HTLC的特殊种类,称为HODL发票。这些未解析的HTLC中只有483个需要按每个方向压倒信道。一旦这些HTLC进入通道,使用该相同通道方向的任何交易都是不可能的,包括合作关闭该通道的交易。
理论上,攻击者可以联系受害者(可能通过密钥发送消息或“洋葱圈”)并要求支付赎金来停止攻击。一旦支付赎金,攻击者就可以移除未支付的款项,从而结束攻击。攻击可以无限期地持续下去,停止该通道中的所有路由和支付活动。这就冻结了闪电频道的资金。
通过在每个方向(入站和出站)使用483个HTLC,可以在一个通道中停止两个付款方向。
为什么攻击者会做这样的事情?
我想到的第一个动机是要求赎金。这种攻击会给受害者带来痛苦,即使无法保证攻击会停止,支付赎金对受害者也可能很有吸引力。与受害者联系可能对攻击者有风险,但是赎金付款可能不是进攻者这样做的唯一原因。
发起悲伤攻击的第二个诱因是破坏路由竞争。阻塞竞争对手的路线可能会增加对攻击者拥有的路线的需求。
作为基准,请考虑Lightning Labs的Loop节点对流动性的需求持续不断,有时它会支付每百万分之2500的付款(ppm)(0.25%)费率。以我的经验,他们通常会在大约两周内耗尽1600万萨特的流动资金(年增长率为5.2%),但这存在竞争。
如果攻击者可以以较低的费用率禁用任何竞争路线,则Loop可能愿意支付较高的费用率(因为现在减少了流动性供应)。假设Loop将支付3,000 ppm(0.3%)的费用,并且由于没有其他渠道在起作用,因此可以更快地使用这种流动性。 Loop可能会在一半时间(例如一周)内使用该流动性。在此示例中,攻击者的正常收益率将翻倍,达到15.6%。攻击者的唯一成本是在现有频道上运行脚本的成本,以及对闪电网络进行不道德/破坏性行为的心理成本。使用单个攻击者通道,恶意行为者可能会阻塞大约九个通道。
这次攻击的受害者会经历什么?
除非他们为未决的HTLC设置了一些特殊警报,否则此攻击的受害者不会真正知道此攻击是否正在发生。 对于Thunderhub用户(强烈推荐的工具),主屏幕将显示挂起的HTLC图表以及警告,指出通道只能容纳483个挂起的HTLC。
来源于: Thunderhub
事实上,我的节点很快变得不牢固,经历了几次应用崩溃,包括Thunderhub,它是唯一通知我问题的应用。然后,由于我的“Satoshis的平衡”电报机器人,我得到了一个频道关闭通知。受到攻击的通道自动关闭了!这不应该是实验的一部分(有关非自愿力合的更多技术信息,请参阅以下附加力合数据。)
由于攻击,使用Burkhardt(salmiak)信道的测试支付失败。这个警告报告说Burkhardt的节点是离线的,尽管它是在线的。来源:Thunderhub.
受害者可以采取什么措施来停止袭击?
攻击开始后,受害者基本上无法采取任何行动来阻止它。 阻止正在进行的攻击的唯一替代方法是强制关闭被攻击的通道,这意味着恐怖分子会获胜。
为了增加侮辱性伤害,强制关闭渠道会将未解决的付款推送到链上交易数据,从而触发第二次链上交易,以强制发起者关闭。 以50个sat / vbyte和483个链上交易计算,这很容易以100万个sat的价格标记来强制关闭一个受到攻击的频道(按今天的价格收取368美元的频道关闭费)。 仅当输出超出最低付款“灰尘”限制时,才会发生多个链上交易。 (请参见测试网上的示例。)
闪电通道的发起者支付关闭费用。
您可能不希望获得483(无尘)htlcs的另一个原因是,以50 sat / vB进行的潜在强制平仓交易如下所示:
https://t.co/z6mAGZxvrC.收盘价越来越贵。
如何防止攻击
Jager一直在进行概念验证计划,以帮助隔离和打击攻击者。他称自己的程序为“断路器”。断路器在网络级别工作,不幸的是,这意味着每个人都必须参与才能使之有效。
除此之外,此问题还需要确定优先级并得到专门工程师/开发人员的关注,以找到更好的解决方案。在Bitcoin Optech时事通讯(第122号或第126号)中,也有关于修改协议的良好讨论。
今天可以执行此攻击。尚未被恶意使用的奇迹。这反映了当今使用Lightning的人们的积极性,因此它可以成为一个开放的,通用的支付网络。请分享您认为合适的这篇文章,以鼓励和激发更多的工作来解决此问题,以免造成实际伤害。
有关非自愿关闭部队的其他技术信息
这是发生上述非强制关闭时来自运行LND 0.11的节点的日志:
2020年11月26日21:24:47.374 [ERR] HSWC:ChannelLink(657759:561:0):没有链接:ChannelPoint(c37bec006b18df172698a84739ca47128935e0a8666fecd1a843e49b01db207c:0):从对等体接收到的错误:chan_id = 7c20db019be443a8d1ec6f66a8e035891247ca3947a8982617df186b00ec7bc3,ERR =拒绝承诺:commit_height = 455,invalid_commit_sig = 3044022076fd65191eb6305b723fa6012be378413b6326e2786c38db58b4c02e1f3999d202207605ca31de8b4c5b1d9cd20dc1581dfa2383e0b4e06c8ad4f718ab5c434d8cf5,commit_tx = 02000000017c20db019be443a8d1ec6f66a8e035891247ca3947a8982617df186b00ec7bc300000000008a792e8002210d0000000000002200201031cf10a1efef261edd3d0a1a6a953b27bc25bd7150bb2b07afdc69805e02157213000000000000160014de650929042bef58b71783ae1a44834a902a8f2d542ca720,sig_hash = 4e0fb804c74376020e4c44a60969b9206eb0aaa9a89b76017d60f23ad5cf63e5,错误:远程错误
日志显示“ invalid_commit_sig”,这是LND中的已知问题。据推测,这可能是在重新连接时发生的,而不是频道卡顿的直接结果。不幸的是,待处理的HTLC的数量使它更有可能发生。杰格(Jager)帮助解释了以下过程:信道阻塞–>无限付款循环(bug)–>节点关闭–>重新连接–>无效提交信号(bug)–>信道强制关闭。
“无尽”循环错误是一个已知错误,当达到HTLC限制并发送附加HTLC时发生。 LND将继续尝试循环付款,而不是结束付款失败。要解决此错误,请参阅LND问题#4656。