跨链桥的常见漏洞

本文深入探讨了Web3中跨链桥面临的安全挑战,剖析了Poly Network、Ronin Network、Harmony Bridge、BNB Bridge、Wormhole、Nomad Bridge和Qubit Finance等多个桥被攻击的案例。通过分析这些案例,揭示了不安全外部调用、私钥泄露、加密攻击和零值利用等常见漏洞,强调了审计和漏洞赏金计划在预防攻击中的重要性。

简介

在加密货币的早期,你很容易只知道或使用一条“主”链而生存。但如今,多链已经成为主要的范式。Web3 由数百甚至数千个区块链组成,每个区块链都有其自身的功能、目标和目的。

随着每个新成员的加入,web3 生态系统正变得越来越复杂。随着新兴链和成熟链之间交互的增加,web3 安全已成为一个复杂且多层次的问题,尤其是在处理 Layer 1、Layer 2、Layer 3 甚至 Layer 0 区块链时。

为了使这些独立的区块链能够解决跨链互操作性问题(不同区块链之间的通信),加密社区开发了跨链桥,这是一种特殊的智能合约,旨在实现链之间的资产转移。

虽然每个桥的技术方面有所不同,但它们运行的主要概念几乎相同:

  • 用户在一个链上发送资金,例如以太坊区块链上的 ETH,并在另一个链上收到相同代币的 封装 版本,在我们的例子中是 wETH。
  • 当资产被发送回来时,它只是被解 封装,或者交换回以太坊区块链上的原始 ETH 资产。

因此,为了确保良好的用户体验,跨链桥必须存储极高的锁定价值,以始终确保流动性。美元价值在桥上的这种集中为黑帽黑客提供了一个诱人的机会,使桥始终面临盗窃或利用的风险。

为了更多地了解 web3 黑客攻击,让我们揭开跨链桥的神秘面纱,揭示过去的一些攻击是如何发生的,以及它们最常见的漏洞是什么!

1. 不安全的外部调用 — Poly Network 黑客攻击

Poly Network 是有史以来第二大 DeFi 黑客攻击,它是一个跨链桥网络,成功连接了 35 个不同的区块链,直到它失败。

2021 年 8 月 10 日,黑帽黑客从 ETH 和 BNB 链上的三个 Poly Network 智能合约中盗取了 6.11 亿美元(超过了 191 个国家的 GDP)。现在,最大的问题来了:他们是怎么做到的?

在 Poly Network 生态系统中,有一个名为 EthCrossChainManager 的特权合约,负责触发来自其他链的消息。它有一个 函数 叫做 verifyHeaderAndExecuteTx,它验证区块头的正确性,并检查交易是否包含在该区块中。

之后,它调用另一个 函数_executeCrossChainTx,它对变量 _toContract 进行外部调用。

_toContract 可以由任何任意用户控制。没有对函数执行进行检查,因此用户可以将任何合约地址作为输入传递。此外,该函数接受自定义字节 _method 变量,然后将其用作外部调用中的 payload。

总而言之,EthCrossChainManager 合约是特权的,它可以对任何具有自定义 calldata 的合约进行外部调用。

让我们仔细看看外部调用。

Poly Network 合约能够使用像这样生成的 calldata 调用任何合约:

(abi.encodePacked(bytes4(keccak256(abi.encodePacked(_method, “(bytes,bytes,uint64)”))), abi.encode(_args, _fromContractAddr, _fromChainId)))

在这段代码中,_method 参数由用户控制。

请记住,EthCrossChainManager 是一个特权合约。那么,如果我们诱骗这个合约调用另一个 Poly Network 合约并修改 calldata,以便我们的 tx 以允许我们耗尽所有资金并通过 onlyOwner 修饰符的方式调用该函数,该怎么办?

嗯,这正是攻击者所做的。他们强行破解了正确的 _method 变量,并说服 EthCrossChainManager 合约调用另一个 Poly Network 合约 EthCrossChainData。在此调用中,攻击者调用了函数 putCurEpochConPubKeyBytes

然后,该项目实际上是自己攻击了自己。超过 6 亿美元消失得无影无踪。

2. 未经授权访问私钥 — Ronin Network、Harmony Bridge 黑客攻击

