引言:关于DeFi的安全问题,从2020年2月份到现在,损失数亿美元,各路专家已有无数文章来解析DeFi乐高的风险,直到现在这类问题依然没有引起开发者们的高度重视,在市场持续狂热以及锁仓规模不断推高的环境中,人们似乎已经忘了,那个深埋在狂欢大陆土地下的隐患,并没有消失......
曾经的DeFi之王YFI协议未能幸免
2021年第一次闪电贷攻击事件,发生在了2020年的DeFi王者——YearnFinance协议身上,当然,这是偶然事件还是开年先拿王者开刀,来嘲讽DeFi的无能,我们暂且不论,也无从洞察“攻击者”的心境,这里,我们来看一下发生了什么。
根据慢雾科技的情报,遭受攻击的是YearnFinance协议的DAI策略池,具体情况如下:
Elastic Swap项目遭到闪电贷攻击:金色财经报道,据CertiK监测,Elastic Swap项目遭到闪电贷攻击,共计损失约37.4万美元(约18.74万USDC和4.06万TIC)。
AVAX合约地址:0x75739a693459f33B1FBcC02099eea3eBCF150cBe[2022/12/13 21:41:13]
1.攻击者首先从dYdX和AAVE中使用闪电贷借出大量的ETH
2.攻击者使用从第1步借出的ETH在Compound中借出DAI和USDC
3.攻击者将第2步中的所有USDC和大部分的DAI存入到CurveDAI/USDC/USDT池中,这个时候由于攻击者存入流动性巨大,其实已经控制CurveDAI/USDC/USDT的大部分流动性
“Value DeFi遭闪电贷攻击”系该协议中基于AMM的预言机bug导致:据PeckShield分析,“Value DeFi遭闪电贷攻击”是由于该协议中基于AMM的oracle(即Curve)中的一个bug。攻击步骤如下:
1.黑客从Aave进行了8万枚ETH的闪电贷;
2.在UniswapV2用WETH兑换了1.16亿枚DAI;
3.在UniswapV2将从Aave获得的8万枚ETH兑换成3100万USDT;
4.将2500万枚DAI存入Vault DeFi,铸造2490万枚pooltoken(给攻击者),以及2495.6万枚新3crv(由Vault DeFi托管);
5.在Curve将9000万枚DAI兑换为9028.5万枚USDC;
6.在Curve将3100万枚USDT兑换为1733万枚USDC;
7.销毁2490万枚铸造的池代币,以赎回3308.9万枚3crv代币,而不是24.956万枚(喂价被操纵)。
8.在Curve将1733万枚USDC兑换回3094万枚USDT;
9.在Curve将9028.5万枚USDC兑换回9092.7万枚DAI;
10.通过销毁33.089万枚3crv来赎回3311万枚DAI,从3pool中清除流动性。[2020/11/15 20:52:13]
4.?攻击者从Curve池中取出一定量的USDT,使DAI/USDT/USDC的比例失衡,及DAI/(USDT&USDC)贬值
慢雾发布Value DeFi协议闪电贷攻击简要分析:据慢雾区消息,Value DeFi遭遇闪电贷攻击的分析如下:
1.攻击者先从Aave中借出8万个ETH;
2.攻击者使用8万个ETH在Uniswap WETH/DAI池中用闪电贷借出大量DAI和在Uniswap WETH/DAI兑换大量USDT;
3.用户调用ValueMultiVaultBank合约的deposit合约使用第2步中小部分DAI进行充值,该合约中一共有3种资产,分别是3CRV、bCRV、和cCRV。该合约在铸币时会将bCRV, cCRV转换成以3CRV进行计价,转换完成后,Value Defi合约根据总的3CRV价值和攻击者充值的DAI数量计算mVUSD铸币的数量;
4.攻击者在Curve DAI/USDC/USDT池先使用第二步中剩余的大部分DAI和USDT兑换USDC,拉高USDC/3CRV的价格;
5.攻击者发起3CRV提现,这时会先将合约中的bCRV, cCRV转换成以3CRV计价,由于USDC/3CRV价格已被拉高,导致bCRV, cCRV能换算成更多的3CRV;
6.攻击者使用3CRV换回DAI,并在Uniswap中兑换回ETH,然后归还Aave的闪电贷 。
总结:由于 Value Defi 合约在铸币过程中将合约资产转换成 3CRV 时依赖 Curve DAI/USDC/USDT 池 中 USDC/3CRV的价格,导致攻击者可以通过操控 Curve DAI/USDC/USDT 池 中 USDC/3CRV 的价格来操控 mVUSD/3CRV 的价值,从而获利。[2020/11/15 20:52:09]
5.攻击者第3步将剩余的DAI充值进yearnDAI策略池中,接着调用yearnDAI策略池的earn函数,将充值的DAI以失衡的比例转入CurveDAI/USDT/USDC池中,同时yearnDAI策略池将获得一定量的3CRV代币
yearn.finance披露新的闪电贷安全漏洞,目前该问题已被修复:yearn.finance (YFI)披露一个新的闪电贷安全漏洞,该漏洞由安全研究员 Wen-Ding Li于10月29日通过Yearn的安全漏洞披露流程报告,团队在1.5 个小时后将该漏洞移除。根据该披露,闪电贷攻击可能会给TUSD保险库资金带来安全危险,目前该问题已被修复,同时TUSD保险库已被停止部署资金。目前资金是安全的,用户也无需采取任何措施。[2020/11/1 11:20:58]
6.攻击者将第4步取走的USDT重新存入CurveDAI/USDT/USDC池中,使DAI/USDT/USDC的比例恢复
7.攻击者触发yearnDAI策略池的withdraw函数,由于yearnDAI策略池存入时用的是失衡的比例,现在使用正常的比例提现,DAI在池中的占比提升,导致同等数量的3CRV代币能取回的DAI的数量变少。这部分少取回的代币留在了CurveDAI/USDC/USDT池中
8.由于第3步中攻击者已经持有了CurveDAI/USDC/USDT池中大部分的流动性,导致yearnDAI策略池未能取回的DAI将大部分分给了攻击者
9.重复上述3-8步骤5次,并归还闪电贷,完成获利
攻击者利用闪电贷进行这一循环套利,使得YearnFinance损失高达千万美元!
根源不是闪电贷,而是脆弱的价格机制
YFI和Curve之间的组合,利用LP的不同净值来计算份额,通过池子里的份额来决定价格,这是典型的价格操控!
我们把现在的各DeFi协议当作是各个国家,每个国家制定不同的政策规则,商人通过政策规则之间的组合,寻找突破口,来获取利差。这是光明正大的赚取合理收益,无法责怪攻击者,因为,你的机制告诉了别人,怎么来操控我的价格进行套利。
关于闪电贷攻击的问题,我们已经阐述过多次,《解读|Compound遭受价格预言机操纵攻击事件始末》,这篇文章里有详细描述。
价格操控的背后所暴露的问题,才是我们更应该去思考和研究的方向。
现如今的DeFi协议开发者,往往把快速、高效放在第一位,对区块链的本质充耳不闻,大家都求快,不愿去解决本质问题的根源。因为几乎所有人都正在这样做,睁一只眼闭一只眼。
比特币的设计,是让所有节点一起对正在广播的交易进行验证,所有人都同意的广播,这笔交易才作数。其本身就是一个冗余的复杂系统,比特币并非是为了在“可用性”方面做出创新,而是在“可信性”方面给出了一个完美的解决方案,解决了去中心化过程中的安全问题。比特币网络的算力规模越大,网络越安全,但其处理交易的效率并没有提高。
如果一个价格机制可以简单的利用所谓的“可信”节点上传到链上或者通过LP份额的方式来简单决定,而使用这个价格的DeFi协议或者用户无法对你的价格进行无需许可的有效验证,那么你给出的价格就是你说的算,并不是共识过的价格,并不是大家一起说的算;进而,基于这套价格体系的链上经济体的安全系数,也必然不会随着规模的扩大而增强。简单来讲,这与区块链本质背道而驰,舍本逐末。
坚定去中心化的安全之路
NESTProtocol坚持以无需许可,可被任何人验证的无套利空间的价格同步在链上生成,供DeFi协议调用,随着NEST报价矿工/验证者参与规模的增长,其在链上生成的价格数据质量也会同步提高,这是一个非合作博弈系统所应该表现出来的基础属性,可累积博弈。
在有效市场下,这种报价矿工之间的博弈、报价矿工与验证者之间的博弈,以及协议与二级市场之间的博弈,多维度非合作博弈生成的链上价格才是我们应该去追求的安全之根。
坚持区块链本质,坚定去中心化精神,是区块链行业发展的第一准则。
撰文|NESTFANS.知鱼
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。