{"content":{"title":"跨链桥 Bug 概述","body":"作者：Konstantin Nekrasov - MixBytes 的安全研究员\r\n\r\n![](https://img.learnblockchain.cn/2025/03/09/33.jpg)\r\n\r\n## 简介\r\n\r\n区块链桥在加密货币和区块链技术的世界中是一个重要工具。它们允许不同的区块链网络进行交流和信息交换，从而更容易在不同链之间转移资产。然而，像任何技术一样，存在被黑客攻击和安全漏洞的风险。了解潜在的漏洞以及如何防范它们对于确保资产的安全至关重要。在本文中，我们将概述区块链桥的黑客攻击并讨论预防和缓解这些攻击的方法。\r\n\r\n## Ronin\r\n\r\n描述\r\n\r\nRonin 采用了 5/9 验证者方案进行交易签名。攻击者成功入侵了控制 4 个验证者的 Sky Mavis。看起来 Sky Mavis 和 Axie DAO 之间存在一种安排，实际上允许 Sky Mavis 访问另一个（第五个）验证者。因此，通过黑客攻击 Mavis，攻击者获得了所有必要的 5/9 验证者进行交易签名。\r\n\r\n漏洞类型：服务器端黑客攻击\r\n\r\n建议：可以采取几项措施来帮助防止类似于 Ronin 网络发生的攻击：\r\n\r\n1. 去中心化：防止此类攻击的一项关键措施是确保系统是去中心化的，这意味着不由少数实体控制。通过在更多参与者之间分配控制权，使单个攻击者获得足够的控制以执行成功攻击变得更加困难。\r\n2. 最小权限：确保用户和系统仅获得执行其预期功能所需的最小权限非常重要。这有助于减少潜在的攻击面，并使攻击者更难获得敏感系统或数据的访问权限。\r\n3. 监控：实施有效的监控可以帮助检测可疑活动并提醒管理员潜在的攻击。这可以确保及时响应，并可能帮助防止或减轻攻击的影响。\r\n4. 建议进行的不仅是智能合约代码审计，还应审计整个系统，包括其部署方式和服务器端。这将有助于确保系统的安全性和可靠性。\r\n\r\n需要注意的是，没有任何系统可以完全免受攻击，始终制定应急计划以应对成功攻击的潜在后果是明智的。\r\n\r\n日期： 2022年3月29日\r\n\r\n被盗金额：$625,000,000.00\r\n\r\n链接：- [https://bridge.roninchain.com/](https://bridge.roninchain.com/)\r\n- [https://twitter.com/Ronin_Network/status/1508828719711879168](https://twitter.com/Ronin_Network/status/1508828719711879168)\r\n- [https://roninblockchain.substack.com/p/community-alert-ronin-validators?s=w](https://roninblockchain.substack.com/p/community-alert-ronin-validators?s=w)\r\n- [https://halborn.com/explained-the-ronin-hack-march-2022/](https://halborn.com/explained-the-ronin-hack-march-2022/)\r\n\r\n## Wormhole\r\n\r\n描述\r\n\r\nSolana 的 Wormhole 黑客事件发生在攻击者能够绕过用于验证区块链之间转移的签名检查时。他们通过使用一个虚假的 “SignatureSet” 实现这一点，该签名集是通过在主桥上调用 \"verify_signatures\" 函数生成的，但将签名验证所用的系统程序替换为虚拟账户。这使攻击者能够创建有效的“验证者行动批准”（VAA）并触发未经授权的铸造，将 120,000 ETH 转入他们自己的账户。随后，攻击者将其中的 93,750 ETH 桥接回以太坊，目前仍然在黑客的钱包中。该漏洞的成因是合约中的一个缺陷，该缺陷没有正确验证所有输入账户，允许攻击者绕过签名检查并触发未经授权的铸造。\r\n\r\n漏洞类型：缺失验证的加密预编译\r\n\r\n技术细节\r\n\r\n[@samczsun 在 Twitter 上有一条详细的推文](https://twitter.com/samczsun/status/1489044939732406275) 介绍了黑客的技术细节。\r\n\r\nverify_signatures 函数旨在接受由守护神提供的签名集，并将其打包成一个 SignatureSet。但它实际上并不执行任何验证。这一工作反而是委托给 Secp256k1 程序。\r\n\r\n![](https://img.learnblockchain.cn/2025/03/09/image.png)\r\n\r\n问题在于，solana_program::sysvar::instructions 模块应该与 Instructions sysvar 一起使用，这是 Solana 上的一种预编译。然而，Wormhole 使用的 solana_program 版本没有验证所使用的地址。\r\n\r\n![](https://img.learnblockchain.cn/2025/03/09/image.png)\r\n\r\n这意味着你可以创建自己的账户，该账户存储与 Instructions sysvar 相同的数据，并在调用 verify_signatures 时将该账户替换为 Instruction sysvar。这实际上完全绕过了签名验证。\r\n\r\n建议\r\n\r\nWormhole 没有验证用于签名验证的 Secp256k1 程序的地址。因此，使用系统组件地址的白名单一般是有帮助的建议。\r\n\r\n日期：2022年2月2日\r\n\r\n被盗金额： $326,000,000.00\r\n\r\n链接：\r\n\r\n- [https://twitter.com/wormholecrypto/status/1489001949881978883](https://twitter.com/wormholecrypto/status/1489001949881978883)\r\n- [https://twitter.com/peckshield/status/1489053988716568577](https://twitter.com/peckshield/status/1489053988716568577)\r\n- [https://cointelegraph.com/news/wormhole-token-bridge-loses-321m-in-largest-hack-so-far-in-2022](https://cointelegraph.com/news/wormhole-token-bridge-loses-321m-in-largest-hack-so-far-in-2022)\r\n- [https://wormholenetwork.com/](https://wormholenetwork.com/)\r\n- [https://extropy-io.medium.com/solanas-wormhole-hack-post-mortem-analysis-3b68b9e88e13](https://extropy-io.medium.com/solanas-wormhole-hack-post-mortem-analysis-3b68b9e88e13)\r\n- [https://twitter.com/samczsun/status/1489044939732406275](https://twitter.com/samczsun/status/1489044939732406275)\r\n\r\n## Nomad\r\n\r\n描述\r\n\r\n攻击是由于 Nomad 的其中一个智能合约的近期更新引起的，该更新将受信任的根初始化为 0x00。这引发了每条消息自动证明的意外效果，允许用户伪造交易并提取不属于他们的资金。该事件引起了人们对跨链桥安全性以及在实施更新之前进行全面测试和风险评估的重要性的关注。\r\n\r\n漏洞类型： 错误部署\r\n\r\n技术细节\r\n\r\n[@samczsun 在 Twitter 上有一条详细的推文](https://twitter.com/samczsun/status/1489044939732406275) 介绍了黑客的技术细节。\r\n\r\n这留下了一个可能性 - Replica 合约内存在致命缺陷。那么，怎么可能呢？快速查看表明，提交的消息必须属于一个可接受的根。否则，第 185 行的检查将失败。\r\n\r\n![](https://img.learnblockchain.cn/2025/03/09/image1.jpg)\r\n\r\n幸运的是，有一个简单的方法可以检查这个假设。我知道，未经证明的消息的根将是 0x00，因为 messages[_messageHash] 将是未初始化的。我所要做的就是检查该合约是否会接受该根。\r\n\r\n![](https://img.learnblockchain.cn/2025/03/09/image2.jpg)\r\n\r\n哎呀……\r\n\r\n![](https://img.learnblockchain.cn/2025/03/09/image3.jpg)\r\n\r\n事实证明，在一次例行升级中，Nomad 团队将受信任的根初始化为 0x00。必须明确的是，使用零值作为初始化值是一种常见的做法。不幸的是，在这种情况下，这产生了一个微小的副作用，即自动证明每条消息。\r\n\r\n建议\r\n\r\n在任何部署或重新部署之前，拥有良好的测试覆盖率和运行测试是 minimizing 引入系统漏洞风险的重要实践。在 Nomad 代币桥的情况下，严格的测试过程可能会发现将受信任的根初始化为 0x00 的问题，该问题意外地导致每条消息自动证明，并使用户能够伪造交易。\r\n\r\n确保良好测试覆盖率的重要方法是拥有全面的测试套件，涵盖尽可能多的不同场景和边缘案例。这可能包括单元测试、集成测试和端到端测试。建立一个包括手动和自动测试的稳健测试流程至关重要。\r\n\r\n除了运行测试外，定期审查和更新测试流程，以确保其有效性并覆盖所有相关领域也很重要。这可能包括审查正在运行的测试类型、测试覆盖率以及运行和审查测试结果的流程。\r\n\r\n总的来说，保持良好测试覆盖率和在任何部署或重新部署之前运行测试是维护系统安全性和稳定性的一个重要组成部分。这有助于识别和解决潜在问题，以防止它们导致任何危害。\r\n\r\n日期：2022年8月1日\r\n\r\n被盗金额：$190,000,000.00\r\n\r\n链接\r\n\r\n- [https://cointelegraph.com/news/nomad-token-bridge-drained-of-190m-in-funds-in-security-exploit](https://cointelegraph.com/news/nomad-token-bridge-drained-of-190m-in-funds-in-security-exploit)\r\n- [https://www.coindesk.com/tech/2022/08/02/nomad-bridge-drained-of-nearly-200-million-in-exploit/](https://www.coindesk.com/tech/2022/08/02/nomad-bridge-drained-of-nearly-200-million-in-exploit/)\r\n- [https://www.nomad.xyz/](https://www.nomad.xyz/)\r\n- [https://www.livemint.com/news/world/cryptocurrency-how-nomad-token-bridge-hack-took-place-that-drained-nearly-200-million-funds-in-exploit-11659418968336.html](https://www.livemint.com/news/world/cryptocurrency-how-nomad-token-bridge-hack-took-place-that-drained-nearly-200-million-funds-in-exploit-11659418968336.html)\r\n- [https://twitter.com/samczsun/status/1554252024723546112](https://twitter.com/samczsun/status/1554252024723546112)\r\n- [https://threadreaderapp.com/thread/1554252024723546112.html](https://threadreaderapp.com/thread/1554252024723546112.html)\r\n\r\n## Harmony 的 Horizon\r\n\r\n描述\r\n\r\nHarmony Bridge 由一个 2/5 多重签名保护，其中以下地址遭到攻击：\r\n\r\n- 0xf845A7ee8477AD1FB4446651E548901a2635A915\r\n- 0x812d8622C6F3c45959439e7ede3C580dA06f8f25\r\n\r\n攻击者获取这些地址控制权的攻击向量仍然未知，但一些人认为这些是明文保存私钥的热钱包。\r\n\r\n如果攻击者成功访问了运行这些热钱包的服务器，他们将能够访问这两个地址，从而进行任何交易，例如从桥中提取 1 亿美元。\r\n\r\n漏洞类型 ：服务器端黑客攻击\r\n\r\n建议\r\n\r\n一般建议在多签名（multisig）配置中使用更多签名以增加安全性。这是因为多签名设置要求多个方的同意才能启动或完成交易，使得单个方更难以控制钱包或资金。随着所需签名数量的增加，黑客获得所需数量的密钥并进入钱包或资金就变得更加困难。\r\n\r\n需要注意的是，在 Harmony Bridge 黑客事件的例子中，交易所需的签名数量少并不是唯一的问题。两个地址的私钥未得到妥善保护，这可能也促成了攻击的成功。此外，足够数量的签名存储在服务器上的事实也可能使其更容易受到攻击，因为服务器比如硬件钱包等离线存储方法更易受网络攻击。\r\n\r\n因此，至关重要的不仅是使用足够数量的签名来配置多签名，还要确保私钥得不到妥善保护，它们存储在安全的位置。一般推荐将私钥离线存储，例如放在硬件钱包上，以降低由于网络攻击引起的风险。通过实施这些措施，用户可以提高其加密货币资产的安全性，并降低资产在黑客攻击中被盗的风险。\r\n\r\n日期 ： 2022年6月23日\r\n\r\n被盗金额：$100,000,000.00\r\n\r\n链接\r\n\r\n- [https://rekt.news/harmony-rekt/](https://rekt.news/harmony-rekt/)\r\n- [https://www.cnbc.com/2022/06/24/hackers-steal-100-million-in-crypto-from-harmonys-horizon-bridge.html](https://www.cnbc.com/2022/06/24/hackers-steal-100-million-in-crypto-from-harmonys-horizon-bridge.html)\r\n- [https://techcrunch.com/2022/06/24/harmony-blockchain-crypto-hack/](https://techcrunch.com/2022/06/24/harmony-blockchain-crypto-hack/)\r\n\r\n## BSC Token Hub\r\n\r\n描述\r\n\r\nBNB 智能链（BSC）似乎是通过利用 BNB 桥的漏洞而被黑客攻击，该桥连接 BNB Beacon Chain（BEP2）和 BSC（BEP20）。黑客能够在传统的 Binance Beacon Chain 上伪造存款证明并铸造两个 100 万个 BNB 的批次。该桥使用了易受攻击的 IAVL 验证，黑客能够特意对 2020年8月的区块 110217401 伪造。随后，黑客将被盗的 BNB 作为抵押品存入 Venus Protocol 借贷平台，并将资金转移到包括以太坊、Fantom、Avalanche 和 Polygon 在内的其他链。Binance 能够暂停链并冻结黑客在其 BSC 地址上的剩余资金的访问权限，但在此之前黑客已逃脱部分被盗的 BNB。\r\n\r\n漏洞类型：糟糕的加密\r\n\r\n技术细节\r\n\r\n[@samczsun 在 Twitter 上有一条详细的推文](https://twitter.com/samczsun/status/1489044939732406275) 介绍了黑客的技术细节。\r\n\r\n建议\r\n\r\n建议你永远不要尝试自行实现加密，因为这是一个复杂领域，需要对数学概念和最佳安全实践有透彻理解。如果你选择这样做，强烈建议你的代码由加密领域的专家进行审核以确保安全。\r\n\r\n另一个建议是实施监控可疑活动，并制定健全的应急计划以防万一发生漏洞。\r\n\r\n日期：2022年10月6日\r\n\r\n被盗金额：$89,530,887.00\r\n\r\n链接\r\n\r\n- [https://www.bnbchain.org/en/blog/bnb-chain-ecosystem-update](https://www.bnbchain.org/en/blog/bnb-chain-ecosystem-update)\r\n- [https://rekt.news/bnb-bridge-rekt/](https://rekt.news/bnb-bridge-rekt/)\r\n- [https://twitter.com/samczsun/status/1578167198203289600](https://twitter.com/samczsun/status/1578167198203289600)\r\n\r\n## EvoDeFi Bridge\r\n\r\n描述\r\n\r\n有关 EVODeFi 协议的财务稳定性存在担忧，这是一个跨链平台和桥梁，在 Binance 智能链和 Polygon 上提供一系列加密货币产品。报告显示，EVODeFi 背后的团队将用户的资金投资于 Terra 区块链的 anchor 协议，以资助其跨平台桥梁并在 ValleySwap（同一团队拥有的项目）上维持高年度百分比率（APR）。为了进一步提高 ValleySwap 的 APR，该团队 allegedly 铸造了无支持的 Tether（USDT）代币，这使得 ValleySwap 所基于的 Oasis Emerald 网络上的资金也变得没有支持。然而，随着 Terra 生态系统的崩溃，EVODeFi 失去了对 anchor 协议的投资，其无支持的 USDT变得毫无价值，导致流动性不足，无法维持桥梁运行。因此，数百万美元的用户资金可能被困在 Oasis 上，无法移动，损失显著的价值。\r\n\r\n漏洞类型： 没有黑客攻击。只是糟糕的财务决策。\r\n\r\n建议： 在这种情况下进行财务审计可能会有所帮助。\r\n\r\n日期： 2022年6月7日\r\n\r\n被盗金额 ： $66,000,000.00\r\n\r\n链接：\r\n\r\n- [https://evodefi.com/](https://evodefi.com/)\r\n- [https://rugdoc.io/education/evodefi-update-2/?continueFlag=c50e77a8265896c652d97904d74fec15](https://rugdoc.io/education/evodefi-update-2/?continueFlag=c50e77a8265896c652d97904d74fec15), [https://cryptobriefing.com/oasis-evodefi-bridge-may-be-missing-66m-in-funds/](https://cryptobriefing.com/oasis-evodefi-bridge-may-be-missing-66m-in-funds/)\r\n\r\n##  pNetwork\r\n\r\n描述\r\n\r\n根据 pNetwork 的事后报告，黑客通过利用 pBTC-on-BSC 桥中的 Rust 代码漏洞进行了攻击，允许攻击者盗取 277 BTC，价值约 1270 万美元。攻击成功发生在 pBTC-on-BSC 桥上。\r\n\r\n攻击者用来自 Binance 的 BNB 代币为其账户提供资金，然后部署了一套智能合约，这些合约滥用了 pNetwork 节点使用的 peg-out 指令。这些智能合约创建了一系列事件日志，包括合法的 peg-out 请求和由攻击者的智能合约发出的错误 peg-out 请求。由于代码中提取这些日志事件的缺陷，合法的日志和错误日志都被提取和处理，使攻击者得以盗取 pBTC-on-BSC 桥的 BTC 抵押金。被盗的 BTC 随后被转移到攻击者仍持有的地址列表中。\r\n\r\n漏洞类型：服务器端逻辑漏洞\r\n\r\n建议：建议 DeFi 桥定期审计其服务器端逻辑代码，以识别和修复漏洞，避免它们被利用。\r\n\r\n日期：2021年9月19日\r\n\r\n被盗金额： $12,700,000.00\r\n\r\n链接\r\n\r\n- [https://learnblockchain.cn/article/12433](https://learnblockchain.cn/article/12433)\r\n- [https://cointelegraph.com/news/latest-defi-hack-targeting-bsc-sees-12-7m-in-bitcoin-stolen-from-pnetwork](https://cointelegraph.com/news/latest-defi-hack-targeting-bsc-sees-12-7m-in-bitcoin-stolen-from-pnetwork)\r\n- [https://p.network/learn](https://p.network/learn)\r\n- [https://github.com/provable-things/ptokens-core](https://github.com/provable-things/ptokens-core)\r\n\r\n## Rubic\r\n\r\n描述\r\n\r\nRubic 交易所遭到黑客攻击，原因是管理员错误地将 USDC 代币添加到 Rubic 协议的路由器白名单。这使任何用户都可以通过 RubicProxy 合约随机调用 USDC 合约。攻击者利用这种行为，通过使用 routerCallNative 函数调用 USDC 合约，并通过 transferFrom 接口将授权用户的 USDC 代币从 RubicProxy 合约转移到攻击者的账户。\r\n\r\n漏洞类型：人为错误\r\n\r\n技术细节\r\n\r\n参见代码 [https://github.com/Cryptorubic/only-source-cross-chain-proxy/blob/f291786406b7f91c6ad097c62fb324f778c89eb2/contracts/RubicProxy.sol#L130](https://github.com/Cryptorubic/only-source-cross-chain-proxy/blob/f291786406b7f91c6ad097c62fb324f778c89eb2/contracts/RubicProxy.sol#L130)。\r\n\r\nRubicProxy 合约有一个名为 routerCallNative 的函数，允许用户传递路由地址和调用参数：\r\n\r\n```javascript\r\nfunction routerCallNative(\r\n    string calldata _providerInfo,\r\n    BaseCrossChainParams calldata _params,\r\n    bytes calldata _data\r\n) external\r\n```\r\n\r\n首先，函数检查目标地址是否在白名单上：\r\n\r\n```cpp\r\nif (!whitelistRegistry.isWhitelistedCrossChain(_params.router)) {\r\n    revert RouterNotAvailable(_params.router);\r\n}\r\n```\r\n\r\n然后，它向参数中指定的路由器进行外部调用：\r\n\r\n```css\r\nAddressUpgradeable.functionCallWithValue(_params.router, _data, _amountIn);\r\n```\r\n\r\n一个管理员意外地将 USDC 合约添加到了白名单，攻击者简单地代表 RubicProxy 调用 USDC，这使得攻击者得以从 RubicProxy 账户和所有已授权 RubicProxy 代为转账的用户账户中转移 USDC 资金。\r\n\r\n建议\r\n\r\n使用多签名是减少加密货币相关操作中人为错误风险的一种方式。在多签名设置中，一项交易或操作需要多方的批准才能完成。这有助于防止错误或未经授权的操作，因为所有方必须就交易或操作达成一致，才能执行它。\r\n\r\n日期：2022年12月25日\r\n\r\n被盗金额：$1,400,000.00\r\n\r\n链接： \r\n\r\n- [https://rubic.exchange](https://rubic.exchange/)\r\n- [https://github.com/Cryptorubic](https://github.com/Cryptorubic)\r\n- [https://www.binance.com/en/feed/post/134659](https://www.binance.com/en/feed/post/134659)\r\n- [https://www.binance.com/cs/feed/post/134920](https://www.binance.com/cs/feed/post/134920)\r\n\r\n## 总结建议\r\n\r\n测试：\r\n\r\n- 拥有一个全面且强大的测试流程，包括单元测试、集成测试和端对端测试。定期审查和更新测试流程，以确保覆盖所有相关领域。\r\n\r\n实施：\r\n\r\n- 实施经批准的系统地址（如路由器、验证者等）的白名单，以防止未经授权的交易。维护和更新白名单以确保有效性。\r\n- 去中心化系统并实施最小权限，以降低攻击面并增加攻击者访问的难度。\r\n- 永远不要尝试自行实现加密，并请专家审核代码。\r\n- 实施在发生攻击时快速停止（暂停）桥梁操作的功能，以防止攻击者提取资金。\r\n\r\n访问：\r\n\r\n- 使用多重签名进行治理（包括白名单管理），以减少人为错误和攻击面。\r\n- 使用更多签名，至少 3/5。\r\n- 请勿在远程服务器上存储治理的私钥。使用硬件钱包存储。\r\n\r\n审计：\r\n\r\n- 对整个系统进行审计，包括智能合约代码及其部署方式，以确保安全性和可靠性。\r\n- 不要忘记定期审计服务器端代码。\r\n\r\n备份计划：\r\n\r\n- 实施监控以检测可疑活动并提醒管理员潜在的攻击。\r\n- 制定健全的灾难恢复计划，以便在发生成功攻击时快速有效地恢复资产。\r\n\r\n## 结论\r\n\r\n我们总结了一系列基于最近黑客攻击的建议，以帮助你审计和保护未来的区块链桥。这些建议可能看起来显而易见，但遵循这些建议仍然重要，特别是在开发和管理区块链桥时。\r\n\r\n- MixBytes 是谁？\r\n\r\n\r\n\r\n\r\n\r\n[MixBytes](https://mixbytes.io/) 是一个由区块链审计和安全研究专家组成的团队，专注于为 EVM 兼容和 Substrate 基础的项目提供全面的智能合约审计和技术咨询服务。加入我们在 [X](https://twitter.com/MixBytes) 上，随时了解最新的行业动态和见解。\r\n\r\n>- 原文链接： [mixbytes.io/blog/bridge-...](https://mixbytes.io/blog/bridge-bugs-overview)\r\n>- 登链社区 AI 助手，为大家转译优秀英文文章，如有翻译不通的地方，还请包涵～"},"author":{"user":"https://learnblockchain.cn/people/24680","address":null},"history":"bafkreie4v6db67m7y7t3ydxkwhuryxxt3hdumndqe573uxnway27olwnba","timestamp":1741496755,"version":1}