跨链桥安全检查清单:防止桥被利用的 100+ 项检查

  • zealynx
  • 发布于 2天前
  • 阅读 21

本文深入探讨了跨链桥的安全问题,分析了导致多起重大桥被黑事件的关键因素,并提供了一个全面的安全检查清单,涵盖架构、消息传递、资产转移、预言机、经济安全、紧急机制和链特定考虑等方面,旨在帮助开发者和审计人员构建更安全的跨链桥。

简而言之——导致你的桥被黑的 5 件事

正在构建跨链桥? 以下是超过 20 亿美元损失漏洞背后的关键失败之处:

  1. 验证者安全性弱——小型多重签名、密钥管理不善、没有惩罚(Ronin:6.25 亿美元)
  2. 缺少消息验证——签名未正确验证,允许伪造铸币(Wormhole:3.2 亿美元)
  3. 初始化失败——有缺陷的合约设置让任何人都能通过验证(Nomad:1.9 亿美元)
  4. 没有断路器——当漏洞利用正在进行时,无法暂停
  5. 最终性检查不足——在源链达到最终性之前进行铸币

此清单涵盖了 7 个领域中的 100 多项安全检查。 在审核之前、开发期间以及作为启动前的关卡使用它。


🔐 可用的交互式清单

我们创建了此清单的交互式版本,其中包含可扩展的详细信息、代码示例和审核复选框。 非常适合审计师和开发团队。

→ 查看 EVM 跨链桥安全检查表


简介:为什么桥梁安全不可协商

跨链桥已成为多链 DeFi 的关键基础设施。 它们使资产和消息能够在区块链之间流动,从而释放跨生态系统的可组合性。 但这种力量伴随着非凡的风险。

这些数字令人清醒:

  • 6.25 亿美元——Ronin Bridge(2022 年 3 月)
  • 3.2 亿美元——Wormhole(2022 年 2 月)
  • 1.9 亿美元——Nomad Bridge(2022 年 8 月)
  • 1 亿美元——Harmony Horizon(2022 年 6 月)
  • 8000 万美元——Orbit Chain(2024 年 1 月)

桥梁的价值锁定不到 DeFi 总价值的 10%,但却占 DeFi 漏洞利用中所有被盗资金的 50% 以上。 为什么? 因为桥梁非常复杂:它们必须同时跨多个信任边界、共识机制和执行环境保持安全保证。

本清单是从分析 Cyfrin、Pashov、Guardian Audits 和 BailSec 的 18 份以上桥梁审计报告中提炼出来的,并结合了每次重大桥梁漏洞利用的事后分析。 无论你是构建自定义桥、集成 LayerZero 还是实施 Chainlink CCIP,本指南都将帮助你避免成为下一个头条新闻。


如何使用本清单

此清单分为七个关键领域:

  1. 架构和信任模型
  2. 消息传递安全性
  3. 资产转移机制
  4. 预言机和验证安全性
  5. 经济安全
  6. 紧急机制和操作
  7. 特定于链的注意事项

每个部分包括:

  • 为什么重要——背景和真实世界的漏洞利用示例
  • 安全检查——要验证的特定项目
  • 危险信号——表明漏洞的警告信号

对于集成现有桥协议的团队,我们包含了 LayerZeroChainlink CCIP 的专用部分。


1. 架构和信任模型

为什么重要

每个桥都做出了信任假设。 Ronin Bridge 黑客攻击(6.25 亿美元)的发生是因为攻击者攻破了 9 个验证者密钥中的 5 个——信任模型的单点故障。 在编写单行代码之前,你必须定义和捍卫你的信任边界。

安全检查

验证者集安全性

  • [ ] 多重签名阈值是适当的——2/3 多重签名不足以支撑 1 亿美元以上的桥。 考虑阈值签名 (TSS) 或更高的比率(例如,最低 5/9,对于大型 TVL,则为 7/11 或更高)。
  • [ ] 验证者选择是去中心化的——验证者应在地理上分布、组织上独立,并通过透明的标准进行选择。
  • [ ] 密钥管理已加强——硬件安全模块 (HSM)、气隙签名和多方计算 (MPC) 用于密钥生成。
  • [ ] 存在轮换机制——可以删除和替换受损或不活跃的验证者,而不会停止桥。
  • [ ] 定义了惩罚条件——验证者因签署无效消息或双重签名而面临经济处罚。

