学院 资讯速递 文章

Harvest官方详解被黑客套利2400万美元的过程,闪电贷只是其中一环

2020.10.27 lornaq1221

来源:巴比特 作者:洒脱喜  链接:https://www.8btc.com/article/661801

10月26日,黑客利用闪电贷从DeFi协议Harvest的金库中盗走了2400万美元资金,而根据Harvest官方的分析报告显示,闪电贷只是这次攻击的一环,具体还涉及到了DeFi 协议的无常损失问题,尽管攻击者事后归还了大约250万美元的资金,但Harvest用户面临的损失依旧超过了2000万美元(具体约为3380万美元),对此,Harvest官方发出了悬赏,并请求黑客归还剩余的资金。

总结:

  1. 我们对这一工程错误负责,并确保此类事件在未来得到缓解;
  2. 为受影响的用户制定补救计划是我们在未来一周的首要任务;
  3. 我们谦卑地请求攻击者将资金退还给部署者,以便可以将它们分配给受影响的用户;

发生了什么?

UTC时间10月26日2:53:31,一名攻击者从Harvest Finance的USDC和USDT金库中窃取了资金。攻击者利用了影响Curve.fi Y池中个人资产的套利和无常损失进行了攻击,而Curve.fi Y池正是Harvest金库投资的地方。协议的以下机制允许执行此类攻击:

  1. Harvest的投资策略计算投资于基础实时协议资产的实时价值。金库使用资产的价值来计算将要发给资金存放用户的股份数量。当用户从金库中取出资金时,它们还使用资产的价值来计算用户退出时应收到的支出。
  2. 一些金库(包括USDC和USDT)中的资产存放在底层DeFi协议的共享池中(例如Curve.fi的Y池)。这些资产池中的资产会受到无常损失、套利和滑点等市场影响。因此,它们的价值可通过大量的市场交易来操纵。

攻击者反复利用Curve.fi Y池中USDC和USDT的无常损失影响。他们利用被操纵的资产价值将资金存入Harvest的金库,以一个对其有益的价格获得金库股份,然后以正常的价格退出金库,从而产生利润。以下是这次攻击事件的跟踪链:

  1. 攻击者的钱包地址是0xf224ab004461540778a914ea397c589b677e27b,其部署了一个合约0xc6028a9fa486f52efd2b95b949ac630d287ce0af,通过该合约,他们于UTC时间2020年10月26日02:53:31 执行了攻击。而进行攻击的10 ETH是通过0x4b7b9e387a79289720a0226f695913d1d11dbdc681b7218a432136cc089363c4这笔Tornado交易来隐藏来源的。
  2. 攻击本身在0x35f8d2f572fceaac9288e5d462117850ef2694786992a8c3f6d02612277b0877这笔交易中发起。
  3. 攻击者从Uniswap获得大量USDT(18,308,555.417594)以及USDC(50,000,000),以注入攻击合约中。
  4. 该合约通过Y池的互换交易将17,222,012.640506 USDT兑换成了USDC。互换的影响是,由于其它资产发生了无常损失,Y池内的USDC价值较高。这个智能合约获得的金额大致相当于17,216,703.208672 USDC;
  5. 攻击者将49,977,468.555526 USDC存入Harvest的USDC金库,以每股0.97126080216 USDC的价格接收51,456,280.788906 fUSDC。在攻击之前,每股fUSDC的价格为0.980007 USDC,因此攻击者将股份价值降低了大约1%。Harvest策略内部的套利检查没有超过3%的阈值,因此没有还原这笔交易。
  6. 攻击者通过Y池将17239234.653146 USDC兑换回USDT,结果是,由于无常损失效应的恢复,因此在Y池中获得了USDC的原始较低值。攻击者从而收回了17,230,747.185604 USDT。
  7. 攻击者从Harvest的USDC金库中提币,用所有fUSDC的股份交换回了50596877.367825 USDC。由于Y池内的USDC值下降,每股fUSDC的价格为0.98329837664 USDC。USDC完全由Harvest的USDC金库支付,完全不与Y池交互。如此进行一次,攻击者的净利润(不包括闪电贷费用)就是619408.812299 USDC,而攻击者在同一笔交易中重复了几次该过程。
  8. 在4分钟内针对USDC金库执行了17笔攻击交易后,攻击者以类似的方式对USDT金库重复该过程,从交易0x0fc6d2ca064fc841bc9b1c1fad1fbb97bcea5c9a1b2b66ef837f1227e06519a6开始。 他们在另外3分钟内完成了13笔针对USDT金库的攻击交易。
  9. 在UTC时间2020年10月26日 03:01:48 ,攻击者将13,000,000 USDC和11,000,000 USDT从攻击合约中转移至地址0x3811765a53c3188c24d412daec3f60faad5f119b。
  10. 攻击者随后又在0x25119cd54a4562aa427d9770af383512f9cb5e8e4d17232ad96b69dc293a3510这笔交易中将部分资金转移回Harvest部署者地址,涉及1761898.396474 USDC和718,914.048541 USDT

Harvest Finance在评估了这次攻击并重构攻击过程后,立即从共享池中取出了所有资金,这包括DAI、USDC、USDT、TUSD、WBTC以及renBTC。这些资金目前都在金库中,不再受到市场操纵的影响。这次攻击并没有涉及DAI、TUSD、WBTC以及renBTC,这些金库的存储用户也没有受到影响。

