思考
思考

筆名 思考 //好讀書,偏向人文歷史地理,然後胡思亂想,繼而在網絡留下片言隻語。正職為無線電訊工程師。 //Blog: https://hkxforce.net

yearn被攻擊過程解說

Image source: pixabay https://pixabay.com/photos/open-fire-fire-open-fireplace-cozy-5864985/, yearn doc https://docs.yearn.finance/

準備踏入牛年,幣市的大新聞除了ETH牛氣充天之外,相信就是yearn日前被攻擊而損失11M美金。我粗略讀了一些專家的分析,有一個大概的理解,想嘗試用比較淺白的文字解釋給各位(如有錯漏請指正)。

背景:先了解AMM資金池

先講一講背景,加密貨幣自動交易所(Automatic Market Maker, AMM)能夠做到貨幣兌換,是依靠用戶將特定貨幣存入至流動資金池。例如今次的主角 Curve 3pool,能處理 DAI / USDC / USDT 三種貨幣之間的兌換,背後就是靠用户存入這三種貨幣。(註:用户會存進去是因為兌換的手續費會攤分給提供流動資金的人)

AMM一般都有應付貨幣比例失衡的機制,透過存款獎賞及提款收費來鼓勵資金提供者積極維持資金池的平衡。當資金池的某種貨幣比例降低,存入此貨幣會有額外手續費回報,而提取此貨幣則會被扣掉一點點(slippage)。今次攻擊就是利用這個機制,製造巨大比例失衡,令yearn蝕錢給Curve,而攻擊者則透過Curve來賺取(或者叫搶走)yearn的資金。

攻擊手法解說

整個攻擊大概可以分三階段:

(為了簡潔,下文省略實際數字,如果想詳細了解,可以參考文末的參考資料)

準備

  1. 到dydx及Aave借閃電貸(Flash Loan),短暫借取大量ETH
  2. 到Compound將ETH抵押為DAI及USDC
  3. 將部份DAI及全部USDC存入Curve

攻擊

  1. 由Curve提取大量USDT,形成貨幣比例失衡(DAI及USDC遠高於USDT)
  2. 將手上剩餘的DAI存入yearn(yearn會轉存入Curve)
  3. 在Curve存入大量USDT,反轉貨幣比例(DAI及USDC遠低於USDT)
  4. 由yearn提取DAI,由於Curve上DAI比例極低,所以出現嚴重slippage,Curve實際能提取的DAI變少了
  5. 重複上述四步,讓yearn蝕錢給Curve

收割

  1. 攻擊五次後,從Curve提取USDC及DAI,其中DAI比最初存入為多,因為包含yearn蝕給Curve的DAI
  2. 到Compound償還DAI及USDC
  3. 到dydx及Aave償還ETH閃電貸
  4. 償還後剩下的DAI就是攻擊者的收獲

或許你已經發現,根據上述的攻擊原理,yearn損失的11M美金並非全部落入攻擊者手中。是的,根據 twitter 用户 @FrankResearcher 的分析,攻擊者的收獲大概為2.7M,只佔yearn損失的大約四份一,其餘其實用作支付Curve手續費以及償還Aave閃電貸利息。

為何攻擊能成立?

Aave Flash Loan 截圖 https://aave.com/flash-loans/

這個攻擊能夠成事,時間是相當重要。攻擊者上面的一大堆動作,究竟花了多長時間呢?答案是一刹那,一個交易,就已經完成。智能合約能夠將多項交易合併為一個交易,例如提款、兌換然後轉帳可以「一take過」,以一個交易完成。這次攻擊者就將上面那堆繁複的交易全部合併在一起,一次過執行,整個過程瞬間完成。

整個攻擊以借閃電貸開始,又以還閃電貸結束,究竟甚麼是閃電貸(Flash Loan)呢?就是利用智能合約能合併交易的能力,在一次交易內先借再還。過去在加密貨幣的世界,要借貸就必需提供抵押品,例如抵押ETH借出DAI。但閃電貸由於資金在借出的一瞬間就立刻歸還,所以是毋須抵押品,可以說是憑空變出龐大資金。閃電貸這發不單是用來攻擊他人,亦有其他場合的應用,有興趣可以參考更多網上資料

不得不提,還有另兩個讓這次攻擊能成事的條件。第一是剛好遇着yearn從v1過渡至v2,暫時豁免v1提款手續費,攻擊者才會肆意多次大額提取,從yearn刮取資金。第二是Curve平台沒有設立slippage上限,令資金池嚴重失衡時出現極高slippage,形成此漏洞。

被攻擊後yearn怎樣處理?

yearn被攻擊後提示用戶暫時不要提款,以免出現實質損失

我在BB班一直強調,任何投資都有其風險。yearn就有如虛擬投資經理,每一個vault背後有一套投資策略幫用户獲得較高回報,yearn亦一直提醒參與者注意風險(所以BB班系列最終亦沒有推介yearn)。今次的事件就有如投資經理失誤,如果是發生在傳統金融機構,或許是由投資公司承擔損失,或者是要訴諸法庭。而yearn是一個由社群共同管理的組織,首先在問題發生後大約十分鐘立即把漏洞堵塞了,之後社群在管治論壇上商討處理手法,究竟如何協助受影響的用户,同時平衡其他參與者的利益。用戶應該繼續保持持有yDAI,等待社群的決定。如果提款回DAI,那麼損失就無可挽回了。受影響的用戶,建議多加留意管治論壇上的最新討論,並積極參與。

參考資料

舊文:加密貨幣走資賺息BB班
1. 大圍吹水篇
2. 銀包及找換店篇
3. 兌換加密貨幣篇
4. 穩定幣及找換店篇
5. 保守型存款生息篇(上)
6. 保守型存款生息篇(下)
7. 埋尾畢業篇

原文連結死火手記


CC BY-NC-ND 2.0 版权声明

喜欢我的文章吗?
别忘了给点支持与赞赏,让我知道创作的路上有你陪伴。

第一个支持了这篇作品
加载中…
加载中…

发布评论