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