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