大多数桥由特殊的多重签名 (multisig) 钱包拥有。与普通钱包不同,它们使用多个签名来签署交易并将其发送到区块链网络中。这使得它比普通的加密钱包更适合操作关键基础设施,例如桥,因为它更安全。

或者应该是这样。

在各种规模的组织中,密钥管理实践可能难以监控和完善。即使仅仅获得对一个私钥的访问权限也应该很困难,但由于未经授权访问负责操作 multisig 的多个私钥,导致 3 个桥被黑客攻击。

一旦获得密钥,它们将授予黑客特权访问权限,允许他们耗尽所有资金。让我们看看它是怎么发生的……

黑客攻击 1:Ronin Network,供应链攻击

Ronin Network 是一个以太坊侧链,于 2021 年 2 月推出。其主要目的是使用户能够创建和发送廉价交易,以便玩一款非常流行的名为 Axie Infinity 的 P2E 游戏。

为了降低成本,开发人员决定为其链使用 Proof of Authority 模型。使用此模型,只有 9 个验证者能够验证交易。在黑客攻击发生时,其中 5 个(超过 50% - 成功攻击所需的确切数量)由 Ronin Network 的合作伙伴 Sky Mavis 控制,该公司是该游戏的创建者。

攻击者渗透到 Sky Mavis 的网络并获得了用于签署消息的 5 个签名。接下来发生的事情是显而易见的 - 攻击者随后验证了两笔交易,提取了 173,000 ETH 和超过 25,000,000 USDC,后者后来被交换为 ETH。

就目前而言,这仍然是历史上最大的 DeFi 黑客攻击,总损失达 6.24 亿美元,约占最昂贵的 10 幅 梵高 画作的组合售价。

黑客攻击 2:Harmony bridge,密钥泄露

Harmony Bridge 由一个 multisig 保护,该 multisig 需要不幸的 2/5 签名才能签署交易。尽管黑客用来获得地址控制权的确切方法尚不清楚,但业内一些人推测这与签名人作为热钱包运行有关。此外,私钥以明文格式存储,这并不比在便签上写下密码好多少。

黑客获得私钥后,他们使用这些密钥来签署恶意交易。这导致了不同代币和资产的 1 亿美元损失。其中大部分被交换为 ETH,然后使用 Tornado Cash 套现。

3. 密码学攻击 — BNB Bridge、Wormhole Bridge 黑客攻击

黑客攻击 1:BNB Bridge。伪造加密证明

BNB Bridge 充当旧 Binance Beacon Chain 和新 Binance Smart Chain 之间的桥梁。攻击者利用它来铸造 2,000,000 BNB。这次黑客攻击的另一个值得注意的事实是,由于这次黑客攻击,Binance Smart Chain 停止运行了大约 8 个小时。可能有很多交易者的头寸因这次停止而被清算,从而增加了这次黑客攻击造成的附带损害。

为 BNB Bridge 创建的加密协议不幸地允许攻击者伪造发送任意消息所需的证明。黑客只能够发送 2 条消息,但这足以启用 200 万个新 BNB 代币的铸造,从而窃取了 5.86 亿美元的价值。让我们仔细看看,了解攻击者如何通过看似简单的机制造成如此大的损害。

BNB Bridge 使用 IAVL(Immutable AVL tree)来验证交易。但是,黑客能够伪造特定区块编号 110217401 的加密证明。

如果我们仔细查看黑客攻击中使用的交易,我们会看到 tx 中使用的区块是上面列出的区块,并且黑客使用的证明小于其他用户交易中真实证明的一半大小。

为了完成此操作,黑客需要绕过两个名为 iavl:vmultistore 的操作。这两个操作都必须成功,并且最后一个操作必须返回特定区块编号的哈希值。此外,multistore 的输入实际上是 iavl:v 的输出!

黑客攻击并没有就此停止。黑客还必须伪造 avl:v 中的 root 变量,该变量由另一个函数 computehash 计算。它采用叶子和路径的签名,然后计算它们的哈希值。因此,黑客添加了一个叶子节点和一个内部节点来匹配,然后以某种方式迫使叶子提供正确的根哈希。

这使得黑客能够铸造 2,000,000 个 BUSD 代币,然后将其作为抵押品存入 Binance 借贷协议 Venus 中。然后,黑客借入稳定币,并将其跨桥转移到以太坊、多个 L2 链,然后转移到 Fantom,由于这次黑客攻击,Fantom 的整个生态系统的 TVL 增加了 10%。