共识和最终性

  • [ ] 最终性要求适合链——以太坊需要大约 15 分钟才能达到经济最终性; Solana 在几秒钟内实现。 你的桥必须尊重每个链的最终性保证。
  • [ ] 分叉处理是明确的——如果源链在消息中继后重组会发生什么? 桥必须优雅地处理这种情况。
  • [ ] 拜占庭容错 (BFT) 假设已记录——在系统失败之前,可以有多少验证者是恶意的? 这应该是明确的,而不是隐含的。

危险信号

  • 验证者密钥存储在没有 HSM 保护的云环境中

  • 单个组织控制着大多数验证者密钥

  • 没有针对恶意行为的惩罚机制

  • 最终性假设未记录或未测试

    • *

2. 消息传递安全性

为什么重要

Wormhole 漏洞利用(3.2 亿美元)的发生是因为桥未能正确验证消息的来源,从而允许攻击者在没有实际在源链上存款的情况下铸造代币。 消息身份验证是桥的最关键功能。

安全检查

消息身份验证

  • [ ] 源链经过加密验证——消息必须可证明地来自声称的源链。 这通常需要验证者对消息哈希进行签名,包括链 ID。
  • [ ] 消息完整性得到保证——对消息有效负载的任何修改都必须使消息无效。 使用加密哈希和签名,而不仅仅是序列号。
  • [ ] 发送者授权已验证——在目标链上,验证消息是否由源链上的授权合约发送(受信任的远程模式)。

重放攻击预防

  • [ ] Nonce 是按发送者实施的——每条消息都应该有一个唯一的 nonce,不能重复使用。
  • [ ] 存在跨链重放保护——在链 A 上有效的消息不应在链 B 上重放。 在签名有效负载中包含链 ID。
  • [ ] 阻止了历史消息重放——拥有旧的有效消息的攻击者不应能够重新执行它。 跟踪已处理的消息哈希。

消息排序

  • [ ] 定义了排序保证——你的桥是否保证按顺序传递? 如果是,请强制执行。 如果没有,请确保你的应用程序逻辑处理乱序消息。
  • [ ] 存在超时机制——消息应在合理的时间段后过期。 过时的消息存在安全风险。
  • [ ] 重试逻辑是安全的——重试的失败消息不应创建双重执行漏洞。

危险信号

  • 消息验证仅依赖于 msg.sender 检查(可以通过中介合约进行欺骗)

  • 签名消息有效负载中没有链 ID

  • 可以预测或操纵的 Nonce

  • 跨链消息没有过期

    • *

3. 资产转移机制

为什么重要

Nomad Bridge 漏洞利用(1.9 亿美元)是由一个有缺陷的初始化引起的,该初始化允许任何人通过任何消息的验证。 这将桥变成了一个自由放任的场所,攻击者可以通过复制成功的交易并替换接收者地址来耗尽资金。

安全检查

锁定和铸造桥

  • [ ] 强制执行供应量守恒——所有链上包装代币的总供应量绝不能超过源链上锁定的抵押品。
  • [ ] 铸币权限受到严格控制——只有桥合约(经过验证的消息接收者)才能铸造包装代币。 没有管理铸币功能。
  • [ ] 销毁验证已完成——在解锁抵押品之前,以加密方式验证是否在目标链上销毁了包装代币。
  • [ ] 记账是原子的——锁定和铸造(或销毁和解锁)应该是不能部分执行的原子操作。

流动性池桥

  • [ ] 保证池偿付能力——桥不应承诺超过存在的流动性。 在转移之前实施检查。
  • [ ] 强制执行滑点保护——大型转移不应耗尽池或导致过度滑点。 实施每笔交易和每个时代的限制。
  • [ ] 重新平衡是安全的——如果桥重新平衡跨链的流动性,请确保此机制不会被利用以牺牲协议为代价进行套利。

代币处理

  • [ ] 处理了转移时收费代币——在转移时收取费用的代币将导致记账不匹配。 阻止它们或测量实际收到的金额。
  • [ ] 处理了重新调整基数的代币——自动更改余额的代币(如 stETH)需要特殊的记账逻辑。
  • [ ] 代币小数已标准化——不同的链可以用不同的小数位表示相同的代币。 确保转换正确。
  • [ ] 原生代币(ETH/MATIC 等)处理是明确的——包装和解包装逻辑必须万无一失。

危险信号

  • 任何人都可以调用的铸币功能(即使有检查,这也是高风险的)

  • 对包装代币没有供应上限强制执行

  • 通过管理密钥手动重新平衡

  • 使用 transfer() 而不是 safeTransfer() 模式的代币转账

    • *

4. 预言机和验证安全性

为什么重要

