出品|欧科云链研究院
作者|Matthew Lee
7月31号,Curve 在平台表示 Vyper 0.2.15 的稳定币池由于编译器的漏洞所以遭到攻击。具体因为重入锁功能的失效,所以黑客可以轻易发动重入攻击,即允许攻击者在单次交易中执行某些功能。而Curve上的部分资金池又使用了旧版本的编译器,给黑客提供了机会。
(重入攻击是一种由于 Vyper 的特性加上智能合约编写不当导致的漏洞,之前已经多次发生,欧科云链的安全团队之前有过对此类案例的详细分析,点击文末左下角“阅读原文”查看,所以本文对攻击细节不再展示)
紧接着其他多个项目都宣布遭受到了攻击,NFT 质押协议 JPEG’d,借贷项目 AlchemixFi 和 DeFi 协议 MetronomeDAO,跨链桥 deBridge、采用 Curve 机制的 DEX Ellipsis等都分别遭受巨额损失。
然而在7月30号,一些项目方已经知道了潜在的攻击威胁。以 Alchemix 为例,在30号就已经开始转出资产,而且已经成功的转出 8000ETH,但是在转移资产的过程中,依然被攻击者盗取在 AMO 合约的剩余 5000ETH。
图片来源:OKLink Explorer
其他项目方也相继采取了一些措施,如 AAVE 禁止 Curve 进行借贷;Alchemix 也从曲线池中移除 AMO 控制的流动性;Metronome 直接暂停主网功能。
如何从攻防两端
防范黑客进攻?
Curve 不是第一次出现被黑客攻击的事件了,作为 Defi 的顶级项目都无法免疫黑客攻击,普通的项目方更应该在黑客攻击端和合约防守端重视起来。
那么针对进攻端,项目方可以做哪些准备呢?
OKLink 团队推荐项目方通过链上标签系统提前辨别有黑历史的钱包,阻止有过异常行为地址的交互。Curve 的其中一个攻击者的地址就有过不良记录曾被 OKLink 记录,如下图所示:
图片来源:OKLink Chaintelligence Pro
其行为模式也一定程度上超出常理,如下图所示,有三日交易笔数过百。
图片来源:OKLink Onchain AML
项目方如何在防守端进行防御呢?
针对上述事件梳理,我们发现项目方在处理此类事件的两点问题,
1. 维护工作不到位。大部分项目非常注重代码的编写和审核,但是维护工作一直没受到重视,Vyper 编译器的这个漏洞是两年前被发现的,但受攻击的池子还是采用的旧版编译器。
2. 代码测试场景过于单一。很多测试代码起不到真正的测试问题的作用,应增加模糊测试等更复杂的测试手段,且应该在黑客攻击途径,攻击复杂度,机密性,完整性等多个维度进行测试的工作。
被盗资金如何追回?
现实中,大部分被盗资金都难以追回。下图是黑客转出资金去向,可以看到被盗 ETH 没有对外转出动作,地址也没有和实体机构相关联。
图片来源:OKLink Chaintelligence Pro
有一部分地址和实体机构有关联的,如地址0xb752DeF3a1fDEd45d6c4b9F4A8F18E645b41b324 (已归还2,879.54 ETH),类似地址有关联实体机构的,我们可以通过报警和实体机构协商的办法追回资金。
图片来源:OKLink Chaintelligence Pro
针对此次事件的正确做法是通过 OKLink 或者其他技术服务商的预警和跟踪功能,等待沉淀地址的后续的资金动向,在进一步实施行动。但是,最好的方法是行业团结一致制定基于安全事件的响应机制,可以对有异常行为进行更好的打击。
给我们的警示
重入攻击此类的安全事件一定还会发生,所以除了上述在攻防两端我们需要付出的努力外,项目方需要做好应急预案,当受到黑客攻击时能最及时的进行反应,减少项目方和用户的损失。Vyper贡献者也建议,对于 Vyper 此类公共产品我们应该加强公众激励,寻找关键漏洞。OKLink呼吁应该尽早建立起一套安全响应标准,让黑/灰地址的资金追踪变得更加容易。
正如 OKLink 产品在此类事件中的攻防两端起到防范黑客和追查资金的作用,项目方在搭建平台的安全模块时应考虑第三方技术服务商可以带来的额外价值,更快更好的筑起项目的安全堡垒。
欧科云链的 Raymond Lei 和 Mengxuan Ren 对此文亦有帮助。