对于 DeFi (Decentralized Finance)投资者来讲,这一周都不会太平静。

作者:欧科云链 OKLink

北京时间 4 月 19 日上午 8 点 45 分,国产 DeFi 借贷协议 Lendf.Me 被曝遭受黑客攻击。这是继 4 月 18 日 Uniswap 被黑客攻击损失 1278 枚 ETH (价值约 22 万美元)之后,DeFi 生态出现的又一重大安全事件 。

最新动向

两起安全事件接连爆发后,项目方、区块链安全公司纷纷跟进。4 月 18 日,也就是周六,Uniswap 的 imBTC 被盗走;周日,Lendf.Me 上价值 2500 万美金的资产被黑客洗劫一空;周一,dForce 创始人杨民道如期于 Medium 发文通报“Lendf.Me 被黑”一事的处理进展,表示“在过去的 24 小时里,一直在不停地工作,并将在以后的文章中详细介绍 Lendf.Me 采取的所有行动。”周二,黑客返还全部资产,dForce 创始人杨民道公布后续行动计划。

Lendf.Me 被攻击累计的损失约 24,696,616 美元,具体盗取的币种包括 USDT、WETH、WBTC 等 12 个币种。据欧科云链 OKLink 区块链浏览器显示,北京时间 4 月 21 日开始,Lendf.Me 攻击者地址 0xa9bf70a420d364e923c74448d9d817d3f2a77822 下的资产在不断往外转出。当日 14 点,Lendf.Me 攻击者地址下的 ETH 余额减少至 $279.27。一小时后,该地址下 ETH 余额已经为 0。随着各方的介入,最新消息显示黑客已退回全部被盗资产。

遭黑客两连击,DeFi 生态鸣起丧钟还是进入休整?图片来源:oklink.com,4 月 21 日 13:30

遭黑客两连击,DeFi 生态鸣起丧钟还是进入休整?图片来源:oklink.com,4 月 21 日 14:00

重入攻击

目前已知的情况是,攻击者利用了 imBTC 采用的 ERC-777 标准的一个漏洞,执行重入攻击(Reentrancy attack ),导致市值约 2500 万美金的资产从 Lendf.Me 合约里被取出。

而 18 日下午,攻击 Uniswap 的手法与此次 Lendf.Me 类似,两次事件的攻击者极有可能是同一伙人。黑客利用 Uniswap 和 ERC777 的兼容性问题,在进行 ETH 与 imBTC 交易时利用 ERC777 中的多次迭代调用 tokensToSend 来实现重入攻击。

解释重入攻击之前,我们来复习一个关于以太坊的知识点。以太坊上的每一个代币都是一个合约,而这些合约都是根据某个标准来写。大多数用户更熟知的是 ERC20 标准,欧科云链 OKLink 区块链浏览器显示,截至 4 月 21 日,以太坊上 ERC20 代币数高达 214075,且数量呈现上升趋势。

遭黑客两连击,DeFi 生态鸣起丧钟还是进入休整?图片来源:oklink.com

然而,即使是 ERC20 同一标准下,代币在合约之间的转账仍然不是很方便。ERC777 便应运而生,兼容 ERC20 的基础上又添加了新的内容。

此次事件中的 Uniswap 是根据 ERC20 标准设计的。Uniswap v1 有一个工厂合约和一个交易合约,通过工厂合约,每个代币都可以和以太坊生成一个交易合约。也就是说,任何满足 ERC20 标准的合约都能够通过工厂合约直接注册到 Uniswap 上而不需要许可。ERC777 兼容 ERC20,ERC777 标准下的合约同样也可以注册到 Uniswap。

通常来讲,智能合约在正常执行期间可以通过执行函数调用,或者简单地转移以太坊来执行对其他智能合约的调用。这些智能合约本身可以称为其他智能合约,它们可以回调到调用他们的智能合约或回调栈中的任何其他智能合约。在这种情况下,我们说智能合约被重新输入,这种情况被称为可重入性。

重入本身不是问题,但智能合约以“不一致”的状态重新输入时,就会出现问题。Uniswap 上使用 ERC777 的安全性问题早在 19 年 6 月就被发现并公开过。ERC777 的 Uniswap 交易对会因为 在 ERC777 标准里存在,而不存在于 ERC20 里被攻击,这时候,重新输入就变成了重入攻击。

防御对策

这已经不是第一次 DeFi 系统性风控漏洞被黑客利用了。从之前闹得沸沸扬扬的闪电货 bZx 漏洞事件到此次的二连击事件,2020 年还未过半,DeFi 就经历了三次大规模资产风险事件。

2 月,bZx 遭受攻击,其协议漏洞被利用,攻击者套利 99 万美元;3 月 12 日的极端行情下,MakerDao 等协议突发强制清算,机器人程序未及时调高 gas 费,有用户趁机以 0 出价获得系统拍卖的抵押资产,给 MakerDao 造成了 567 万美元的损失;此次的黑客二连击事件中,被盗资产更是高达 2500 万美元。DeFi 基础设施的脆弱性暴漏无疑。

DeFi 的创建者本意是利用代码和智能合约创建一个无需审查权限、人人可参与的开放金融生态。其大规模发展的基础设施是各种去中心化协议。虽然有更美好的愿景,但 DeFi 在抗风险能力上甚至不及中心化系统。

接连的安全事件让人们醒悟,没有 0 漏洞的协议,安全才是重中之重。对于项目方而言,在开发合约时就应把合约安全问题列为重点。可以将合约代码开源,让更多专业人士和技术团队参与进来,分析整理出易发生的意外事件,提升合约编写的安全性和功能准确性,防患于未然。其次,项目方可以与安全机构加强合作,审查代码。个人用户也需要在决策时格外谨慎,选择投资项目之前,利用好区块链浏览器等工具更全面地了解项目的链上信息才是关键。

这是一个快速迭代的领域,经此几劫,DeFi 生态是丧钟长鸣还是进入休整,相信不久就能看到结果。这也是一个长期发展的行业,代码即法律的愿景还没有实现,更多的法规及监管介入才能帮助 DeFi 生态健康发展。DeFi 可能会在未来爆发,但这个可能或许还需要数十年的沉默期来铺垫。