当您的闪电网络路由节点被永远无法解决的垃圾交易所困扰时,会发生什么?简而言之,这会给路由节点带来很多麻烦。精明的脚本编写者可以用不费吹灰之力就锁定了曾经是一个平滑的全球支付系统. 在一个由路由节点组成的小组中,我们成功地用实际资金对攻击进行了测试,并展示了“悲痛攻击描述 乔斯特·贾格(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号)中,也进行了一些有关修改协议的很好的讨论。. […]
闪电
插入C-Lightning:Lightning插件的前途一片光明
尝试浏览不同的Lightning实现可能是一个挑战。尽管最初有3种实现方式:c-lightning,eclair和lnd,但随着雷鸟,防锈闪电和Electrum的出现,更多的东西一直无休止地从木制品中脱颖而出。. 通常,似乎开发人员和有抱负的开发人员都基于其所编写的语言选择使用特定的实现或为该实现做出贡献。熟悉Scala吗?选择泡芙。对Rust的潜力感到兴奋吗?选择防锈闪电。但是,还有其他关键考虑因素,例如目标,设计理念,用例和不同实现的权衡取舍。此外,仅因为实施是用某种语言编写的,并不一定意味着您需要使用该语言进行编码才能为该实施周围的生态系统做出贡献. 在Breaking Bitcoin 2019和《比特币杂志》的这篇文章中的一个小组中探讨了lnd和防锈实现之间新出现的对比。尽管Lnd试图减轻开发人员的负担并提供现成的终极功能,但是rust-lightning试图为最终开发者提供最大的灵活性,鼓励他们自带组件并将其插入. 相比之下,c闪电提供了第三种方式。它维护了一个健壮和安全的内核,该内核设计为不被开发人员调整或替换。通过使用可由开发人员以各种语言(例如Python或Go)编写的插件,可以提供灵活性和附加功能。目的是使c-lightning生态系统成为试验新前沿功能的试验台,而这些试验是以前其他实现方式(例如lnd和eclair)的地形,而又不牺牲核心的性能和鲁棒性. 插件是由主lightningd守护程序启动的子进程。他们与lightningd合作。任何超出要求的插件都不需要运行。有些插件确实需要将某些钩子引入lightningd中,这些钩子将通知插件有关内部事件和/或更改lightningd的行为。. 第一个C-Lightning插件 区块流有一个 系列 中的博客文章,展示了c-lightning团队编写的一些首批插件。这些包括“摘要”插件,该插件提供节点状态的摘要,包括satoshis onchain,按法定金额表示的金额,对等点数,通道数,平衡程度等。. “ Probe”插件确定是否存在向网络中某个节点进行付款的途径,返回所需的费用水平,并指示哪些渠道阻止成功付款。这可用于准备将来的付款基础,或仅用于探索网络拓扑. “ Prometheus”插件收集有关节点性能的数据,以提供可视化和警报。使用所有这些插件,您可以选择通过添加功能或从头开始构建自己的插件来为插件做出贡献. 社区插件 在撰写本文时,总共有16个用于c-lightning的“社区管理”插件。这些包括 自动驾驶插件 从Rene Pickhardt构建的库中移植。自动驾驶仪代表用户决定与哪些节点打开通道。用户需要告诉自动驾驶仪他们所控制的资金百分比,要打开的通道数量以及最小通道大小。当远程方打开和关闭通道时,也需要通过lightningd通知自动驾驶仪。建立有效的自动驾驶仪具有挑战性,因为用户偏好(例如最大程度地提高了成功付款的可能性)可能会与网络运行状况(例如分散级别)发生冲突. 还有一个 重新平衡插件, 从而在用户渠道之间移动流动性,以确保有足够的流入和流出流动性;和 无发票付款插件, 这样一来,用户无需先收到发票即可付款。运行c-lightning时,您可以选择打开或关闭这些插件的任意组合. 饰演Lisa Neigut(@niftynei)在她说 暴风雨, c-lightning不会像lnd一样为第三方应用程序开发人员提供“现成的标准化HTTP可访问接口或身份验证方案”。但是社区构建的插件提供了构建其他实现中存在的c-lighting等效项的机会。. 克里斯塔普斯·考普(Kristaps Kaupe) 已经启动了GitHub 回购 用于模拟一些lnd命令的插件。其他值得强调的插件作者是 理查德·邦迪(Richard Bondi), 他在Go中编写了一系列插件,其中包括禁止同行使用的插件; 菲亚特, 谁编写了实现插件 LN URL 帮助付款人与收款人互动;和 科纳·斯科特(Conor Scott), 他用Python编写了许多插件,其中包括一个用于创建具有最大容量节点的通道的插件。最后, 贾斯汀·穆恩(Justin Moon) 建立了一个概念验证插件,用于使用硬件钱包为Lightning频道提供资金. 插件的挑战 尽管此插件体系结构似乎提供了两全其美的优势,但确实带来了一些挑战和潜在的弊端。目前尚不清楚锈闪电的最终灵活性是否意味着它更适合于寻求将闪电整合到其现有代码库中的现有比特币钱包. 此外,随着社区插件数量的增加以及依赖这些插件的比特币价值的增加,安全性和管理性将变得至关重要。插件之间不可避免地会有重复和重叠. 整理是一项具有挑战性的工作,因为它可以有效地建议(非正式地,警告购买者)建议使用哪些插件,哪些不该使用。没有策展,用户和开发人员就不可能在不检查所有竞争插件的情况下快速上手。有一种观点认为,某些语言(和一些开发人员!)更适合于编写对安全性要求很高的软件。但是,特别危险的JSON-RPC方法只能与developer选项一起安装,并且只能在c-lightning团队的帮助下进行测试和调试。对于利用特定钩子可以改变c-lightning默认行为的插件开发人员可能带来的危险,也提供了一些指导。. 这种方法并非为开发人员创造了一个完美的无许可环境,因为某些将来的插件仍然需要c-lightning团队将附加的钩子合并到c-lightning代码库中。例如,一个用于监视watch望塔插件的钩子已插入 讨论 […]

Facebook
Twitter