注:原文来自 rekt。
回想起来,这是不可避免的。
这是发生在币安智能链(BSC)上的首次令人印象深刻的攻击事件,Meerkat Finance 丢失的资金排到了排行榜的第三位。
在仅仅运营一天之后,Meerkat Finance 就卷走了 1300 万 BUSD 以及大约 73000 BNB,目前涉及资金总额约为 3100 万美元。
我们一直在观察币安智能链,其网络似乎正复制以太坊 DeFi 夏天的发展走势,当一些项目方通过复制的代码建立足够的资本后,就出现了卷款跑路(rug pull)的现象。
而这一事件的后续,将会是一种非常有趣的情况。
CZ 及其团队会不会回滚他们的公司链,或者就这么让用户遭受损失?
这样的骗局使得小偷无处藏身,在这么一条链上,他们能跑到哪里去呢?币安关闭了桥梁,甚至 bscscan.com 也暂停了一会儿。是流量太大,还是某种类型的烟幕弹?
Meerkat Finance 最初声称这是一次黑客攻击,但随后该项目方删除了他们的账户,只剩下 BSC 用户自己,或者去怪币安。
感谢 0xdeadf4ce 提供的帮助。
-
Meerkat Finance 部署者升级了该项目的 2 个金库。
-
攻击者地址通过 Vault 代理调用无需许可初始化函数,有效地允许任何人成为 Vault 所有者 [2]。
-
攻击者随后通过调用签名为 0x70fcb0a7 的函数来耗尽金库,该函数接受了一个代币地址作为输入。升级为智能合约的反编译,显示了所调用函数的唯一用途是移除以所有者为受益人的资金。
通常,如果合约具有允许所有者主动取回策略 / 金库中使用资产的函数,那么你就是在信任这个项目团队。
而他们可以随时选择跑路。
这就是为什么像 yearn 这样的项目会添加如下图所示的检查函数,这样项目方就只能取回那些没有被策略 / 机枪池所使用的资金。
两个受影响的金库都使用了 OpenZeppelin 的透明代理升级模式,通过在 Vault 代理级别上调用 upgradeTo (address newImplementation)函数,可以将 Vault 逻辑升级到新的逻辑实现。
BUSD 金库的先前实现部署在 0x49509a31898452529a69a64156ab66167e755dfb,而 WBNB 金库的先前实现部署在 0x3586a7d9904e9f350bb7828dff05bf46a18bb271,两者都是相当不起眼的。
Meerkat Finance 部署者调用了 upgradeTo ()函数两次:
-
在区块高度 5381239 时,将 WBNB Vault 实施地址设置为 0x9d3a4c3acee56dce2392fb75dd274a249aee7d57;
-
在区块高度 5381246 时,将 BUSD Vault 实施地址设置为 0xb2603fc47331e3500eaf053bd7a971b57e613d36;
这改变了金库逻辑,引入连个值得注意的函数,而它们并非是最初实现的一部分。
-
init(地址所有者)
-
根据反编译字节码,此函数将存储 slot 0 上的地址设置为提供给该函数的地址;
无需权限检查,这个新添加的函数成为了攻击者闯入金库的最终后门。
在透明代理中使用特定的 Initializer 模式是最佳实践,并且已在第一个 Vault 实现中应用,因此除了计划盗窃 Vault 资金之外,添加 init ()方法的意图也是非常值得怀疑的。
- 0x70fcb0a7(address_param1)
源代码不可用,反编译源仅限于检查调用者是否等于 init ()方法中设置的存储 slot 0,并使用金库地址作为查询目标,转出 param1 随附的代币合约上的 balanceOf () 。这两种功能都不是以前 Vault 实现的一部分。
比较新旧实现的字节码大小,我们可以发现,新实现的字节码大小仅为以前逻辑的 1/4。
由于升级是 Meerkat Finance 部署者完成的,考虑到链上数据的所有方面,因此这次事件最有可能的情况是蓄意的跑路事件,而私钥泄露的可能性是非常小的。
截至这篇文章发布时,被盗资金的部分已被分配到不同的地址,并被发送到似乎属于币安交易所托管的币安桥。
Binance.org 桥目前已暂停,可能是为了避免资金被轻易转移到其他区块链。
时间线(2021 年 3 月 4 日)
-
2021 年 3 月 4 日上午 UTC 时间 08:53:10,Meerkat Finance 部署者将 WBNB 金库改到合约 0x9d3a4c3acee56dce2392fb75dd274a249aee7d57;
-
2021 年 3 月 4 日上午 UTC 时间 08:53:31,Meerkat Finance 部署者将 BUSD 金库改到合约 0xb2603fc47331e3500eaf053bd7a971b57e613d36;
-
2021 年 3 月 4 日上午 UTC 时间 08:54:31,攻击者调用 BUSD 金库上的 0x70fcb0a7 方法以转出 13,968,039 BUSD
-
2021 年 3 月 4 日上午 UTC 时间 08:54:55,攻击者调用 WBNB 金库上的 0x70fcb0a7 方法以转出 73,635 WBNB
同样的把戏在不同的链上发生过,但权力的平衡是不同的。在 CZ 的监视下,桥梁被烧毁了,强盗无处藏身。
即使是在 Meerkat_Rugpull 电报群中,关于币安如何处理这种情况的问题,聊天成员们也没有达成共识。
币安会回滚区块链并将钱退给用户吗?
答案并不是那么清晰,21 名神秘验证者理论上可以安排退款,但可能性并不大,这只会助长 CeDeFi 的问题,并为(可能已经有压力的) BSC 律师创造更多的工作。
币安如何处理这次事件,可能会开创一个先例。
虽然这并不是发生在 BSC 上的第一次卷款跑路事件,但这是自 PancakeSwap 兴起以来的第一次,也是涉及金额最大的一次。.
因此,我们发现,在 BSC 上的协议并不比在以太坊安全。
CZ 不会救你,他们的交易确实便宜了,但没有独创的发展。
一旦以太坊 Layer 2 落地了,BSC 这条企业链将会变成什么样?
本公众号所载文章中观点仅代表原作者个人立场,不代表 DeFi 之道立场。投资者不应将文中观点、结论为作出投资决策的惟一参考因素,亦不应认为文中观点可以取代自己的判断。在决定投资前,如有需要,投资者务必向专业人士咨询并谨慎决策。
DeFi 之道公众号后台
回复“ 财富 ”获取 DeFi 热门项目白皮书合集 !
回复“ 研究 ”获取 DeFi 研究报告合集!
回复“ 论文 ”获取 DeFi 相关论文合集!
干货持续更新中,敬请关注……
特别声明
免责声明:本文不代表CoinVoice立场,且不构成投资建议,请谨慎对待,如需报道或加入交流群,请联系微信:VOICE-V。