火星人许子敬:黑客是怎么攻破Harvest Finance?

发布时间:20-10-3017:09

今年以来,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我想应该从一下几方面着手:

1. 实施存款承诺与披露机制

2. 加强对策略中的现有存款套利检查配置

3. 基础资产提现

4. 使用预言机来决定资产价格

本文来源: 金色财经 / 作者:币圈王多鱼

返回顶部