王也
打开 DeFi 世界之门,从小白到 DeFi 大神的进阶必修课。
由 Conflux × Odaily星球日报联合出品,星球日报资深记者@王也担任主笔。
烤星 · DeFi 课堂
短短 48 小时,黑客让 dForce 团队真切地体会到了“失而复得”的美好。
4 月 19 日上午,由 dForce 团队开发的去中心化借贷协议 Lendf.Me 遭黑客攻击,价值 2500 万美金的锁仓资产被黑客洗劫一空,震动社区与行业。
而随后发生的“神反转”更是比电影还精彩,4 月 19 日晚,黑客向 Lendf.Me 账户归还了 12614 枚 PAX,并附言 Better Future,4 月 20 日,黑客再次陆续归还代币,至今已悉数归还了全部被盗资产。
据悉,黑客此举,是因为在去中心化交易所 1inch 上泄漏了自己的 IP 地址,1inch 配合新加坡警方以及 dForce 团队向黑客施压,迫使其归还赃款,1inch 官方也证实了这一过程。
dForce 团队则在 4 月 22 日凌晨发文告知用户接下来将采取的行动方案:将永久关闭现有合约,新产品将启用新合约,并将在一周内公布资产返还的建议方案。
不幸之中的万幸,Lendf.Me 本次被盗最终并没有给用户和平台造成损失,但带来的思考和探讨已远超事件本身。
事件发生后,许多看客已从多方视角发布过专业的复盘内容,但我们依旧看到了不少错误的说法和偏颇的论调,因此,我们也想以这篇文章表明:What does not kill you makes you stronger,相信历劫后的 dForce 团队和 DeFi 行业,会更加健康地成长。
DeFi 乐高遭遇“多米诺骨牌”式崩塌,
到底是谁的锅?
4 月 19 日,黑客利用 ERC777 合约和 DeFi 平台的兼容性问题,在 Lendf.Me 上多次调用重入攻击,并以 imBTC 为抵押,将 Lendf.Me 上价值 2500 万美金的资产洗劫一空。
发生盗币事件后,媒体和大众关注的焦点是“追责”,大额资金被盗,到底是谁的锅?虽然事件已告一段落,但依然有很多错误说法在社群内误传。
讨论的声音很多,有的把“罪名”扣在 ERC777 头上,称是合约本身存在漏洞;有人追问 dForce 的安全合作方 Peckshied 为何没有及时发现漏洞;还有人将矛头指向 imToken,声称是 imBTC 存在问题,黑客抵押了假 imBTC 贷出 ETH。
而事实是,以上都是错误说法。
ERC777 合约本身并没有问题,它是对 ERC20 合约的一个改造和升级,不但实现了功能扩展,还有 ERC20 标准一样良好的兼容性。
这件事也并非 Peckshied 的责任,虽然 PeckShield 是 dForce 的安全合作方,但他们并没有对 Lendf.me 的代码进行过审计,Lendf.me 的协议为分叉 Compound V1 代码而来。
假 imBTC 也是一个谣言,并不存在这个过程,imBTC 本身也无漏洞。
事实是,Lendf.me 在 Compound V1 代码的基础上加入了基于 ERC777 的 imBTC,而 ERC777 合约与 DeFi 协议的兼容性问题,给了黑客可趁之机。
具体来说,ERC777 原本是在 ERC20 基础上加强了对 Token 的风险控制接口,是一次有益的改进。不过由于 DeFi 项目的可组合特性,一个合约在不同产品之间相互调用时,其业务逻辑复杂度也会大大增加,这就给注入代码攻击提供了可能性。
据 PeckShield 团队介绍,ERC777 标准扩展的功能之一是提供了“hook”机制,可以使普通地址或合约通过注册一个 tokensToSend() hook 函数来控制或拒绝发送 Token。简单点说,“hook”函数能够在一笔交易完成前后将通知发送给交易双方,并允许其取消交易,确保了交易相对的客观公正。
因为“hook”函数通知是需要操作时间的,黑客就利用这一点,发起重入攻击,在用户一笔交易未完成的时候,又发起一笔新的交易,扰乱了原有的交易节奏。
图片来源于:PeckShield
这个理解起来可能有些门槛,简单解释下:
Alice 有 100 ETH,她准备将这 100 ETH 抵押给 Bob 准备借出 0.01 个 imBTC,但是还没等到这笔交易确认时,Alice 又将这 100 ETH 抵押给另外一个对手方,于是,Alice 就用这 100ETH 借出了两倍的 imBTC。黑客攻击 Lendf.Me 的过程就是上述过程的多次循环,重入攻击可以理解为黑客凭空生出了很多“钱”,让合约以为这是合法的“钱”,然后可以用抵押借贷的方式,把真钱都取走了。
从上述过程我们可以很清晰地了解到,ERC777 合约本身实际可以极大的提高 DeFi 应用的用户体验,通过使用的 Hook 回调机制,在 ERC20 中需要二笔或多笔完成的确认交易,而使用 ERC777 单笔交易就可以完成。
真正导致漏洞出现的根源在于 ERC777 合约与 DeFi 协议的兼容性出现了问题。
目前,安全团队已经针对 ERC777 合约与 DeFi 协议的兼容性问题给出了很多安全建议,这次攻击也使得 DeFi 开发者严肃正视 DeFi 业务组合可能存在的系统性风险问题。
因 DeFi 协议之间的可组合性和互操作性,使得各 DeFi 协议之间的相互影响逐渐加深、也更为复杂:就算单个协议运行起来是安全的,不代表这些安全的协议组合在一起使用也是安全的。
所以,开发者们不可以只追求 DeFi 乐高的“庞大”,更应该在系统的兼容性和安全性方面多做努力,毕竟对于金融产品来说,“安全”才是重中之重。
追责不是目的,而是希望找出问题所在后,不再被类似的问题打倒。
世界不是非黑即白的,
DeFi 本来就处于半中心化治理阶段。
4 月 21 日,Lendf.Me 被盗的剧情开始出现“神反转”,许多围观者都感叹这情节如同电影。
根据 etherscan 链上数据,从 4 月 21 日 6:00 UTC 开始,黑客从标有“Lendf.Me Hack”的地址到 Lendf.Me 项目的管理地址发起了多次交易,包括 57992 枚 ETH(价值约 1000 万美元),以及 USDT、BUSD、TUSD 等稳定币(约 1000 万美元),此外,还归还了 581 枚 WBTC、HBTC 和 imBTC,合计 2400 万美元。
图片来源于:etherscan
根据 1inch CEO Sergej Kunz 向媒体透露,黑客因为使用了基于 Web 的内容分发网络,所以才泄漏了关于他本人的重要元数据头部信息,而且所有三个交易请求都来自一个中国的 IP 地址,这表明黑客没有使用 Tor 之类的去中心化网络。此外,信息中还有黑客使用的电脑类型、屏幕分辨率和系统语言等内容。
Sergej Kunz 评价这个黑客,“他应该是一名优秀的程序员,但却是没有经验的黑客。”
因此,虽然官方没有公布细节,从已知信息,也可以推断出,警方和 dForce 团队掌握了黑客信息,从而迫使黑客退还资产。
无论过程如何,被盗资产成功追回对于 dForce 和用户都是难得的 happy ending,但是 1inch 配合新加坡警方协助 dForce 团队追回被盗资产,披露黑客的 IP 地址,却引发了社区对 DeFi“保护用户隐私”和“纯粹去中心化”的讨论。
去中心化的 DeFi 借贷平台依靠中心化的执法机关将被盗资产追回,支持者认为披露黑客的 IP 地址天经地义,无可厚非,虽然具有抗审查性,但 DeFi 毕竟不是法外之地。
反对者认为 1inch 作为去中心化交易平台有悖于 DeFi“保护用户隐私”的初衷。
去中心化交易所 ParaSwap 在 Telegram 的 DeFi 群中向用户表明不会披露任何用户的信息,即使用户是黑客。
1inch 也迅速做出了解释:“去中心化和隐私没有关系”,1inch 在监管合规范围内办事,并且 1inch 网站披露了自己的隐私政策:
ParaSwap 虽然拒绝了向 dForce 披露黑客 IP 地址的请求,但根据 The Block 的报道,ParaSwap 自己的产品也在收集用户邮箱和 IP 地址,而且 ParaSwap 官网也没有任何隐私政策的说明。
还有一些反对者认为此举违背了 DeFi“去中心化”的原教旨主义。他们认为真正的 DeFi,向黑客发起追讨或者法律诉讼的应该是 DeFi 用户,而不是开发者;而 Lendf.Me 开发者团队在以公司主体的名义通过法律途径追回资产,说明这家公司在承担代理风险。
他们潜意识里认为 DeFi 的存在就是为了消除代理风险,如果有一家公司在承担 DeFi 协议的代理风险的话,那这个 DeFi 就和 CeFi 没什么区别了。
其实,在我们看来,这些讨论多为偏颇和“站着说话不腰疼”。借助中心化执法机构的力量找回被盗资产是年轻 DeFi 必须走的路,没必要上升到“去中心化和中心化”的矛盾层面。
而且,“世界很复杂”,不只有白或黑,也不只有明或暗,他是多维度、多层次、多元的,真实的世界没有这么二元。
今天我们的所有生活和资产并不都在链上,追责更是都发生在线下,智能合约的世界是一个尚不完整的世界,也绝对不是法外之地。
同时,区块链追求的本来就是保护个人隐私,而非实现绝对匿名。
DeFi 的世界也并不是只有代码,事实上,从刚过去不久的那场“3.12 暴跌”事件中,我们也能感受到去中心化的 DeFi 加入中心化人为调控之后,能够更大程度减少极端行情给用户带来的资产损失,去中心化合约交易协议 dYdX 两次调高最小交易量,合成资产交易平台 Synthetix 临时将费用追偿延长到了一小时,这些都有效地缓解了交易的延迟和阻塞情况,避免了给用户带来资产上的损失。
1inch 协助警方同样可被理解为一次宏观的人为调控。无论是对开发者还是平台用户来说,黑客盗币带来的损失可谓是“灭顶之灾”,如果开发者团队不及时与 inch和警方沟通配合,用户的资产根本不可能找回,资产都没了,又何谈金融呢?
代码是死的,人是活的。年轻的 DeFi 加入人为调控以应对极端情况无可厚非。
而且严格意义上来说,如今的 DeFi 产品实际上本来就处于混合模式,资产上链层面是中心化,而在可编程性是去中心化,治理上是半中心化的。
因此,我们想说:今天的 DeFi 本来就处于半中心化的治理+去中心化协议的阶段,很多 DeFi 原教旨主义者以去中心化意识形态一概而论,以偏概全,其实缺乏 DeFi 在应用层面的思考。
创业者的实践总是一步一步的,说风凉话并不能推动行业发展。
为 DeFi 行业敲响警钟:
全面评估和抵御系统性风险
虽然这次 Lendf.Me 被盗事件以追回全部资产收尾,但客观地说,从黑客“留下尾巴”一路找到线索,还是有一定“侥幸”因素的。
所以更重要的自然是,“这一次”过去了,如何预防“下一次”。
DeFi 开发者和从业者必须认真思考 DeFi 业务组合可能存在的系统性风险问题。
DeFi 是由一个个相关的协议和应用模块所组成的“积木组合”,其整体的安全性,取决于所有的积木中安全性最差的那一个。
币乎创始人咕噜(也是 Lendf.Me 大户之一)根据应用/协议/资产级别的安全性,将 DeFi 产品风险分为以下方面:
· 智能合约代码安全性引入的风险:
咕噜认为这是目前 DeFi 应用最主要的风险,占了总风险的大多数。
· 智能合约(如果有)Admin Key 引入的运营风险:
什么是智能合约的 Admin Key?智能合约作为一个提供服务的“机器人”,很多时候运营方需要留有人工的权限去控制这个“机器人”,例如关停“机器人”,再例如冻结智能合约中某个账户的资产等。如果存在这样的 Admin Key 人工权限,就会引入额外的风险。
· 持有特定资产本身的风险:
持有的资产本身具有价格波动的市场风险、资产被 Token 合约本身(如果有)的 Admin Key 冻结/没收的风险等。
· 抵押借贷类 DeFi 本身的市场风险。
· 智能合约平台的风险。
· 用户自身私钥管理的风险。
对于以上这些风险,DeFi 平台方不仅要确保在产品上线前有过硬的代码审计和漏洞排查,还要在不同产品做业务组合时,考虑因各自不同业务逻辑而潜在的系统性风控问题。
另外在应对风险时,DeFi 平台应和安全公司及时合作,做好代码和系统风险的安全审计工作,因为 Lendf.Me 的代码是 fork 的 Compound V1 的,而 Compound V1 是 trail of bits 这家公司审计的,所以后来就没有再找安全公司去做审计,这就为后面遭遇黑客攻击埋了隐形炸弹。
dForce 团队也认识到了问题的严重性,在最新发布的公告中宣布永久关闭现有合约,新产品将推出新合约。
其实在事件发生和解决后,用户和 dForce 社区都给予了团队很大的精神支持,许多损失惨重的用户依旧表明了“被盗事件不会击溃 DeFi,相信 dForce 团队”的立场,足可以看出行业对优质创业团队的包容和友好。
但更重要的是,这次事件能够引起 DeFi 开发者们的足够重视,加大在安全方面的投入,安全团队也应该增强对 DeFi 产品审计的多样性和全面性,也可以研发更多供 C 端用户使用的可以评估 DeFi 安全性的工具和产品,让 DeFi 成为所有人都能放心使用的金融工具。
安全永远既是行业的底线,也是至高无上的准则。
END
了解最新动态