依赖外部验证(预言机、轻客户端、中继器)的桥继承了这些系统的安全属性。 Harmony Horizon 桥(1 亿美元)遭到破坏,因为攻击者获得了控制桥的多重签名——预言机的信任假设是最薄弱的环节。

安全检查

预言机集成

  • [ ] 验证了预言机操纵抵抗——如果使用价格预言机,请确保它们能够抵抗闪贷操纵。 使用 TWAP 或多个预言机来源。
  • [ ] 监控了预言机活跃度——过时的预言机数据很危险。 实施心跳检查和回退机制。
  • [ ] 验证了跨链价格一致性——资产价格应在各链上保持一致。 较大的差异可能表明存在操纵。

轻客户端安全性

  • [ ] 已完成区块头验证——如果使用轻客户端,请验证整个标头的有效性,而不仅仅是选定的字段。
  • [ ] 验证了状态证明——必须根据经过验证的区块头完全验证 Merkle 证明。
  • [ ] 客户端更新是安全的——轻客户端更新机制应需要足够的验证者签名,并且不易受到日蚀攻击。

中继器网络

  • [ ] 存在中继器审查阻力——多个独立的中继器应能够中继消息。 没有单个中继器能够审查。
  • [ ] 中继器激励措施已对齐——中继器应在经济上有动力及时、诚实地传递消息。
  • [ ] 定义了失败的中继处理——如果没有中继器接收到消息会发生什么? 用户应该有追索权。

危险信号

  • 关键价格数据的单个预言机来源

  • 可以通过少量密钥更新的轻客户端

  • 没有回退机制的单个中继器

  • 没有监控预言机/中继器活跃度

    • *

5. 经济安全

为什么重要

即使在技术上正确的桥也可能受到经济上的利用。 如果攻击成本低于潜在利润,理性的攻击者将进行攻击。 你的桥的经济安全模型必须使攻击无利可图。

安全检查

攻击成本分析

  • [ ] 破坏验证者的成本 > TVL——破坏足够多的验证者以窃取资金的经济成本应超过风险资金。
  • [ ] 惩罚超过潜在利润——恶意验证者应损失超过他们从攻击中获得的收益。
  • [ ] 大额提款的时间锁定——大额提款应有一个延迟期,以便有时间检测和响应攻击。

费用机制

  • [ ] 费用涵盖运营成本——中继器 gas、验证者基础设施和安全监控都需要资金。 费用应该是可持续的。
  • [ ] 费用计算具有抗操纵性——攻击者不应能够操纵费用计算来耗尽资金或使使用者感到痛苦。
  • [ ] 验证了费用代币——如果可以使用多种代币支付费用,请确保所有代币都经过适当验证和估值。

MEV 保护

  • [ ] 存在抢先交易阻力——由桥创建的跨链套利机会不应被抢先交易者以用户为代价提取。
  • [ ] 三明治攻击保护——大型转移应受到任一链上的三明治攻击的保护。
  • [ ] 考虑了定序器/验证者 MEV——在具有中心化定序器的 L2 或链上,请考虑定序器 MEV 如何影响桥用户。

危险信号

  • TVL 显著超过风险中的验证者权益

  • 大额提款没有提款延迟

  • 以未经验证或易于操纵的代币支付的费用

  • 在桥设计中没有考虑 MEV

    • *

6. 紧急机制和操作

为什么重要

当 Nomad 桥被利用时,没有断路器。 攻击者在几个小时内耗尽了 1.9 亿美元,而团队则争先恐后地做出回应。 每座桥都需要一个紧急停止开关。

安全检查

断路器

  • [ ] 存在暂停功能——可以在紧急情况下快速暂停桥。 这应需要最少的签名者(例如,1/N 监护人)。
  • [ ] 可以按链暂停——如果一条链受到破坏,你应该能够仅暂停该链,而不会影响其他链。
  • [ ] 存在基于数量的限制——在检测到异常数量时自动进行速率限制。 减缓潜在的漏洞利用。
  • [ ] 存在速度控制——限制资金离开桥的速度,即使对于合法交易也是如此。

恢复机制

  • [ ] 记录了资产恢复程序——如何恢复由于错误或失败的交易而卡在桥中的资金?
  • [ ] 事件发生后的状态同步——如果桥在操作中暂停,你如何协调跨链的状态?
  • [ ] 存在用户补偿机制——如果用户因桥问题而损失资金,如何对他们进行补偿?

运营安全

  • [ ] 密钥管理遵循最佳实践——多方计算、硬件安全模块、地理分布。
  • [ ] 访问控制是最小权限原则——每个角色都应仅具有其所需的权限。
  • [ ] 监控和警报是全面的——实时监控异常活动,并自动发出警报。
  • [ ] 存在事件响应计划——记录了常见事件类型的程序,并具有明确的角色和沟通渠道。

