区块链常见的故障模式:共识、应用与基础设施风险 |QuicknodeAutomated USDC Yield in Your AppThe Quicknode Earn API handles the vaults, the rebalancing, and the bridging. Live on 7 chains.
Read the announcement 通过 SOC 2 II 类认证 · ISO 27001
答案>了解区块链安全基础知识>常见的区块链故障模式 简而言之:区块链的故障模式涵盖三个不同的层级:共识层故障(验证者漏洞、网络分区、51%攻击)、应用层故障(智能合约漏洞、预言机操纵、治理漏洞)以及基础设施层故障(节点崩溃、服务商中断、云端事故)。 每个层级都有其独特的攻击途径、风险特征和缓解策略。理解这些故障模式对于构建具有韧性的区块链应用程序至关重要,因为在处理真实金融价值的系统中,故障的后果远比传统软件严重得多。
简明解释
区块链常被描述为“无需信任”且immutable”,但这并不意味着它们是万无一失的。与任何复杂的分布式系统一样,区块链可能在多个层面以多种方式发生故障。对开发者而言,关键的认识在于区块链故障具有分层性:如果为其提供数据的神谕被篡改,即使智能合约本身完全安全,仍可能导致用户资金损失;同样,如果底层节点基础设施发生故障,即使应用程序编写得再完美,仍可能出现故障。
不妨把它想象成一栋建筑。地基(共识层)可能会开裂;管道和线路(应用层)可能会漏水或短路;物业管理公司(基础设施层)可能会破产。每种故障mode 不同的防护措施,而真正的韧性则要求同时防范这三种情况。
共识层故障
共识层是每个区块链的基础。它是验证者就哪些交易有效、哪些区块应被添加到链上达成一致的机制。一旦共识失败,后果将极其严重:区块链可能会停滞、重新组织,或产生冲突的区块。
验证者漏洞是共识层最常见的故障模式之一。区块链客户端软件结构复杂,在区块生成、认证逻辑或状态转换计算中的漏洞,可能会导致验证者生成无效区块、在共识轮次中崩溃,或与其他验证者就正确状态产生分歧。当网络中某一种客户端实现占据主导地位时,这种风险会进一步加剧。 如果 70% 的验证者运行相同的客户端,而该客户端存在漏洞,那么网络的 70% 将同时受到影响。这就是为什么客户端多样性——即运行同一协议的多个实现——是区块链安全领域中反复被提及的主题。
当一组验证者无法相互通信时,就会发生网络分区,这通常是由于互联网基础设施问题、针对性的DDoS攻击或地理路由故障所致。 如果分区隔离的验证者数量足够多,以致任一侧都无法达到共识阈值(通常为质押权重的三分之二),区块生成将停止。如果分区是部分的(双方仍可独立达到阈值),链可能会暂时分叉,每个分区都会生成自己的区块。当分区恢复时,通过重组来解决分叉问题,但较短分叉中的交易会被回滚。
51% 攻击(或针对基于 BFT 的区块链的 34% 攻击)允许拥有多数共识算力的攻击者重写最近的区块链历史。攻击者生成一条与主链分叉的私有链,积累更多工作量证明或验证者认证,然后将其广播到网络中。由于攻击者的链具有更大的累积权重,网络会将其采纳为标准链,从而使主链的近期区块成为孤块。 这使得双花攻击成为可能:攻击者在主链上发送资金,等待确认后,再发布一条不包含该交易的私有链,从而既获得了商品,又保留了资金。
应用层故障
应用层涵盖智能合约、DeFi 协议、预言机,以及管理数十亿美元用户资金的链上逻辑。应用层的故障是导致区块链损失最频繁且代价最高的因素。
重入攻击利用了智能合约在更新自身状态之前向另一个合约发起外部调用的漏洞。被调用的合约可以在状态更新发生之前“重新进入”原始合约并再次执行同一函数,从而可能导致资金被盗。 2016年的DAO黑客事件——该事件导致Ethereum ,并造成约6000万美元的损失——就是一次重入攻击。尽管重入漏洞多年来早已广为人知,但在那些未能遵循“检查-效果-交互”模式的新合约中,此类漏洞仍在不断出现。
当算术运算的结果超出数据类型的范围,导致值发生溢出或下溢时,就会发生整数溢出和下溢漏洞。本应产生负数的减法运算,可能会产生一个天文数字般的正数,从而使攻击者能够索取超过其应得数量的代币。 Solidity 0.8.0 版本新增了内置的溢出检查机制,可在发生溢出时回滚交易,但使用旧版本编译的合约或使用未经过检查的算术块的合约仍然存在此漏洞。
当管理功能缺乏适当的授权检查时,就会发生访问控制故障,从而导致未经授权的用户调用仅限合约所有者或特定角色使用的功能。这包括未受保护的升级功能(允许任何人替换合约的逻辑)、提现功能中缺少所有权检查,以及基于角色的访问权限配置不当。
预言机操纵是一种特别隐蔽的攻击手段,因为它利用了链上数据与链下数据之间的接口。那些依赖价格预言机进行借贷、清算或衍生品交易的智能合约,可能会被诱使根据被操纵的价格采取行动。 闪电贷攻击是最常见的攻击手段:攻击者借入大量代币,利用这些代币操纵预言机所参考的去中心化交易所(DEX)上的价格,随后以操纵后的价格在目标协议上触发获利操作,并偿还闪电贷——所有这些操作均在单个原子交易中完成。目标协议的智能合约完全按照设计正常运行,问题出在预言机的设计上,其未能考虑到短期价格操纵的情况。
治理漏洞利用攻击针对的是DAO和DeFi协议的去中心化治理机制。攻击者通过获取足够的治理代币(通常借助闪电贷),来通过恶意提案,从而从金库中提取资金、修改协议参数以制造可被利用的条件,或更改访问控制以获取管理员权限。
基础设施层故障
基础设施层的故障不会危及区块链本身,但会影响应用程序和用户与区块链交互的能力。对于终端用户和开发者而言,基础设施故障与链层故障可能难以区分,因为实际结果是一样的:应用程序无法运行。
节点崩溃和同步失败会导致单个节点离线,或使其提供过时数据。如果某个节点落后于区块链末端几个区块,它将返回过时的余额,遗漏最近的交易,并可能拒绝依赖于近期状态变化的有效交易。依赖单个节点(且未启用故障转移)的应用程序,在该节点发生故障时将完全瘫痪。
服务提供商的故障会同时影响该基础设施提供商的所有客户。如果一家主要 RPC 提供商发生故障,所有使用该提供商端点的应用程序都将无法访问区块链。这在理论上应为去中心化的生态系统中构成了中心化风险:成千上万的应用程序共享同一家基础设施提供商,从而形成了单点故障。
云服务提供商的故障会像影响任何其他云托管服务一样,影响区块链基础设施。当 AWS、GCP 或其他云服务提供商发生区域性故障时,该区域内运行的任何区块链节点都会离线。由于数量过多的区块链节点运行在少数几家云服务提供商上,因此云服务中断可能会对网络健康状况和应用程序可用性产生巨大影响。
即使 RPC 端点运行正常,DNS 和网络故障仍可能导致应用程序无法连接到这些端点。DNS 劫持、BGP 路由问题以及 TLS 证书问题都可能中断应用程序与其区块链基础设施之间的连接。
减缓策略
要防范区块链的故障模式,需要采取一种分层方法,以应对这三个层面。
在共识层,客户端多样性是最具影响力的单一防御措施。运行多个客户端实现意味着某个客户端中的漏洞不会影响整个网络。权益分布同样重要:鼓励建立广泛、去中心化的验证者集,可以降低协同故障和51%攻击的风险。
在应用层,安全审计、形式化验证和漏洞赏金计划是主要的防御措施。
智能合约在部署前应由多家独立机构进行审计。形式化验证能通过数学方法证明合约代码与其规范相符,从而发现人工审查可能遗漏的漏洞。漏洞赏金计划旨在激励白帽黑客发现漏洞并负责任地披露。带时间锁的升级机制可让社区在拟议变更生效前有时间进行审查,从而防止恶意或存在漏洞的升级被立即部署。针对管理功能的多签名要求可确保,即使单个密钥遭到泄露,也无法执行特权操作。
在基础设施层,跨提供商、跨区域和跨云平台的冗余是韧性的基础。应用程序绝不应依赖于单一的 RPC 提供商、单一的数据中心或单一的云服务提供商。断路器通过在故障组件导致上游系统崩溃之前自动将其断开,从而防止连锁故障。平滑降级设计使应用程序即使在部分基础设施组件不可用时,仍能继续提供核心功能(如显示余额)。
Quicknode 如何Quicknode 韧性
Quicknode基础设施旨在通过以下措施来缓解基础设施层的故障:覆盖 14 个以上区域及 5 家以上云服务和裸机服务提供商的地理分布;在条件允许的情况下实现客户多样化;通过自动故障转移将请求从状态异常的节点中分流;以及由专职区块链运维团队提供的 24/7 全天候监控。
Quicknode Streams 通过保证交付、最终性排序处理以及自动重组处理,为数据管道Streams 容错能力。当发生重组等共识层事件时Streams 自动Streams 并更正受影响的数据。在应用层监控方面,Streams 开发人员Streams 监控特定的合约事件、异常交易模式以及状态变化,这些情况可能表明正在发生漏洞利用。
对于可靠性要求最为严格的Quicknode专用Clusters 隔离的基础设施,并附带保证正常运行时间的 SLA,且不受共享流量的影响。这消除了“噪音邻居”的风险——即其他客户的流量激增可能导致您的性能下降——并为关键任务型区块链应用程序提供了所需的隔离环境。
区块链最常见的故障类型有哪些?
上述故障模式可根据其源头所在的层进行分类,这也表明了应对每种故障的责任方。下表总结了最常见的故障、一个典型示例以及相应的缓解措施所在环节。
图层 | 常见故障 | 示例 | 减缓措施的实践之地 |
|---|
共识 | 51%攻击或重组 | 多数派改写了近代史 | 协议与验证者集 |
共识 | 网络分区或停止 | 验证者无法达到阈值 | 协议与客户端的多样性 |
应用 | 再入性或预言机操纵 | 闪电贷款耗尽了贷款池 | 智能合约与审计 |
应用 | 访问控制或治理漏洞 | 未受保护的管理员功能 | 智能合约与多签名 |
基础设施 | 节点崩溃或提供商服务中断 | RPCendpoint 过期数据 | 冗余基础设施 |
如何在区块链故障造成损失之前及时发现它们?
检测能力决定了事件是能得到控制,还是会演变为灾难性事件。对区块链基础设施的持续监控可实时发现节点延迟、错误激增和同步缺口,而更广泛的可观测性则将这些信号与应用程序行为关联起来,使您能够在用户察觉之前,就发现正在酝酿的漏洞利用或服务中断。
“链停”和“链重组”有什么区别?
这两种共识层故障常被混淆。链停会完全停止区块生成,因为验证者无法达到共识阈值,因此无法确认任何新交易。而区块链重组虽然仍会持续生成区块,但会用一条竞争链替换近期已确认的区块,这可能会导致看似已确认的交易被撤销。
基础设施冗余如何降低故障风险?
大多数基础设施层的故障归根结底都源于单点故障。理解基础设施冗余的重要性,将直接促使我们采用多供应商、多区域的设计方案,以及在请求出现错误之前,通过自动故障转移绕过故障节点的机制。
常见问题解答
区块链故障的三个层面是什么?
故障可能源于共识层(验证者漏洞、网络分区、51%攻击)、应用层(智能合约漏洞、预言机操纵、治理漏洞)或基础设施层(节点崩溃、服务提供商及云服务中断)。具有韧性的系统能够抵御这三类故障。
区块链损失的最常见原因是什么?
应用层故障——尤其是智能合约漏洞和预言机操纵——是最常见且造成损失最严重的。底层区块链通常完全按设计正常运行,而存在缺陷的合约或预言机逻辑则被恶意利用。
单个 RPC 提供商出现故障会导致我的应用程序崩溃吗?
是的。如果您的应用程序依赖于单一服务提供商、单一数据中心或单一云区域,那么该处一旦发生故障,您的应用程序就会无法访问。通过将流量分布到具有自动故障转移功能的冗余服务提供商和区域,可以消除这一单点故障。
51%攻击与网络分区是一回事吗?
不。51%攻击是指拥有多数共识算力的参与者蓄意篡改区块链历史,而网络分区则是验证者之间意外失去通信联系。两者都可能导致区块重组,但其成因和防御措施不同。
如何防范预言机操纵?
使用能够跨来源和跨时间汇总价格的预言机,避免仅依赖单一去中心化交易所(DEX)的现货价格,并添加合理性检查和断路器机制。这些措施可以有效抵御因价格数据源短暂失真而引发的闪电贷攻击。
延伸阅读