Harvest关于闪电贷攻击的事后报告

Harvest_Finance_ch
Harvest China
Published in
10 min readOct 28, 2020

--

https://images.fineartamerica.com/images/artworkimages/mediumlarge/1/a-fox-caught-in-a-trap-gustave-courbet.jpg

概要

1.我们会为这个技术失误负责,并会防止同类事件的再次发生。

2.在接下来的时间里,我们将优先为受影响的用户制定补救计划。

3.我们为攻击者提供了一个退款奖励,希望ta能将资金退还给部署者地址,以便我们将其还给用户。

事件发生经过

10月26日凌晨02:53:31(UTC时间),攻击者从Harvest Finance的USDC和USDT金库中盗窃了资金。攻击者利用套利和无常损失影响了Curve.fi的Y池内的单个资产的价格,而Harvest金库的资金投入了Curve.fi的Y池。 攻击者是通过协议的以下几个机制实施攻击的:

  1. Harvest的投资策略通过实时的底层协议中的投资价值来计算资产的实时价格。而用户存入资金所发行的fToken的价格是金库根据资产的价值来计算的。当用户从金库中取出资金时,同样也是使用资产的价格来计算用户在退出时获得的初始Token数量。
  2. 一些金库(包括USDC和USDT)中的资产被存放在底层DeFi协议的共享池中(如Curve.fi上的Y池)。 这些资产的价格会受到市场的影响,如浮亏浮盈、套利和滑点损失。因此它们的价格可以通过进行大量的市场交易来操纵。

攻击者反复利用了USDC和USDT的浮亏浮盈来影响Curv.fi的Y池。他们将被操纵了价格的资产存入了Harvest的金库,再以获利价格获取金库的Token后提款来获取利润。以下是此次攻击后整理出来的事件链:

  1. 攻击者的钱包地址是:0xf224ab004461540778a914ea397c589b677e27bb 他用上述地址部署了一个合约0xc6028a9fa486f52efd2b95b949ac630d287ce0af,并通过该合约在2020年10月26日02:53:31 AM +UTC完成了整个攻击。用于攻击的10个ETH是通过Tornado交易获得的。相关交易信息如下:0x4b7b9e387a79289720a0226f695913d1d11dbdc681b7218a432136cc089363c4
  2. 首次攻击在一个交易中完成0x35f8d2f572fceaac9288e5d462117850ef2694786992a8c3f6d02612277b0877
  3. 攻击者从 Uniswap 获得了巨额的 USDT(18,308,555.417594 ) 与 USDC(5000 万),并注入到了攻击合约中;
  4. 该合约在 Curve Y 池内通过兑换协议将 17222012.640506 USDT 兑换成了 USDC。这笔兑换导致了其它资产发生了浮亏浮盈,Y 池内的 USDC 价格升高,合约获得了 17216703.208672 USDC。
  5. 攻击者将 49,977,468.555526 USDC 存入 Harvest 的 USDC 金库,以每个 fUSDC/USDC=0.97126080216的价格,兑换了 51,456,280.788906 fUSDC。攻击前fUSDC单价为 0.980007,攻击后单价降低了大约 1%,这并没有触发 Harvest 套利策略设置的 3% 门槛,因此此交易没有被强制撤销。
  6. 攻击者通过 y 池,将剩余的 17239234.653146 USDC 换回 17,230,747.185604 USDT;由于浮亏浮盈的作用,此时 Y 池中 USDC 价格下降,攻击者获得了 17,230,747.185604 USDT。
  7. 攻击者从 Harvest 的 USDC 金库中发起提币,由于此时 Y 池内的 USDC 价值下降,fUSDC/USDC单价升高至 0.98329837664,攻击者将此前全部的 fUSDC(约 5145 万)的换回了 50596877.367825 USDC。此时的USDC 全部通过 Harvest 的 USDC 缓冲池支付,与 Y 池完全没有交互。这一次的纯利润(不包括闪电贷的费用)为619408.812299 USDC。随后,攻击者在同一笔交易中重复了多次该过程。
  8. 攻击者在 4 分钟内完成了针对 USDC 金库的 17 次攻击交易后,又用类似的方式对 USDT 金库发起攻击(0x0fc6d2ca064fc841bc9b1c1fad1fbb97bcea5c9a1b2b66ef837f1227e06519a6),并在 3 分钟内完成了 13 笔攻击交易。
  9. 在2020年10月26日03:01:48 AM +UTC ,攻击者将 13,000,000 USDC 和 11,000,000 USDT 从攻击合约中转移至地址 0x3811765a53c3188c24d412daec3f60faad5f119b,交易记录:0x53fae6f1d6b8a76a666a0bf7f9c724e6006465e544f89f1515b939d8911e8c58
  10. 攻击者在交易0x25119cd54a4562aa427d9770af383512f9cb5e8e4d17232ad96b69dc293a3510中向Harvest 的部署地址返还了部分资金,共 1761898.396474 USDC 和 718,914.048541 USDT。

在评估攻击并理清其流程后,Harvest Finance立即采取行动,从Curve 池子中撤出了所有资金。包括DAI, USDC, USDT, TUSD以及WBTC和renBTC。这些资金目前存放在金库中,不会受到进一步的市场操纵。这次攻击没有涉及到DAI、TUSD、WBTC和renBTC,这些金库的用户没有受到影响。

