跳到正文

日蚀攻击:隔离、检测与节点防御

了解日蚀攻击如何隔离区块链节点、为何有效数据仍可能造成虚假网络视图,以及节点多样性和独立核验如何降低风险。

更新于

仅供教育用途,不构成投资建议。投资可能导致损失。

直接回答

日蚀攻击通过控制目标节点的全部或足够多的网络连接,将其与诚实节点隔离。随后,攻击者可以延迟、压制或选择性转发区块和交易,使受害节点看到由攻击者塑造的网络视图。

受害节点可能仍在验证签名、工作量证明和所有其他共识规则,但这并不代表它看到的视图完整或处于最新状态。一个执行完整验证的节点可以拒绝无效数据,却仍可能被困在一条有效但陈旧的分支上、无法看到冲突交易,或被误导其对更广泛网络已接受内容的判断。

这与全网范围的多数攻击不同。攻击者在点对点网络层针对一个节点或有限数量的节点,无须控制网络的大部分挖矿算力或质押。女巫攻击可以通过提供大量由攻击者控制的身份或地址来协助日蚀攻击,但两者并不相同:女巫攻击描述身份倍增,日蚀攻击描述成功隔离受害者的信息视图。

隔离如何实现

点对点客户端会发现候选地址、保存地址、选择出站节点、接受部分入站节点,并在连接失败或重启后重新连接。具体算法因客户端和版本而异。攻击者会寻找办法,使足够多的选择偏向其控制的基础设施。

一种典型的攻击路径分为 4 个阶段:

  1. 准备攻击者控制的节点。 攻击者在多个地址上运行可连接的节点或身份,而受害节点的节点选择规则很可能把这些地址视为彼此独立。
  2. 使候选集产生偏差。 恶意节点传播由攻击者控制的地址,或以其他方式试图把诚实条目挤出受害节点的地址管理器。实际可行性取决于存储桶设计、网络组规则、速率限制,以及已保存地址的质量。
  3. 触发或等待重新连接。 重启、连接频繁变动、拒绝服务或路由中断,都可能迫使目标替换诚实节点。当目标缺少独立路径,或一开始的地址数据库较弱时,更容易被隔离。
  4. 垄断连接并过滤信息。 一旦受害节点的相关连接都通向攻击者,攻击者便只转发其选定的区块和交易,而且往往仍遵守共识规则,以免立刻被拒绝。

2015 年的 USENIX 研究针对当时的比特点对点实现展示了此类攻击,并说明了包括基于确认的双花、自私挖矿协助以及对抗性分叉在内的后果。其具体资源估算和客户端细节属于历史情况,并不是当前 Bitcoin Core 或其他网络普遍适用的常量。

现代客户端可以借助随机化且分段的地址存储、节点来源多样性、测试连接、受保护的出站或区块中继连接、跨重启锚点、驱逐规则以及地址转发限制,提高隔离攻击的成本。这些措施是分层缓解手段,并不能证明日蚀攻击绝无可能发生。

支付示例与应对

假设商户的节点收到一笔付款并显示 6 confirmations。若攻击者已对该节点实施日蚀攻击,就可能向它展示一条包含该付款、由攻击者私下维护的有效分支,而诚实网络已接受一笔冲突交易。如果商户仅依据这个被隔离节点便交付不可追回的商品,显示的确认数并不能证明诚实网络已经确认该付款。

事件响应应先保全证据,再进行会造成中断的更改:

  • 记录报告的链尖、累计工作量、近期区块哈希、节点列表、连接方向、网络类型、可用时映射的自治系统,以及最后收到区块的时间戳。
  • 将链尖和交易状态与独立运营的节点进行比较,并确保这些节点通过真正分离的网络和管理路径访问。公共区块浏览器只有在其基础设施同样独立时才有参考价值。
  • 当独立视图不一致时,暂停高价值结算或自动交付。来自同一个隔离视图的更多确认无法解决问题。
  • 切换到已知可靠的软件和配置,调查 DNS、路由、防火墙、代理和主机是否遭入侵,并按照客户端记录的恢复流程重建节点状态。
  • 逐步重新连接,并核实节点、网络组、区块到达、链工作量和交易观察是否变得多样。不要盲目恢复可能已被污染的节点数据库。
  • 保留日志,并将事件上报给节点或协议安全团队。疑似日蚀攻击可能与普通故障、路由事件或范围更广的主机入侵同时发生。

在 Bitcoin Core 30.0 中,getpeerinfo 会提供 networkmapped_asinboundlast_blocksynced_headerssynced_blocksconnection_type 等字段。这些字段有助于调查,但没有任何一个字段能单独证明节点已被隔离。监控系统应建立正常基线,并把节点集中度与独立的链观察结果关联起来。

风险与控制措施

  • 针对收款方的双花: 受害者可能看到攻击者控制的分支上产生了确认。对于高价值或不可撤销的交付,应要求独立观察,并设置与结算风险相匹配的限额。
  • 挖矿或验证者中断: 被隔离的运营方可能基于陈旧信息工作、损失收入,或帮助形成对抗性分支。应在生产节点之外监控链工作量、链头新鲜度和节点多样性。
  • 选择性审查: 攻击者无须发送无效数据,也能隐藏交易或延迟区块。应针对异常的区块到达间隔,以及独立观察者之间的分歧发出警报。
  • 跨链桥、预言机和 RPC 故障: 信任单一上游节点的链下服务可能转发陈旧状态,或漏掉链重组。应采用由不同主体独立管理、通过不同网络连接的多个数据源,并制定明确的法定数量和新鲜度规则。
  • 连接数量造成的虚假信心: 由同一组织、同一网络或同一地址来源控制的 20 个节点,其独立性可能还不如一个规模更小但更多样的节点集合。应衡量多样性,而不只是数量。
  • 固定节点造成的中心化: 手动配置一个可信节点可以绕过被污染的候选池,却会形成单点故障。如果适合使用固定锚点,应采用多条独立运营的路径,并保留随机连接。

节点运营方应持续使用仍受支持的客户端版本,了解特定客户端的节点管理默认设置,保护管理权限,并同时监控入站和出站拓扑。支付和协议运营方应将签名、广播、链观察和交付决策彼此分离,使一个被隔离的节点无法自行授权不可逆操作。

常见误解

  • 完整节点不会被骗。 完整节点会拒绝违反共识的无效数据,但它不会自动知道诚实节点是否对其隐瞒了一条更优的有效链。
  • 确认数高就一定足够安全。 确认只有相对于当前观察到的链视图才有意义。当存在隔离可能时,观察路径的独立性非常重要。
  • 增加节点总能解决问题。 只有当更多节点的所有权、网络路径、发现来源和故障模式足够独立时,它们才有帮助。
  • 日蚀攻击和女巫攻击是同一种攻击。 女巫攻击的资源可以让隔离更容易实现,但日蚀攻击指的是攻击者最终控制了受害节点的节点视图。
  • 只要一个区块浏览器的结果一致,就能证明节点健康。 该浏览器可能与受影响系统共用上游服务商、网络路径或管理域。
  • 任何陈旧节点都遭到了攻击。 软件缺陷、网络拥塞、维护、路由故障和资源耗尽都可能产生类似症状。应将日蚀攻击视为一个假设,并通过多个信号进行检验。

相关主题

来源

导航

搜索知识库...