Cobo 安全团队:WazirX 被盗币事件分析
1 事件概述
2024 年 7 月 18 日,印度加密货币交易所 WazirX 的一个多签钱包被盗超过 2.3 亿美元。该多签钱包为 Safe{Wallet} 智能合约钱包。攻击者诱导多签签名者签署了合约升级交易,攻击者通过升级后的合约直接转移了钱包中的资产,最终将约超过 2.3 亿美元的资产全部转出。
2 攻击过程分析
注:以下分析基于 WazirX 和 Liminal 事后报告、链上数据、互联网公开信息,可能存在信息不全或误差,从而导致分析结论有所偏差。分析结果仅供参考,具体以当事厂商后续调查结果为准。
原文链接:
-
WazirX 博客:https://wazirx.com/blog/wazirx-cyber-attack-key-insights-and-learnings/
-
Liminal Custody 博客:https://www.liminalcustody.com/blog/update-on-wazirx-incident/
2.1 多签钱包配置与攻击过程
根据双方披露的信息,WazirX 使用 Safe (前称 Gnosis Safe) 进行资金管理,并通过 Liminal 进行协管。该 Safe 钱包采用 4/6 的签名方式,其中 5 把私钥为 WazirX 成员通过硬件钱包管理,1 把私钥由 Liminal 通过 HSM 管理。
正常流程下,WazirX 通过 Liminal 平台的网页发起交易转账,转账地址受 Liminal 平台维护的地址白名单限制。WazirX 的 5 位签名者中的 3 位确定交易无误后,使用硬件钱包签名。Liminal 平台收集到 3 个签名后,再使用 HSM 添加最后的签名,并使交易上链。从链上攻击交易中看,攻击交易中确实包含了 3 个合法签名,且第 4 个签名为交易发起者(即 Liminal),与披露的钱包管理架构一致。
结合 Liminal 和 WazirX 双方报告,这笔恶意多签交易发起的流程如下:
-
攻击者通过某种未知手段(包括不限于 0-day 网络攻击、社会工程学攻击等)诱导 WazirX 签名交易。
-
WazirX 3 名成员,分别通过书签等登录 Liminal 平台,进行 Google 验证及 MFA 验证通过后,查看到待签名交易为 2 笔 GALA 和 1 笔USDT 转账交易,并使用硬件钱包进行了签名。但实际受害人签署的内容并不是代币转账交易,而是多签钱包的合约升级交易。由于实际交易内容与声称的转账交易不一致,Liminal 平台分别拒绝了 3 笔交易。
-
至此攻击者收集到 3 名成员对于合约升级交易的签名,再次向 Liminal 平台提交恶意的合约升级交易,并附带 3 个正确的签名。
-
Liminal 平台检查签名无误后,作为第 4 个签名人发起交易,交易上链后,钱包合约升级,控制权转移到攻击者手中。
根据 WazirX 的描述,签名人员使用硬件钱包保管私钥。攻击者也是通过伪造转账交易的方法收集到了 3 个签名人的签名。因此推断 3 位 WazirX 管理者并不存在私钥泄露的情况。同样 Liminal 也不存在私钥泄露的情况,否则攻击者无须通过 Liminal 平台发起最后一笔交易。
另一方面,根据 WazirX 的描述,签名人员通过书签访问了正确的 Liminal 平台,并进行了 Google 与 MFA 验证。Liminal 平台也记录到了三笔异常交易的日志,因此也可以排除 WazirX 登录了虚假 Liminal 平台钓鱼页面被收集签名的可能。另外根据 WazirX 披露的设备初步取证结果,也认为 WazirX 3 名签名人的设备没有受到攻击。
综上所述,可能的一种攻击手段是,攻击者通过中间人攻击、XSS 攻击或其他零日攻击等手段劫持了 WazirX 受害人的浏览器前端页面,伪造展示给 WazirX 受害人合法的交易内容。攻击者收集齐 3 个 WazirX 受害人的签名后,通过已有会话向 Liminal 平台提交了最终的合约升级攻击交易,并通过 Liminal 平台风控后成功上链。
2.2 攻击事件暴露出的问题
根据前述分析,WazirX 和 Liminal 双方在事件中均暴露出一定问题。
Liminal 平台风控不严格:
-
从最终链上的攻击交易中可以看出,Liminal 平台对合约升级交易进行了签名并上链。平台的白名单转账风控策略没有起到应有的作用。
-
Liminal 平台披露的日志中可以看出,平台已经发现并拒绝了三笔可疑交易,但没有第一时间向用户告警或冻结钱包转账交易。
WazirX 没有仔细核对硬件钱包签名内容:
-
硬件钱包中展示的内容才是真实待签署的交易内容。WazirX 签名人员在签署多签交易时,信任了 Liminal 页面展示的交易,没有仔细核对硬件钱包待签名内容与 Liminal 页面展示的交易是否一致而直接签名,提供了攻击者所需要的合约升级交易的签名。