危险信号

  • 没有暂停功能或暂停需要太多的签名者

  • 没有速率限制或数量上限

  • 所有管理密钥由同一实体/位置持有

  • 没有记录的事件响应计划

    • *

7. 特定于链的注意事项

EVM 链

  • [ ] 处理了 gas 限制差异——交易 gas 限制因链而异。 确保跨链调用不会因 gas 限制而失败。
  • [ ] 考虑了区块时间差异——确认要求应基于最终性,而不是区块计数。
  • [ ] 验证了预编译可用性——某些 EVM 链缺少某些预编译。 验证加密操作是否在所有目标链上都有效。
  • [ ] 确认了 EIP 兼容性——不同的 EVM 链支持不同的 EIP。 验证你的合约是否在所有目标上都有效。

非 EVM 链(Solana、Cosmos 等)

  • [ ] 处理了帐户模型差异——基于 UTXO 与基于帐户的模型需要不同的安全注意事项。
  • [ ] 签名方案是兼容的——Ed25519 与 secp256k1——确保签名验证跨链有效。
  • [ ] 了解了最终性模型——概率性与确定性最终性需要不同的确认策略。
  • [ ] 程序/合约升级模式不同——了解每个链上的升级方式并相应地进行保护。

L2 特有

  • [ ] 记录了定序器信任假设——中心化定序器可以审查或重新排序交易。

  • [ ] 考虑了提款延迟——Optimistic Rollup 具有 7 天的提款窗口。 你的桥 UX 必须考虑到这一点。

  • [ ] 存在 L1 回退——如果 L2 定序器出现故障,用户应该能够通过 L1 退出。

    • *

LayerZero 集成清单

如果你正在 LayerZero 上构建,则适用以下附加检查:

端点配置

  • [ ] 正确配置了受信任的远程端点——每个链的合约都必须显式信任其他链上的正确合约地址。
  • [ ] 路径配置是最小的——仅启用你实际需要的路径(链对)。
  • [ ] 库版本已固定——不要在没有审核更改的情况下自动升级到新的 LayerZero 库。

消息处理

  • [ ] 无法直接调用 lzReceive——只有 LayerZero 端点才能调用你的接收函数。
  • [ ] gas 转发受到限制——不要将无限的 gas 转发到目标调用。 实施上限。
  • [ ] 处理了失败的消息——实施 nonblockingLzReceive 模式以防止一条失败的消息阻止所有后续消息。
  • [ ] 验证了适配器参数——应验证自定义适配器参数以防止 gas 操纵攻击。

OFT(全链同质化代币)特有

  • [ ] 共享小数位是一致的——OFT 使用共享小数位进行跨链记帐。 确保一致性。

  • [ ] 实施了速率限制——大型转移应触发速率限制以防止快速耗尽。

  • [ ] 了解了信用系统——了解 LayerZero 的信用系统如何运作及其对你的代币的影响。

    • *

Chainlink CCIP 集成清单

对于使用 Chainlink CCIP 的团队:

路由器配置

  • [ ] 验证了支持的链——CCIP 仅支持特定的链对。 验证你的链是否受支持。
  • [ ] 费用代币已批准——必须批准 LINK 或原生代币用于支付费用。
  • [ ] gas 限制已适当设置——目标 gas 限制必须足以满足你的回调逻辑。

消息处理

  • [ ] ccipReceive 受到适当保护——只有 CCIP 路由器才能调用此函数。

  • [ ] 消息验证已完成——验证源链、发件人地址和消息内容。

  • [ ] 配置了速率限制——CCIP 支持速率限制——为你的用例配置适当的限制。

  • [ ] 处理了乱序执行——CCIP 不能保证消息排序。 你的逻辑必须处理这一点。

    • *

测试你的桥

安全检查仅与你的测试一样有效。 以下是你的测试套件应涵盖的内容:

单元测试

  • [ ] 消息编码/解码边缘情况
  • [ ] 使用各种代币类型的费用计算
  • [ ] 所有特权功能的访问控制
  • [ ] 暂停和取消暂停功能

集成测试

  • [ ] 完整的往返转移(来源 → 目的地 → 来源)
  • [ ] 失败的消息处理和重试逻辑
  • [ ] 多链状态一致性
  • [ ] 所有链上的升级程序

对抗性测试

  • [ ] 重放攻击尝试
  • [ ] 消息伪造尝试
  • [ ] 验证者串通场景
  • [ ] 经济攻击(例如,耗尽流动性池)