黑客攻击 2:Wormhole Network。签名验证绕过

Wormhole 漏洞是另一起引人注目的桥黑客攻击,导致 3.26 亿美元被盗。让我们仔细看看 DeFi 中讨论最多的黑客事件之一,了解黑客是如何窃取近 120,000 ETH 的。

让我们从问题开始。协议的问题存在于 verify_Signatures 函数中。它采用了一组由“Guardians”提供的签名,这些签名用于验证区块链之间的转移,并将这些签名传递给 signatureSet 函数。

然后,signatureSet 将检查委托给 Secp256k1 程序 solana_program::sysvar::instructions

但是,设置了包含 Secp256k1 函数的错误版本的 solana_program,并且没有执行实际检查。这意味着攻击者可以使用 Secp256k1 函数应返回的数据创建一个帐户,从而完全绕过签名验证。

使用 signatureSet 函数的返回值,黑客调用 post_vaa 函数以获得有效的 VAA(验证操作批准),以便他们可以成功生成桥可以接受的 VAA 帐户。之后,他们只需调用 complete_wrapped 函数并铸造 120,000 ETH。

4. 零值漏洞 — Nomad Bridge、Qubit Finance 黑客攻击。

黑客攻击 1:Nomad Bridge,初始化错误

根据 其官方网站,Nomad Bridge 是“一种安全第一的跨链消息传递协议”。它在 2022 年 8 月被黑帽黑客攻击,导致 1.9 亿美元的损失。社区中的一些加密货币用户也利用该协议,以便将资金直接返回给项目。

让我们来看看 DeFi 中发生的最混乱的黑客攻击之一。

问题在于 Moonbeam Network 上的 Replica 合约。黑客可以发送没有任何证明的交易 - 他们只是直接调用 process 函数,耗尽桥中的 wBTC 代币。

由于不正确的初始化,此类交易没有恢复。因为,在对合约进行例行更新后,Zero 地址被设置为受信任的根,这意味着任何交易证明都是有效的。

第一次攻击桥的尝试失败了,黑客在 gas 上花费了高达 350,000 美元。这对于攻击者来说一定压力很大。但是,他们成功地发送了下一次交易。

其他用户发现了正在进行的黑客攻击,并能够复制相同的交易数据并自行发送,因此许多随机用户也加入了黑客攻击,与黑帽黑客一起利用该协议。一些资金被白帽黑客攻击,然后返回给该协议。

黑客攻击 2:Qubit Finance,不可逆转的 safeTransferFrom

Qubit Finance 是一个允许在多个链上进行抵押的项目,例如在以太坊上锁定资金并在 BNB 上借款。要使用此功能,你需要调用 QBridge deposit 函数。

然后,此函数将调用 IQBridgeHandler(handler).deposit() 函数,该函数将验证输入数据。

黑客在 QBridge 中调用了 deposit 函数,但没有附加任何 ETH。但是,该交易没有像应该的那样失败。

这里的问题出在 ‘IQBridgeHandler’ 合约中:tokenAddress.safeTransferFrom(depositer, address(this), amount

ETH 代币地址是一个零地址,因此,尽管实际上没有发生 ETH 的实际转移,但此类交易不会恢复。

攻击者盗走了 80,000,000 美元的资产,其中大部分被转换为 ETH 并存入 Tornado.Cash。

结论

web3 行业仍然年轻且缺乏经验,而跨链桥接技术更是如此。这就是为什么有些错误可能看起来是疏忽大意,尤其是在安全处理私钥或初始化方面的错误。但是,重要的是要注意,本文中描述的大多数攻击都是历史上的首次,没有任何先例可以为团队应对如此严峻的现实做好准备。

本文中提到的大多数项目都未经审计 - 这对于当今任何大型项目来说都是一个很大的危险信号,但在加密货币的早期时代更为常见。一些项目当时也没有任何漏洞赏金计划 (BBP)。

缺乏审计和有效的 BBP 都未能揭示智能合约和所使用的机制的设计和操作中固有的弱点,即使在桥梁开始积累数亿美元的用户资金之后也是如此。

这突出了警惕和预防性安全实践的重要性,例如在启动前进行安全审计,并在启动后进行 BBP,这两者可以携手合作,在黑客攻击发生之前将其阻止。

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

0 条评论

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