本文讨论了区块链桥的安全性,重点介绍了几起知名的黑客攻击事件及其原因,并提供了一系列预防措施和建议,以增强区块链桥的安全性。文章通过对不同攻击案例的分析,强调了去中心化、权限最小化和系统审计的重要性,指出了良好的测试流程和应急计划在防范方面的重要性。
作者:Konstantin Nekrasov - MixBytes 的安全研究员
区块链桥在加密货币和区块链技术的世界中是一个重要工具。它们允许不同的区块链网络进行交流和信息交换,从而更容易在不同链之间转移资产。然而,像任何技术一样,存在被黑客攻击和安全漏洞的风险。了解潜在的漏洞以及如何防范它们对于确保资产的安全至关重要。在本文中,我们将概述区块链桥的黑客攻击并讨论预防和缓解这些攻击的方法。
描述
Ronin 采用了 5/9 验证者方案进行交易签名。攻击者成功入侵了控制 4 个验证者的 Sky Mavis。看起来 Sky Mavis 和 Axie DAO 之间存在一种安排,实际上允许 Sky Mavis 访问另一个(第五个)验证者。因此,通过黑客攻击 Mavis,攻击者获得了所有必要的 5/9 验证者进行交易签名。
漏洞类型:服务器端黑客攻击
建议:可以采取几项措施来帮助防止类似于 Ronin 网络发生的攻击:
需要注意的是,没有任何系统可以完全免受攻击,始终制定应急计划以应对成功攻击的潜在后果是明智的。
日期: 2022年3月29日
被盗金额:$625,000,000.00
链接:- https://bridge.roninchain.com/
描述
Solana 的 Wormhole 黑客事件发生在攻击者能够绕过用于验证区块链之间转移的签名检查时。他们通过使用一个虚假的 “SignatureSet” 实现这一点,该签名集是通过在主桥上调用 "verify_signatures" 函数生成的,但将签名验证所用的系统程序替换为虚拟账户。这使攻击者能够创建有效的“验证者行动批准”(VAA)并触发未经授权的铸造,将 120,000 ETH 转入他们自己的账户。随后,攻击者将其中的 93,750 ETH 桥接回以太坊,目前仍然在黑客的钱包中。该漏洞的成因是合约中的一个缺陷,该缺陷没有正确验证所有输入账户,允许攻击者绕过签名检查并触发未经授权的铸造。
漏洞类型:缺失验证的加密预编译
技术细节
@samczsun 在 Twitter 上有一条详细的推文 介绍了黑客的技术细节。
verify_signatures 函数旨在接受由守护神提供的签名集,并将其打包成一个 SignatureSet。但它实际上并不执行任何验证。这一工作反而是委托给 Secp256k1 程序。
问题在于,solana_program::sysvar::instructions 模块应该与 Instructions sysvar 一起使用,这是 Solana 上的一种预编译。然而,Wormhole 使用的 solana_program 版本没有验证所使用的地址。
这意味着你可以创建自己的账户,该账户存储与 Instructions sysvar 相同的数据,并在调用 verify_signatures 时将该账户替换为 Instruction sysvar。这实际上完全绕过了签名验证。
建议
Wormhole 没有验证用于签名验证的 Secp256k1 程序的地址。因此,使用系统组件地址的白名单一般是有帮助的建议。
日期:2022年2月2日
被盗金额: $326,000,000.00
链接:
描述
攻击是由于 Nomad 的其中一个智能合约的近期更新引起的,该更新将受信任的根初始化为 0x00。这引发了每条消息自动证明的意外效果,允许用户伪造交易并提取不属于他们的资金。该事件引起了人们对跨链桥安全性以及在实施更新之前进行全面测试和风险评估的重要性的关注。
漏洞类型: 错误部署
技术细节
@samczsun 在 Twitter 上有一条详细的推文 介绍了黑客的技术细节。
这留下了一个可能性 - Replica 合约内存在致命缺陷。那么,怎么可能呢?快速查看表明,提交的消息必须属于一个可接受的根。否则,第 185 行的检查将失败。
幸运的是,有一个简单的方法可以检查这个假设。我知道,未经证明的消息的根将是 0x00,因为 messages[_messageHash] 将是未初始化的。我所要做的就是检查该合约是否会接受该根。
哎呀……
事实证明,在一次例行升级中,Nomad 团队将受信任的根初始化为 0x00。必须明确的是,使用零值作为初始化值是一种常见的做法。不幸的是,在这种情况下,这产生了一个微小的副作用,即自动证明每条消息。
建议
在任何部署或重新部署之前,拥有良好的测试覆盖率和运行测试是 minimizing 引入系统漏洞风险的重要实践。在 Nomad 代币桥的情况下,严格的测试过程可能会发现将受信任的根初始化为 0x00 的问题,该问题意外地导致每条消息自动证明,并使用户能够伪造交易。
确保良好测试覆盖率的重要方法是拥有全面的测试套件,涵盖尽可能多的不同场景和边缘案例。这可能包括单元测试、集成测试和端到端测试。建立一个包括手动和自动测试的稳健测试流程至关重要。
除了运行测试外,定期审查和更新测试流程,以确保其有效性并覆盖所有相关领域也很重要。这可能包括审查正在运行的测试类型、测试覆盖率以及运行和审查测试结果的流程。
总的来说,保持良好测试覆盖率和在任何部署或重新部署之前运行测试是维护系统安全性和稳定性的一个重要组成部分。这有助于识别和解决潜在问题,以防止它们导致任何危害。
日期:2022年8月1日
被盗金额:$190,000,000.00
链接
描述
Harmony Bridge 由一个 2/5 多重签名保护,其中以下地址遭到攻击:
攻击者获取这些地址控制权的攻击向量仍然未知,但一些人认为这些是明文保存私钥的热钱包。
如果攻击者成功访问了运行这些热钱包的服务器,他们将能够访问这两个地址,从而进行任何交易,例如从桥中提取 1 亿美元。
漏洞类型 :服务器端黑客攻击
建议
一般建议在多签名(multisig)配置中使用更多签名以增加安全性。这是因为多签名设置要求多个方的同意才能启动或完成交易,使得单个方更难以控制钱包或资金。随着所需签名数量的增加,黑客获得所需数量的密钥并进入钱包或资金就变得更加困难。
需要注意的是,在 Harmony Bridge 黑客事件的例子中,交易所需的签名数量少并不是唯一的问题。两个地址的私钥未得到妥善保护,这可能也促成了攻击的成功。此外,足够数量的签名存储在服务器上的事实也可能使其更容易受到攻击,因为服务器比如硬件钱包等离线存储方法更易受网络攻击。
因此,至关重要的不仅是使用足够数量的签名来配置多签名,还要确保私钥得不到妥善保护,它们存储在安全的位置。一般推荐将私钥离线存储,例如放在硬件钱包上,以降低由于网络攻击引起的风险。通过实施这些措施,用户可以提高其加密货币资产的安全性,并降低资产在黑客攻击中被盗的风险。
日期 : 2022年6月23日
被盗金额:$100,000,000.00
链接
描述
BNB 智能链(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。
漏洞类型:糟糕的加密
技术细节
@samczsun 在 Twitter 上有一条详细的推文 介绍了黑客的技术细节。
建议
建议你永远不要尝试自行实现加密,因为这是一个复杂领域,需要对数学概念和最佳安全实践有透彻理解。如果你选择这样做,强烈建议你的代码由加密领域的专家进行审核以确保安全。
另一个建议是实施监控可疑活动,并制定健全的应急计划以防万一发生漏洞。
日期:2022年10月6日
被盗金额:$89,530,887.00
链接
描述
有关 EVODeFi 协议的财务稳定性存在担忧,这是一个跨链平台和桥梁,在 Binance 智能链和 Polygon 上提供一系列加密货币产品。报告显示,EVODeFi 背后的团队将用户的资金投资于 Terra 区块链的 anchor 协议,以资助其跨平台桥梁并在 ValleySwap(同一团队拥有的项目)上维持高年度百分比率(APR)。为了进一步提高 ValleySwap 的 APR,该团队 allegedly 铸造了无支持的 Tether(USDT)代币,这使得 ValleySwap 所基于的 Oasis Emerald 网络上的资金也变得没有支持。然而,随着 Terra 生态系统的崩溃,EVODeFi 失去了对 anchor 协议的投资,其无支持的 USDT变得毫无价值,导致流动性不足,无法维持桥梁运行。因此,数百万美元的用户资金可能被困在 Oasis 上,无法移动,损失显著的价值。
漏洞类型: 没有黑客攻击。只是糟糕的财务决策。
建议: 在这种情况下进行财务审计可能会有所帮助。
日期: 2022年6月7日
被盗金额 : $66,000,000.00
链接:
描述
根据 pNetwork 的事后报告,黑客通过利用 pBTC-on-BSC 桥中的 Rust 代码漏洞进行了攻击,允许攻击者盗取 277 BTC,价值约 1270 万美元。攻击成功发生在 pBTC-on-BSC 桥上。
攻击者用来自 Binance 的 BNB 代币为其账户提供资金,然后部署了一套智能合约,这些合约滥用了 pNetwork 节点使用的 peg-out 指令。这些智能合约创建了一系列事件日志,包括合法的 peg-out 请求和由攻击者的智能合约发出的错误 peg-out 请求。由于代码中提取这些日志事件的缺陷,合法的日志和错误日志都被提取和处理,使攻击者得以盗取 pBTC-on-BSC 桥的 BTC 抵押金。被盗的 BTC 随后被转移到攻击者仍持有的地址列表中。
漏洞类型:服务器端逻辑漏洞
建议:建议 DeFi 桥定期审计其服务器端逻辑代码,以识别和修复漏洞,避免它们被利用。
日期:2021年9月19日
被盗金额: $12,700,000.00
链接
描述
Rubic 交易所遭到黑客攻击,原因是管理员错误地将 USDC 代币添加到 Rubic 协议的路由器白名单。这使任何用户都可以通过 RubicProxy 合约随机调用 USDC 合约。攻击者利用这种行为,通过使用 routerCallNative 函数调用 USDC 合约,并通过 transferFrom 接口将授权用户的 USDC 代币从 RubicProxy 合约转移到攻击者的账户。
漏洞类型:人为错误
技术细节
RubicProxy 合约有一个名为 routerCallNative 的函数,允许用户传递路由地址和调用参数:
function routerCallNative(
string calldata _providerInfo,
BaseCrossChainParams calldata _params,
bytes calldata _data
) external
首先,函数检查目标地址是否在白名单上:
if (!whitelistRegistry.isWhitelistedCrossChain(_params.router)) {
revert RouterNotAvailable(_params.router);
}
然后,它向参数中指定的路由器进行外部调用:
AddressUpgradeable.functionCallWithValue(_params.router, _data, _amountIn);
一个管理员意外地将 USDC 合约添加到了白名单,攻击者简单地代表 RubicProxy 调用 USDC,这使得攻击者得以从 RubicProxy 账户和所有已授权 RubicProxy 代为转账的用户账户中转移 USDC 资金。
建议
使用多签名是减少加密货币相关操作中人为错误风险的一种方式。在多签名设置中,一项交易或操作需要多方的批准才能完成。这有助于防止错误或未经授权的操作,因为所有方必须就交易或操作达成一致,才能执行它。
日期:2022年12月25日
被盗金额:$1,400,000.00
链接:
测试:
实施:
访问:
审计:
备份计划:
我们总结了一系列基于最近黑客攻击的建议,以帮助你审计和保护未来的区块链桥。这些建议可能看起来显而易见,但遵循这些建议仍然重要,特别是在开发和管理区块链桥时。
MixBytes 是一个由区块链审计和安全研究专家组成的团队,专注于为 EVM 兼容和 Substrate 基础的项目提供全面的智能合约审计和技术咨询服务。加入我们在 X 上,随时了解最新的行业动态和见解。
- 原文链接: mixbytes.io/blog/bridge-...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!