Beosin:Jump Crypto 如何用逆向攻击追回 3.26 亿美元被盗资金?
安全
Beosin
Etherscan
反制的关键在于 Oasis 自动化合约使用可升级的代理模式,这意味着合约所有者可以随时更改合约逻辑。
撰文:Beosin
不知道大家是否还记得跨链协议 Wormhole 于 2022 年 2 月遭受黑客攻击这起安全事件,去年 Beosin 旗下 Beosin EagleEye 安全风险监控、预警与阻断平台监测显示, Wormhole 项目方被黑客盗取 12 万枚 ETH,损失金额约 3.26 亿美元。
据了解,当时 Wormhole 协议的开发由交易公司 Jump Trading 的加密分支 Jump Crypto 参与,事件发生后,Jump Crypto 宣布投入 12 万枚 ETH 以弥补 Wormhole 被盗损失,支持 Wormhole 继续发展。
此后,Wormhole 向黑客提出了 1000 万美元漏洞赏金和白帽协议方案,以换取资金返还,但黑客似乎并不领情。
而根据 Blockworks 的报道,似乎三天前,这笔资金似乎已经追回,Beosin 安全团队也将过程重新梳理与大家分享。
据了解,一直以来 Wormhole 黑客不断通过各种以太坊应用程序转移被盗资金,最近开设了两个 Oasis 金库,然而两个保险库都使用了 Oasis 提供的自动化服务。反制的关键在于 Oasis 自动化合约使用可升级的代理模式,这意味着合约所有者可以随时更改合约逻辑。
反制攻击发生于 2 月 21 日,当时 sender 地址 ( 负责执行反制攻击,似乎归 Jump 所有 ) 被添加为 Oasis 多重签名的签名者。Sender 地址执行了五笔交易用于反制,随后从 Oasis 多重签名中删除。sender 成为合格签名者的时间仅为 1 小时 53 分钟。
恢复过程的主要部分发生在第三笔交易中,sender 升级了合约,使 sender 能够将质押物和借款从 30100 号金库中转移出控制权。Wormhole 黑客的错误是将 30100 号金库的访问权限授予了一个由多方签名控制的可升级代理合同。下面是详细操作。
详细操作
一些地址别名:
- Oasis 多重签名(0x85):拥有 Oasis 代理合约的 12 个多重签名中的 4 个;
- Holder(0x5f):目前持有回收的资金;
- Sender(0x04):负责执行反利用;
- Jump1(0xf8):用 DAI 为发送方提供资金以偿还债务并收回抵押品。通常标记为「Wormhole Deployer 1」,这个钱包被 Etherscan、Nansen 和 Arkham 标记为 Jump;
- Jump2 (0xf5):从发送方收到剩余的 DAI。通常标记为「Jump Trading」,这个钱包被 Etherscan、Nansen 和 Arkham 标记为 Jump;
Sender 首先初始化一些参数以启动攻击。然后,Sender 利用其在 Oasis Multisig 上的特权,通过 ServiceRegistry 将更改延迟更新为 0,从而允许它即时更新代理合约地址。Sender 部署了两个新的合约 Authorizer 和 Executor,这些合约用于欺骗协议。Sender 利用其绕过时间延迟的能力,更新 Oasis ServiceRegistry,使其能够调用 Authorizer 和 Executor 代替两个关键的 Oasis 合约。然后将 AutomationExecutor 代理地址更新,使 Sender 完全控制 30100 金库。
接下来是反攻击的过程。Sender 必须关闭 30100 金库并将其迁移到由 Oasis Multisig 控制的新金库中。
首先 Oasis Multisig 调用 AutomationExecutor 合约,从而完全控制 30100 金库。
然后调用 Authorizer 合约,这会使协议认为 30100 金库 可以合法地被 Sender 关闭。Authorizer 成功通过验证步骤。
再次调用 Executor 合约,创建一个新的 30231 金库,将抵押品和借入的 DAI 从 30100 金库迁移到 30231 金库,并将 30231 的所有权转移给 Oasis Multisig。
最后将 120,695.43 的 wstETH 抵押品和 7639 万枚借入 DAI 从 30100 金库移动到 30231 金库。Authorizer 合约再次被调用,以验证 30100 金库已关闭,最后,Sender 将代理合约恢复到其原始地址,任务完成。
Beosin 总结
Oasis 协议的漏洞利用的过程中。Wormhole 黑客将 30100 金库的访问权限交给了由多签控制的可升级代理合约。在整个过程中,Authorizer 合约和 Executor 合约扮演了关键角色,但如果没有通过升级 AutomationExecutor 代理提供的完全控制,攻击将不可能实现。
一旦 Sender 完成了反制攻击,它就从 Oasis Multisig 中被移除。仅在 30 分钟后,Sender 就开始从 Jump1 收到 DAI。Jump1 总共发送了 8000 万枚 DAI。Sender 用 7830 万枚 DAI 来清算新创建的金库中的贷款,其余部分则发送给 Jump2。
在清除 DAI 债务之后,抵押品从 wstETH 和 rETH Vaults 中提取并发送给 Holder。自从到达 Holder 的时间(3 天 2 小时)以来,这些资产就没有移动过。
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表Bi123的观点或立场