因为此次攻击影响,USDC金库中fUSDC单价从0.980007下降到0.834953,fUSDT从0.978874下降到0.844812,分别下降13.8%13.7%。 损失的金额约为3380万美元,约占攻击发生前协议中总锁仓量(TVL)的3.2%。

在攻击者的地址0xf224ab004461540778a914ea397c589b677e27bb上可以看到与攻击有关的交易日志信息。

接下来的工作

Harvest Finance的协议有一个定期的每周计划,需要继续进行这个计划保持我们的农民们的挖矿收益。Harvest Finance团队在2020年10月27日(星期二)的发行计划中发行了19637.46枚FARM。

另外,在遭受这次攻击过后,我们打算重新评估智能合约的安全性,所以将推迟原本由社区提出并计划在10月27日星期二发布的智能合约升级报告。

在针对此类型攻击的预防工作完成前,我们不会把金库里资金的放入新的挖矿池子里(请参阅下一节)。

Harvest团队目前的重点工作有两项,一是做好预防攻击措施,二是为此次事件受影响的用户指定补偿计划。我们会为这次的技术失误负责,并会防止同类事件的再次发生。

未来可能的预防措施

Harvest Finance团队将专注于制定预防策略,并在即将发布的版本中进行必要的UX更改。我们会以经过更新且具备时间锁功能的新金库替代旧库,并在发布前向大家公布我们的预防策略。

可能采用的预防方法如下:

  • 对存款实行“提交-披露”机制。这将取消在单笔交易中执行存款和取款的能力,使基于闪贷的攻击变得不可行。在用户方面,这意味着在存款的操作过程中,他们的代币将会通过一条交易转移到Harvest的资金池,并会在另一条交易甚至是另一个区块中来获取他们的份额。这会让用户的使用体验发生变化,并可能导致用户支付稍高但仍可接受的Gas费用。
  • 在策略中执行更加严格的存款套利预防措施。 当前阈值设置为3%,不足以保护金库免受此类攻击。 更苛刻的阈值能使这种攻击在从获利上不再可行。但是,在平时正常的无常损失影响下,它可能会在某些情况下对存款作出限制。 周日在7分钟内发生的事件表明该措施能发挥的效果是有限的,只能作为其他措施的补充。
  • 基础资产的提取。当用户存入使用挖矿共享池(例如Y池)的保管库时,他们有效地将其单种资产换为挖矿资产(例如yCurve)。如果用户仅提取基础资产,则他们将能够根据当前市场状况将其交易为资产组合。如果市场受到操纵,则交易也将受到这种操纵,这将阻止攻击实体产生利润。从普通用户的角度来看,提取yCRV之后可以通过单独的交易转换为稳定币。尽管这需要更改UX,但这也可以解决大家公摊滑点损失的问题,也对我们的协议有好处。这种方法的缺点是,它将当前资金池提款的机制相绑定:如果从一个策略切换到另一个不需要用底层挖矿资产或者另一个池子,那么最后由提币产生的资产也将发生变化。
  • 使用预言机Oracle来确定资产价格。虽然资产的大致价格可以由外部预言机(由Chainlink或Maker提供)有效确定,但它仍然与实际价格之间存在时间差。如果底层DeFi协议中的资产价值与Oracle报告的价值不同,则该资金池仍然可能受到套利闪电贷攻击。所以预言机并不是Harvest的解决方案,但是,在系统设计和可能的缓解策略中我们可以考虑使用预言机Oracle(到目前为止已经考虑过)。

针对USDC和USDT中丢失资金的用户的补偿方法

我们将首先对攻击前的链上资产进行快照,并用MerkleDistributor的工具向受损用户分配攻击者退回的资金,目前已经与帮助创建这些工具的开发人员联系,并积极构建可以为受影响用户提供补偿措施的基础架构。分配资金是我们工作的重中之重。一旦工具构建完成,我们将发布更多有关资金分配的详细信息。

其他可能的补救措施将在社区治理中进行分析和投票。

攻击者的信息和赏金:

1Paykw4s2WX4SaVjDrQkwSiJr16AiANhiM

1HLG86DDEzAxAGmEzxr1SUfPCWcnWA6bMm

14stnrgMFNR4LesqQRUdo5n1VUx9xdAMeg

18w2Bm2cCsbLjWQU9BcnjzK8ErmzozrVa3

1FS2t2eAjmjaNmADN6SMHYo7G4XGpX1osS

1NdAJ89k1qpRMpZLwuYGQ7VnM45xD2NJXa

1CLHhshrusvT4XADWA29R2H4ndsSUamEWn

告闪电贷的攻击者的书:

攻击者们,你们已经表达了你们的立场,也通过这个已证明了你们的能力。如果你们可以将资金退还给用户,社区将不胜感激。退回资金给受影响的用户是我们的重心。

最后,我们犯了一个技术失误,对此我们会负责到底。成千上万的人受到了连带损失,因此我们诚心地请求攻击者将资金退还给部署者地址,我们最后将把资金全部退还给用户。

--

--

Harvest_Finance_ch
Harvest China

Harvest是一个资产管理平台,让农民存入的资产收益最大化,自动在 DeFi 中获得得最高的收益,为了降低手续费,我们制定了前沿战略,为各位农民提供DeFi流动性挖矿的一站式服务!👉 中文社区小助手WeChat ID:angelwongfks