混沌测试

  • [ ] 验证者之间的网络分区

  • [ ] 待处理转移期间的链重组

  • [ ] 验证者节点故障

  • [ ] 高延迟网络条件

    • *

启动之前:最终清单

  • [ ] 完成了多个独立的审计——至少来自信誉良好的公司的两次审计,并解决了所有发现。

  • [ ] 启动了漏洞赏金计划——激励白帽黑客在黑帽黑客之前发现漏洞。

  • [ ] 监控和警报已启动——实时了解桥操作,并自动发出警报。

  • [ ] 确定了事件响应团队——指定了具有明确责任和沟通渠道的个人。

  • [ ] 计划了渐进式推出——从低 TVL 上限开始,并随着信心的增强逐渐增加。

  • [ ] 考虑了保险或用户保护基金——如果出现问题,将如何弥补受影响的用户的损失?

    • *

结论:构建持久的桥

跨链桥是 DeFi 中最复杂和高风险的系统之一。 安全桥和 1 亿美元的漏洞利用之间的区别通常归结为容易被忽略的细节:缺少验证检查、不正确的信任假设或未处理的边缘情况。

将此清单用作起点,而不是终点。 每座桥都是独一无二的,你的安全分析应根据你的特定架构、信任模型和目标链量身定制。

桥安全出错的代价是以数亿美元来衡量的。 正确的安全代价是什么? 彻底的审计和严格的开发实践。 明智地选择。


联系我们

正在构建跨链桥或将其集成到你的协议中? 安全不是可选项——它是生存之道。

在 Zealynx,我们审计了桥、跨链消息传递协议和全链 DeFi 应用程序。 我们知道漏洞隐藏在哪里以及如何在攻击者找到它们之前修复它们。

准备好保护你的桥了吗? 获取报价直接联系 以讨论你的项目。


附加资源

常见问题解答:跨链桥安全

  1. 桥漏洞利用最常见的原因是什么?

验证者或密钥泄露是主要原因。 Ronin Bridge(6.25 亿美元)和 Harmony Horizon(1 亿美元)黑客攻击都是由于攻击者获得了足够的验证者密钥控制权,从而授权了欺诈性提款。 适当的密钥管理、阈值签名和验证者多样性至关重要。

  1. 桥安全与常规智能合约安全有何不同?

桥必须同时跨多个信任边界维护安全。 来源链或目标链上的漏洞——或连接它们的验证者/中继器层中的漏洞——可能会危及整个系统。 与单链协议相比,这增加了攻击面。

  1. 我应该构建自定义桥还是使用现有的协议,如 LayerZero 或 CCIP?

对于大多数团队来说,集成已建立的桥协议更安全。 LayerZero、Chainlink CCIP 和类似协议已经过广泛的审计和实战测试。 只有当你有现有解决方案无法满足的特定要求——以及安全构建的专业知识时,自定义桥才有意义。

  1. 在启动之前,桥需要进行多少次审计?

至少来自信誉良好的公司的两次独立审计。 桥是具有复杂攻击面的高价值目标。 不同的审计师会发现不同的问题。 此外,运行漏洞赏金计划并考虑对关键组件进行形式化验证。

  1. 锁定和铸造桥与流动性池桥之间有什么区别?

锁定和铸造桥在来源链上锁定资产,并在目标链上铸造包装代币。 流动性池桥使用每个链上预先注资的池并在它们之间交换。 锁定和铸造的资本效率更高,但需要信任托管机制。 流动性池有滑点,但可以提供原生资产。

  1. 如何保护我的桥免受重放攻击?

在所有签名消息中包含链 ID,跟踪已处理的消息哈希以防止重新提交,对每个发件人使用顺序 nonce,并设置消息到期时间。 EIP-712 域分离也有助于防止跨协议重放攻击。


术语表

术语 定义
跨链 不同区块链网络之间的通信或资产转移。
多重签名钱包 需要多个私钥才能授权交易的钱包。
拜占庭容错 即使某些参与者恶意行事,系统也能正常运行的能力。
轻客户端 无需下载完整链状态即可验证交易的区块链客户端。
验证者集 负责验证交易并达成共识的节点组。
锁定和铸造 一种桥机制,其中资产在来源链上锁定,包装代币在目标链上铸造。
断路器 一种紧急机制,用于在检测到异常情况时停止协议操作。
重放攻击 一种攻击,其中恶意地重新提交有效的交易以多次执行。

查看完整术语表 →

  • 原文链接: zealynx.io/blogs/cross-c...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
zealynx
zealynx
江湖只有他的大名,没有他的介绍。