当您的闪电网络路由节点被永远无法解决的垃圾交易所困扰时,会发生什么?简而言之,这会给路由节点带来很多麻烦。精明的脚本编写者可以用不费吹灰之力就锁定了曾经是一个平滑的全球支付系统.
在一个由路由节点组成的小组中,我们成功地用实际资金对攻击进行了测试,并展示了“悲痛攻击描述 乔斯特·贾格(Joost Jager). 这次袭击称为悲伤袭击,因为它不是偷窃资金,但会导致受害者的闪电资金被冻结:这是一次重大打击。我们发现,悲伤对大型“巨大”渠道构成了严重威胁,这些渠道希望从其比特币中获得收益,而只是将其资金冻结了一段时间.
这主要是一次悲伤的袭击:没有资金损失,但受害人可能被迫为关闭昂贵的通道部队付出代价。这是Mainnet Lightning上的一个已知漏洞,需要对其进行理解和确定优先级,尤其是在比特币Lightning Network的早期市场阶段.
感谢Clark Burkhardt和Phillip Sheppard愿意参加此测试,并感谢Jager所做的不懈努力,以引起人们对这个漏洞的关注和优先考虑。贾格(Jager)在我们的示威活动中扮演了攻击者的角色,而伯克哈特(Burkhardt)和谢泼德(Sheppard)加入了我,成为了互联的受害者路由节点.
攻击如何进行
攻击者将一个(或几个)信道与未确定为最终付款的哈希时间锁定合同(HTLC)饱和。这些是HTLC的特殊种类,称为HODL发票。这些悬而未决的HTLC中只有483个需要使每个方向的信道不堪重负。一旦这些HTLC进入通道,就不可能使用同一通道方向进行任何交易,包括以合作方式关闭该通道的交易.
从理论上讲,攻击者可以与受害者联系(也许通过键盘输入消息或“洋葱团”),并要求支付赎金以停止攻击。支付赎金后,攻击者可以删除未解决的款项,从而结束攻击。攻击可以无限期持续,从而停止该通道中的所有路由和支付活动。这冻结了闪电渠道中的资金.
通过在每个方向上使用入站和出站的483个HTLC,可以在一个通道中停止两个付款方向.
我的平衡通道到Burkhardt的Thunderhub视图受到攻击。该频道显示为“未激活”,就像Burkhardt处于离线状态一样,但他没有。蓝色的数量是饱和状态下的本地余额,绿色的数量是Burkhardt拥有的饱和状态下的远程余额。来源: Thunderhub.
为什么攻击者会做这样的事情?
我想到的第一个动机是要求赎金。这种攻击会给受害者带来痛苦,即使不保证攻击会停止,支付赎金对受害者也可能很有吸引力。与受害者联系可能对攻击者有风险,但赎金付款可能不是某人这样做的唯一原因.
发动悲伤攻击的第二个诱因是破坏路由竞争。阻塞竞争对手的路线可能会增加对攻击者拥有的路线的需求.
作为基准,请考虑Lightning Labs的Loop节点对流动性的需求持续不断,有时它会支付每百万分之2500的付款(ppm)(0.25%)费率。以我的经验,他们通常会在大约两周内耗尽1600万萨特的流动资金(年增长率为5.2%),但这存在竞争.
如果攻击者可以以较低的费率禁用任何竞争路线,则Loop可能愿意支付较高的费率(因为现在减少了流动性供应)。假设Loop将支付3,000 ppm(0.3%)的费用,并且由于没有其他渠道在起作用,因此可以更快地使用这种流动性。 Loop可能会在一半时间(例如一周)内使用该流动性。在此示例中,攻击者的正常收益率将提高一倍以上,达到15.6%。攻击者的唯一成本是在现有频道上运行脚本的成本,以及对闪电网络进行不道德/破坏性行为的心理成本。使用单个攻击者通道,恶意行为者可能会阻塞大约九个通道(请参阅 Jager关于此的推文).
这次攻击经历的受害者是什么?
除非他们为未决的HTLC设置了一些特殊警报,否则此攻击的受害者不会真正知道此攻击是否正在发生。对于Thunderhub用户(强烈推荐的工具),主屏幕将显示挂起的HTLC图表以及警告,指出通道只能容纳483个挂起的HTLC.
资料来源:Thunderhub
在实践中,我的节点很快变得不可靠,并经历了几次应用程序崩溃,其中包括Thunderhub,后者是唯一通知我该问题的应用程序。然后,多亏了我的“ Satoshis平衡” Telegram机器人,我收到了频道关闭通知。受到攻击的通道本身就关闭了!那不应该是实验的一部分。 (有关非自愿关闭力的更多技术信息,请参见下面的其他强制关闭数据。)
由于这次攻击,与Burkhardt(salmiak)一起使用该频道进行的测试付款失败。此警告报告Burkhardt的节点处于脱机状态,尽管该节点处于联机状态。资料来源:Thunderhub.
受害者可以做些什么来阻止悲伤的袭击?
攻击开始后,受害者基本上无法采取任何行动来阻止它。阻止正在进行的攻击的唯一替代方法是强制关闭被攻击的通道,这意味着恐怖分子会获胜.
为了增加侮辱性伤害,强制关闭渠道会将未解决的付款推送到链上交易数据,从而触发第二次链上交易,以强制关闭力量的发起者。以50个sat / vbyte和483个链上交易计算,这很容易以100万个sat的价格标签强制关闭一个受到攻击的频道(按今天的价格收取368美元的频道关闭费)。仅当输出超出最低付款“灰尘”限制时,才会发生多个链上交易。 (看 这个例子 在测试网上。)
闪电通道的发起者支付关闭费.
您可能不希望获得483(无尘)htlcs的另一个原因是,以50 sat / vB的价格可能会发生强制平仓交易,如下所示: https://t.co/z6mAGZxvrC.
收盘费越来越贵,超过一百万.
-Joost Jager(@joostjgr) 2020年9月28日
如何防止悲伤攻击
Jager一直在研究概念验证程序,以帮助隔离和打击攻击者。他称他的程序为“断路器.断路器在网络级别工作,不幸的是,这意味着每个人都必须参与才能使之有效.
除此之外,此问题还需要确定优先级并得到专门工程师/开发人员的关注,以找到更好的解决方案。在修改比特币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)帮助解释了频道阻塞的过程-> 无休止的付款循环(错误)–> 节点向下–> 重新连接–> 无效的提交信号(错误)–> 通道力关闭.
“无尽”循环错误是一个已知错误,它会在达到HTLC限制并发送其他HTLC时发生。 LND不会终止付款失败,而会继续尝试循环付款。要解决此错误,请参阅 LND问题#4656.