本文深入探讨了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 区块链时。
为了使这些独立的区块链能够解决跨链互操作性问题(不同区块链之间的通信),加密社区开发了跨链桥,这是一种特殊的智能合约,旨在实现链之间的资产转移。
虽然每个桥的技术方面有所不同,但它们运行的主要概念几乎相同:
因此,为了确保良好的用户体验,跨链桥必须存储极高的锁定价值,以始终确保流动性。美元价值在桥上的这种集中为黑帽黑客提供了一个诱人的机会,使桥始终面临盗窃或利用的风险。
为了更多地了解 web3 黑客攻击,让我们揭开跨链桥的神秘面纱,揭示过去的一些攻击是如何发生的,以及它们最常见的漏洞是什么!
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 亿美元消失得无影无踪。
大多数桥由特殊的多重签名 (multisig) 钱包拥有。与普通钱包不同,它们使用多个签名来签署交易并将其发送到区块链网络中。这使得它比普通的加密钱包更适合操作关键基础设施,例如桥,因为它更安全。
或者应该是这样。
在各种规模的组织中,密钥管理实践可能难以监控和完善。即使仅仅获得对一个私钥的访问权限也应该很困难,但由于未经授权访问负责操作 multisig 的多个私钥,导致 3 个桥被黑客攻击。
一旦获得密钥,它们将授予黑客特权访问权限,允许他们耗尽所有资金。让我们看看它是怎么发生的……
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 幅 梵高 画作的组合售价。
Harmony Bridge 由一个 multisig 保护,该 multisig 需要不幸的 2/5 签名才能签署交易。尽管黑客用来获得地址控制权的确切方法尚不清楚,但业内一些人推测这与签名人作为热钱包运行有关。此外,私钥以明文格式存储,这并不比在便签上写下密码好多少。
黑客获得私钥后,他们使用这些密钥来签署恶意交易。这导致了不同代币和资产的 1 亿美元损失。其中大部分被交换为 ETH,然后使用 Tornado Cash 套现。
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:v
和 multistore
的操作。这两个操作都必须成功,并且最后一个操作必须返回特定区块编号的哈希值。此外,multistore
的输入实际上是 iavl:v
的输出!
黑客攻击并没有就此停止。黑客还必须伪造 avl:v
中的 root
变量,该变量由另一个函数 computehash
计算。它采用叶子和路径的签名,然后计算它们的哈希值。因此,黑客添加了一个叶子节点和一个内部节点来匹配,然后以某种方式迫使叶子提供正确的根哈希。
这使得黑客能够铸造 2,000,000 个 BUSD 代币,然后将其作为抵押品存入 Binance 借贷协议 Venus 中。然后,黑客借入稳定币,并将其跨桥转移到以太坊、多个 L2 链,然后转移到 Fantom,由于这次黑客攻击,Fantom 的整个生态系统的 TVL 增加了 10%。
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。
根据 其官方网站,Nomad Bridge 是“一种安全第一的跨链消息传递协议”。它在 2022 年 8 月被黑帽黑客攻击,导致 1.9 亿美元的损失。社区中的一些加密货币用户也利用该协议,以便将资金直接返回给项目。
让我们来看看 DeFi 中发生的最混乱的黑客攻击之一。
问题在于 Moonbeam Network 上的 Replica 合约。黑客可以发送没有任何证明的交易 - 他们只是直接调用 process
函数,耗尽桥中的 wBTC 代币。
由于不正确的初始化,此类交易没有恢复。因为,在对合约进行例行更新后,Zero
地址被设置为受信任的根,这意味着任何交易证明都是有效的。
第一次攻击桥的尝试失败了,黑客在 gas 上花费了高达 350,000 美元。这对于攻击者来说一定压力很大。但是,他们成功地发送了下一次交易。
其他用户发现了正在进行的黑客攻击,并能够复制相同的交易数据并自行发送,因此许多随机用户也加入了黑客攻击,与黑帽黑客一起利用该协议。一些资金被白帽黑客攻击,然后返回给该协议。
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 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!