又一个 DeFi 被炸了,这次的主角是 imBTC。至于为啥选 imBTC,主要是因为在 ERC-777 的代币里它的价格最高。ERC-777 代币可以理解成 ERC-20 的升级版,比 ERC-20 多了几个接口。
先来科普一下背景,imBTC 是由 imToken 发行的 1:1 锚定 BTC 的 ERC-777 代币。任何人都可以通过 imBTC 的合约进行铸币,或者销毁代币换出 BTC。
截至发稿时我又去看了一下,imBTC 的发行量是 708.2421,托管钱包里的 BTC 则是 708.3695 枚。黑客没有能力转走 imBTC 托管的 BTC 也没有能力增发 imBTC 的代币。所以各位看官不要担心,这次雷的不是 imBTC。
但同时为了阻止进一步的攻击,imBTC 已经紧急的按下了暂停键,所有的充提、转账交易都被暂停。
另外,我不得不吐槽一下,我怀疑黑客在 419 这个日子攻击简直是 ghs。
事实上,这次事件是由两拨攻击组成。一波针对 uniswap,一波针对 Lendf.Me。
第一波攻击是 4 月 18 日早上 08:58,通过 ERC-777 和智能合约耦合时候的漏洞,抽干了 uniswap 里 ETH-imBTC 这个交易对的底池。
实际上,uniswap 的这个 ERC-777 的问题也是老漏洞了,不过大家都没在意。按照 PeckShield 的估算,这次 uniswap 的损失在 1,278 个 ETH,价值约 22 万美金。
当天的 12:12 分,Tokenlon 监测到异常并成立紧急处理小组,定义为最高等级的安全问题。到 12:49 分,imBTC 的转账功能被暂停,同时 Tokenlon 向其他合作伙伴通报了这起安全事件。
至此,第一波攻击到这里就差不多结束了。严格来说,这波的攻击确实是打的让人有点猝不及防。因为这个单看的话,不过是 imBTC 的 ERC-777 还是 uniswap V1 的协议都是没问题的,但是在耦合的时候就是出问题了,这个我稍后给大家讲。
后来下午 17:00,Tokenlon 的小组收到了合作伙伴的反馈,并且确认了安全风险评估,没问题。就继续开启了 imBTC 的转账功能。
一夜无话,大家都觉得这事情过去了。可能黑客也觉得,出了第一会儿事情大家就长记性了,早早睡了。
然而,第二天也就是 4 月 19 日上午,Lendf.me 遭到攻击。
这次攻击分为两个部分,第一个部分是通过合约上的漏洞,从 etherscan 上我们可以看出黑客每次攻击之后都会从 Lendf.me 抽走双倍的代币。
黑客攻击 Lendf.me 的交易记录
通过不断翻倍的过程,黑客很快就抽走了 Lendf.me 上的所有 imBTC 的代币。但事情还没有结束,之后黑客又将抽走的 imBTC 抵押回了 Lendf.me,然后借走了其他代币,就这样…整个 Lendf.me 都被抽空了。
这次 Lendf.Me 直接损失了 2500 万美金,更致命的是 Lendf.Me 损失的不是自己的资产,而是用户锁仓在 DeFi 的资产。
但实际上,10:12 的时候 Tokenlon 已经配合 Lendf.me 暂停了 imBTC 的转账和充提功能。目前黑客的地址 0x53835 中依然还有 250 枚 imBTC 无法转出。
至此,第二轮的黑客攻击已经落下帷幕,至于是否会有第三轮暂时还不得而知。关于这次攻击,我后来也去问了些有技术背景的朋友。这次的问题主要发生在 ERC-777 代币和系统的耦合上。
也就是说 imBTC、uniswap、Lendf.me 单独用的时候都不会出问题,但因为 ERC-777 预留的一个功能接口和智能合约在耦合的时候出现了问题,就被黑客抓住了 bug。
有趣的是,事后 Compound 的 CEO Leshner 在 Twitter 上「幸灾乐祸」,吐槽 @LenfMe 抄袭 Compound 的代码:
如果一个项目没有专门的技术去开发自己的智能合约,而去剽窃其他团队的代码并重新部署,那么很明显这个团队没有能力或意愿去考虑安全性的问题。希望开发人员能从这次 Lendf.ME 的攻击中学到教训。
其实如果我们回到时间线上去看,18 日的中午 Tokenlon 的团队就已经跟合作伙伴提示了这个风险,这个合作伙伴里面明显是有 Lendf.Me 的。当时 Lendf.Me 的团队反馈是并不认为有安全问题。
从这个角度上来看,Compound CEO 吐槽的也不无道理。但 u1s1,Lendf.Me 既然是 Fork 了 Compound 的代码,不也证明 Compound 自己也有问题吗?有啥好起劲的。
我记得第一次用 uniswap 的时候,看着 beta 警告我的内心是很惶恐的。警告写着,即便 uniswap 的合约已经经过安全审计,但你依然有可能失去所有的资产,你需要自行承担风险。
不知道有多少人认真的看过这个警告。但从 2020 年开始,我们至少已经经历了三次可以称得上是见证历史的 DeFi 事件:bZx 遭遇闪电贷攻击、Maker 预言机失效和 Lendf.Me 被攻击。
这背后折射出来的,其实是整个 DeFi 的系统性风险:没人对安全进行兜底。一旦发生安全风险,比如这次的 Lendf.Me 被攻击,项目方可能根本没有能力对用户的资产进行清偿。
而责任制,无论是公司形态的有限责任制还是国家信用的无限责任制,都是现代金融体系可以去运转的基础之一。责任也是一种信用。
现代金融体系是建立在责任制度下的,通过责任来控制风险。你存款进银行,银行就有责任保护你的财产安全(即便是有限责任),有的时候银行还会通过存款保险这样的体系来转移和分散责任。有的时候保险的风险过大,还会有再保险补上。
而 DeFi 的问题在于,我们并无法给 DeFi 找到一个责任主体。在解决这个问题之前,跨链、DeFi 的可组合性都只是镜花水月。
Lendf.Me 炸雷,我们向谁去索赔?这是个问题。