火星人许子敬:黑客是怎么攻破Harvest Finance?
今年以来,DeFi崛起,新项目层出不穷,流动性挖矿吸引了大批投资者进场。与此同时,DeFi项目现阶段的技术难以兼顾去中心化本质和安全性、稳定性,很多项目为了赶上风口,带着合约漏洞就匆忙上场,潜在风险还是很高的。
10月 26 日,黑客利用闪贷从 DeFi 协议 Harvest Finance的金库中盗走了 2400 万美元资金,尽管黑客事后归还了大约 250 万美元的资金,但 Harvest 用户面临的损失依旧超过了 2000 万美元。对此,Harvest团队发推称承认编程漏洞属于团队责任,称将按照快照将退还的部分资金返还给用户,剩余被盗资金的赔偿计划还在研究中。同时请求黑客退还资金。
随后Harvest Finance悬赏10万美元追踪黑客,后来28日增加到40万美元,今天将赏金提高到100万美元,目前,未有所获,先不论Harvest Finance最终是否能追踪到黑客及用户补偿计划。今晚我们来看看黑客是怎么攻破Harvest Finance的。
整个攻击过程持续了7分钟,简要此攻击过程如下:
1. 黑客通过Tornado.cash转入 20ETH 作为后续攻击手续费
2. 黑客通过UniswapV2闪电贷借出巨额 USDC 与 USDT
3. 黑客先通过Curve的 exchange_underlying 函数将 USDT 换成 USDC,此时 Curve yUSDC 池中的 investedUnderlyingBalance 将相对应的变小
4.随后黑客通过Harvest的 deposit 将巨额 USDC 充值进 Vault 中,充值的同时Harvest 的 Vault 将铸出 fUSDC,而铸出的数量计算方式如下:
amount.mul(totalSupply).div(underlyingBalanceWithInvestment);
计算方式中的underlyingBalanceWithInvestment一部分取的是 Curve 中的 investedUnderlyingBalance 值,由于 Curve 中 investedUnderlyingBalance 的变化将导致 Vault 铸出更多的 fUSDC
5.之后再通过 Curve 把 USDC 换成 USDT 将失衡的价格拉回正常
6.最后只需要把 fUSDC 归还给 Vault 即可获得比充值时更多的 USDC
7.随后黑客开始重复此过程持续获利
受此次安全事件影响,Harvest平台代币FARM币价暴跌50%,截至发稿达112美金。
未来对于Harvest Finance我想应该从一下几方面着手:
[if !supportLists]1. [endif]实施存款承诺与披露机制
[if !supportLists]2. [endif]加强对策略中的现有存款套利检查配置
[if !supportLists]3. [endif]基础资产提现
[if !supportLists]4. [endif]使用预言机来决定资产价格