攻击发生后,USDC金库的股份价格从0.980007下跌至0.834953 USDC,而USDT金库的股份价格则从0.978874跌至0.844812 USDT,两者分别下跌了13.8%和13.7%。用户损失的价值大约为3380万美元,相当于攻击前协议中锁定总价值的3.2%

与攻击有关的事务日志可观察攻击者的地址。0xf224ab004461540778a914ea397c589b677e27b

下一步

Harvest Finance协议有一个定期的每周计划表,它需要保持所有农民的持续收益。根据2020年10月27日的排放计划,Harvest Finance团队宣布铸造19637.46枚FARM代币。而社区要求的,原定于10月27日发布的智能合约改进计划将被推迟,以便在攻击背景下再次评估其安全性。金库中使用共享池的资金,将继续从策略中提取,直到此类攻击的缓解措施到位(见下一节)。这些措施,以及为受影响的用户提供补救的基础设施,将是团队下一个开发重点。我们对这一工程错误负责,并确保此类事件在未来得到缓解。

未来可能的缓解措施

Harvest Finance团队致力于评估可能的缓解策略,并在即将发布的版本中实施这些策略以及任何必要的用户体验更改。我们将利用新金库的可升级特性,以及基于时间锁(timelock)的投资策略替换,并在发布前很好地与社区沟通缓解策略。

可能的修复技术包括以下这些选项:

  1. 实现存款的提交和显示机制。这将消除在单笔交易中执行存款和取款的能力,因此,基于闪电贷的攻击就变为不可行了。就用户而言,这意味着在存款期间,他们的代币将在一次交易中转移到Harvest。用户随后会在另一笔交易中claim他们的股份,最好是在不同的区块中。这将构成用户体验的变化,并可能导致更高,但仍可接受的gas成本。
  2. 一个更严格的配置现有存款arb的检查策略。当前的阈值设置为3%,因此不足以保护金库免受此类攻击。一个更严格的阈值可能使这种攻击在经济上不可行,然而,在自然无常损失效应的情况下,它可能会限制存款,周日的事件超过了7分钟,这表明,这一措施不够有效,因此应被视为对其他措施的补充。
  3. 基础资产的提取。当用户存入使用共享池(如Y池)的金库时,他们会有效地将其单个资产交换为池资产(如yCurve)。如果用户只提取基础资产,他们就可以根据当前的市场状况将其交易为资产组合。如果市场受到操纵,交易也会受到这种操纵,这将阻止攻击实体产生利润。从普通用户的角度来看,提出yCRV之后可以在单独的交易中转换为稳定币。虽然这需要进行UX方面的改变,但它可能有利于协议。而这种方法的缺点是,它将金库提取机制与当前正在使用的策略绑定在一起:如果一个策略切换到另一个不使用共享基础池的策略,或者使用不同的池,则提取所产生的资产也会发生变化。
  4. 使用预言机来确定资产价格。虽然一个近似的资产价格可有效地从外部预言机(由Chainlink或Maker提供)中确定,但是它与实际股份价格的联系非常松散。如果底层DeFi协议内的资产价值与预言机报价不同,金库将面临自由套利和闪电贷攻击。这不是Harvest的解决方案,但是,在系统设计和可能的缓解策略中,我们将考虑使用预言机。

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

  1. 通过快照和MerkleDistributor分发攻击者已退还的资金,我们与帮助创建这些工具的开发人员联系,并致力于构建可为受影响的用户提供补救措施的基础架构。分配资金是当务之急,一旦工具被构建出来后,我们将会发布更多关于资金分发的细节信息。
  2. 其他补救方法将在治理中进行分析和表决。

攻击者信息和赏金

  1. 攻击者使用了新生成的以太坊地址0xf224ab004461540778a914ea397c589b677e27bb来执行这次攻击;
  2. Tornado交易0x4b7b9e387a79289720a0226f695913d1d11dbdc681b7218a432136cc089363c4;
  3. 攻击在0x35F8D2F572FCEAAC9288E5D46211780EF2694786992A8C3F6D02612277B0877这笔交易发起;
  4. 攻击者通过REN协议将比特币传输到以下地址:
    1. 1Paykw4s2WX4SaVjDrQkwSiJr16AiANhiM
    2. 1HLG86DDEzAxAGmEzxr1SUfPCWcnWA6bMm
    3. 14stnrgMFNR4LesqQRUdo5n1VUx9xdAMeg
    4. 18w2Bm2cCsbLjWQU9BcnjzK8ErmzozrVa3
    5. 1FS2t2eAjmjaNmADN6SMHYo7G4XGpX1osS
    6. 1NdAJ89k1qpRMpZLwuYGQ7VnM45xD2NJXa
  5. 然后,攻击者将几笔交易发送到已知的Binance存款地址:https://blockstream.info/tx/7777569f003193ae59dbc5afbbf8bfbf3ac6c8ce8a8ec2b8707de14ddc3329a6 https://blockstream.info/tx/9fcc273f2d50fc5824b8fd0bbe832831d02e7fe04bcc09d143e787455c602195
  6. 我们向第一个帮助我们找回资金的个人或团队提供10万美元的赏金。
  7. 如果是在接下来的36小时内完成退还,则赏金为40万美元。请不要在这个过程中人肉搜索攻击者,我们强烈建议将所有努力集中在确保用户资金成功返还给部署人员上。

本文仅代表作者观点,不代表欧科云链立场。

加⼊欧科云链社群

和全球数字资产投资者交流讨论

扫码加入欧科云链社群

相关推荐

information-center