注:原文来自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 BUSD2021年3月4日上午UTC时间08:54:55,攻击者调用WBNB金库上的0x70fcb0a7方法以转出73,635 WBNB

同样的把戏在不同的链上发生过,但权力的平衡是不同的。在CZ的监视下,桥梁被烧毁了,强盗无处藏身。

即使是在Meerkat_Rugpull电报群中,关于币安如何处理这种情况的问题,聊天成员们也没有达成共识。

币安会回滚区块链并将钱退给用户吗?

答案并不是那么清晰,21名神秘验证者理论上可以安排退款,但可能性并不大,这只会助长CeDeFi的问题,并为(可能已经有压力的)BSC律师创造更多的工作。

币安如何处理这次事件,可能会开创一个先例。

虽然这并不是发生在BSC上的第一次卷款跑路事件,但这是自PancakeSwap兴起以来的第一次,也是涉及金额最大的一次。.

因此,我们发现,在BSC上的协议并不比在以太坊安全。

CZ不会救你,他们的交易确实便宜了,但没有独创的发展。

一旦以太坊Layer 2落地了,BSC这条企业链将会变成什么样?