“DeFi很棒,但其最大风险是可能中心化归零。”投资者对DeFi的评论可谓一语成谶。
4月18日和19日,对DeFi圈来说是黑暗的两天。在这两天,DeFi前七大应用中的两个(Uniswap和dForce)陆续遭到黑客攻击。
Uniswap损失了约1278个ETH,而dForce的借贷平台Lendf.Me则损失惨重,其合约里的资产几乎全部被盗,近2500万美元。而就在其被攻击前3天,dForce刚刚宣布获得Multicoin Capital领投,招银国际和火币资本跟投的150万美元融资。
两期被攻击事件时间线
北京时间4月18日,一名攻击者利用Uniswap和ERC777的兼容性问题,通过多次迭代调用名为「tokensToSend」的方法函数来对Uniswap平台上的ETH/imBTC交易对进行重入攻击。
4月18日,Tokenlon观察到异常后,暂停了imBTC的转账功能并通知imBTC合作伙伴自查安全风险。
4月18日,Tokenlon得到Lendf.Me及其他imBTC合作平台确认安全风险评估没问题后,重启了imBTC的转账功能。
4月19日,Tokenlon收到Lendf.me反馈,遭遇类似Uniswap事件的重入攻击,出现大量异常借贷行为。Tokenlon再度暂停imBTC转账功能。
黑客利用ERC777与Uniswap和Lendf.me的合约兼容问题,可以产生任意数量的imBTC。在Uniswap中耗尽其ETH-imBTC池中的1278个 ETH,多亏Uniswap中imBTC交易对资产只有这么多,所以对Uniswap的影响不大。截止发稿,Uniswap中锁定的资产仍然有3900万美元,保持DeFi前五位置。
而在Lendf.Me中,据派盾统计分析,Lendf.Me中的十余种资产几乎全部被盗走,总价值约2524万美元,具体盗取的币种、数额和占比如下:
4月20日凌晨3点左右攻击者向Lendf.Me平台admin账户转回了38万枚HUSD和320枚HBTC。更早之前,慢雾团队曾监测到,攻击者向Lendf.Me平台admin账户转回12.6万枚PAX,并附言“Better future”。
4月20日,dForce官方发布公告表示将采取3项措施挽救。1、与顶尖安全团队合作,对Lendf.Me进行更为全面的安全评估;2、与合作伙伴积极探讨可行的解决方案;3、与主流交易平台、OTC交易商、公安机构积极配合展开相关调查,竭尽全力追索被盗款项,追踪黑客动态。
4月20日,以太坊无损彩票平台PoolTogether宣布已移除ERC-777标准代币plDai,这是为第三方的开发人员提供的小型资金池,尽管仅有约480个plDai。
漏洞来自可组合性涌现
上文可以发现,这次黑客的攻击手段是增加任意数量imBTC,然后转移走imBTC交易对的资产。
攻击为何会发生可能需要一点背景知识,我们简单捋一下。
以太坊上的每个代币都是一个合约,而符合同一个标准的合约才能和别的合约交互。比如最常见的ERC20标准。然而ERC20标准下代币在合约之间转账有些不便的地方,于是2018年的时候Open Zeppline推出了ERC777标准,在兼容ERC20的基础上加了一些新的内容。目的是对ERC20标准进行改进,不但实现了功能扩展,还有ERC20标准一样良好的兼容性,愿景是成为ERC20标准的有效继承者。
Uniswap v1有两个合约,一个是工厂合约一个是交易合约。通过工厂合约每个代币都可以和以太坊生成一个交易合约。Uniswap是根据ERC20标准设计的,因此任何满足ERC20标准的合约不需许可都能够通过工厂合约注册到Uniswap上,当然ERC777标准也可以。
但是早在2019年6月人们就发现,Uniswap和ERC777标准存在兼容安全性问题。Uniswap上的ERC777交易对会因为ERC777标准里有,而不存在于ERC20里的一个tokensToSend()方法被重入攻击 。
而据Compound联合创始人Leshner,Lendf.Me的代码“copy/pasted Compound v1 without changes.”他指出,Compund v1代码本身“没有缺陷”,但因为imBTC是ERC777代币,必须格外谨慎并编写额外的代码以防止“重入攻击”。
imBTC是与BTC 1:1锚定的ERC777代币,由Tokenlon发行和管理。而imBTC采用ERC777代币标准规范,本身也并没有安全问题。但ERC777代币与Uniswap/Lendf.Me的合约组合起来,如果不进行额外的安全审查并修改代码就会产生漏洞。
几个基本事实
综上,我们可以得到几个基本事实,更好把握整体事件。
1、2018年Open Zeppline推出兼容ERC20的ERC777标准。
2、2019年6月人们就发现,Uniswap和ERC777标准存在兼容安全性问题。而Uniswap允许任何参与者上架任何ERC20代币,Uniswap是Hayden Adams一个人创造的实验性项目,2019年时仅有三名员工。可能是Uniswap人手太少一直没有解决兼容问题,亦或者因为imBTC交易对资产较少,这个问题一直没有暴露。
3、Lendf.Me代码拷贝自Compound v1,没有进行修改,也没有发现问题。
4、4月18日,Uniswap被攻击,imBTC交易对里的ETH被盗。
5、4月18日,Tokenlon观察到异常后暂停了imBTC转账功能并通知imBTC合作伙伴自查安全风险。
6、4月18日,Tokenlon得到Lendf.Me及其他imBTC合作平台确认安全风险评估没问题,重启imBTC转账。
7、4月19日Lendf.Me因为同样问题被盗走几乎全部资产。
Lendf.Me被盗后,的确在推特上有一些人发表了歧视华人的言论,歧视固然不对,但是“打铁还得自身硬”。即便上架交易对时没有做到详尽的调查,拷贝的代码也没有完全掌握,但事后也是有挽救机会的,正如名为“白特幂”的受害者质问的那样,“我想不通,这些DeFi项目方,好像也跟我一样毫无警惕……看到别人被黑客攻击,不自查一下风险的么。”
可组合性再思考
在1CO之后,以太坊的叙事已经转向DeFi。与传统金融相比,DeFi的最大优势之一是可组合性,目前以太坊生态系统上出现了MakerDAO、Compound、Uniswap这样的货币乐高。在已经建立好的代码或协议上开发,开发者可以像搭建“乐高积木”一样大大加快开发速度,而且可以利用现有用户基础。
然而,要注意的是,DeFi的可组合性也伴随系统性的风险。可能就单个“乐高”来看,都是符合标准也没有问题的,但是在它们组合起来的时候,就会涌现出漏洞。
这样一旦某个“乐高”的资产遭到攻击,可能会殃及利用这个“乐高”的其他DeFi项目,导致一系列资产暴跌,从而引发加密世界的金融危机。
随着DeFi中锁定的资产越来越多,吸引的黑客火力也越来越足。这从近一年来爆发的DeFi安全事件可以看出来。2019年6月Synthetix损失3700万枚sETH;2020年2月bZx损失90万美元;2020年3月iEarn损失28万美元;2020年4月Uniswap损失1278枚ETH,Lendf.Me损失2500万美元。
还记得由次贷危机引起2008年的金融危机吗?金融机构把次级贷款包装成各种金融产品卖给投资者,每一个金融产品单看起来都是没有问题的,但是它们组合起来之后,2018年因为次级贷款问题出现违约,导致建构在其上的整个金融体系瓦解,引发世界性的经济危机。
而在加密货币的DeFi世界,本身具有多重抵押、无需许可这些特性,再加上合约完全由代码决定,而代码漏洞谁也无法保证全被发现。甚至DeFi上的资产也完全处于热钱包的状态,DeFi面临的安全危险更甚。
如何避免加密货币世界的金融危机?这是DeFi发展路上必须面对的问题。
对于普通投资者来说如何选择呢?如果你是一名builder,当然是可以投入DeFi项目中,但请一定多注意安全;而如果你不是一名builder,但又看好DeFi行业,最好的策略是去投资ETH本身而不是某个DeFi具体项目。