Harvest 稱,閃電貸只是這次攻擊的一環,具體還涉及到 DeFi 無常損失。Harvest 發佈懸賞,並請求黑客歸還剩餘的資金。

原文標題:《Harvest 官方詳解被黑客套利 2400 萬美元的過程,閃電貸只是其中一環
撰文:Harvest Finance
編譯:灑脫喜

10 月 26 日,黑客利用閃電貸從 DeFi 協議 Harvest 的金庫中盜走了 2400 萬美元資金,而根據 Harvest 官方的分析報告顯示,閃電貸只是這次攻擊的一環,具體還涉及到了 DeFi 協議的無常損失問題,儘管攻擊者事後歸還了大約 250 萬美元的資金,但 Harvest 用戶面臨的損失依舊超過了 2000 萬美元(具體約爲 3380 萬美元),對此,Harvest 官方發出了懸賞,並請求黑客歸還剩餘的資金。

Harvest Finance 詳解黑客套利 2400 萬美元過程:除了閃電貸還有無常損失

概要

  • 我們對這一工程錯誤負責,並確保此類事件在未來得到緩解;
  • 爲受影響的用戶制定補救計劃是我們在未來一週的首要任務;
  • 我們謙卑地請求攻擊者將資金退還給部署者,以便可以將它們分配給受影響的用戶;

發生了什麼?

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 這筆交易發起;

攻擊者通過 REN 協議將比特幣傳輸到以下地址:

  • 1Paykw4s2WX4SaVjDrQkwSiJr16AiANhiM
  • 1HLG86DDEzAxAGmEzxr1SUfPCWcnWA6bMm
  • 14stnrgMFNR4LesqQRUdo5n1VUx9xdAMeg
  • 18w2Bm2cCsbLjWQU9BcnjzK8ErmzozrVa3
  • 1FS2t2eAjmjaNmADN6SMHYo7G4XGpX1osS
  • 1NdAJ89k1qpRMpZLwuYGQ7VnM45xD2NJXa
  • 1CLHhshrusvT4XADWA29R2H4ndsSUamEWn

然後,攻擊者將幾筆交易發送到已知的 Binance 存款地址:

https://blockstream.info/tx/7777569f003193ae59dbc5afbbf8bfbf3ac6c8ce8a8ec2b8707de14ddc3329a6

https://blockstream.info/tx/9fcc273f2d50fc5824b8fd0bbe832831d02e7fe04bcc09d143e787455c602195

我們向第一個幫助我們找回資金的個人或團隊提供 10 萬美元的賞金。如果是在接下來的 36 小時內完成退還,則賞金爲 40 萬美元。請不要在這個過程中人肉搜索攻擊者,我們強烈建議將所有努力集中在確保用戶資金成功返還給部署人員上。

關有關閃電貸攻擊者的信息:攻擊者已經證明了他們的觀點。如果他們能將資金返還給用戶,社會各界將不勝感激,將資金返還給受影響的用戶是重點。

我們犯了一個工程錯誤,我們承認了。成千上萬的人遭到了附帶損害,因此我們謙卑地請求攻擊者將資金退還給部署者,然後將資金全部分配給用戶。

來源鏈接:medium.com