yearn被攻擊過程解說
準備踏入牛年,幣市的大新聞除了ETH牛氣充天之外,相信就是yearn日前被攻擊而損失11M美金。我粗略讀了一些專家的分析,有一個大概的理解,想嘗試用比較淺白的文字解釋給各位(如有錯漏請指正)。
背景:先了解AMM資金池
先講一講背景,加密貨幣自動交易所(Automatic Market Maker, AMM)能夠做到貨幣兌換,是依靠用戶將特定貨幣存入至流動資金池。例如今次的主角 Curve 3pool,能處理 DAI / USDC / USDT 三種貨幣之間的兌換,背後就是靠用户存入這三種貨幣。(註:用户會存進去是因為兌換的手續費會攤分給提供流動資金的人)
AMM一般都有應付貨幣比例失衡的機制,透過存款獎賞及提款收費來鼓勵資金提供者積極維持資金池的平衡。當資金池的某種貨幣比例降低,存入此貨幣會有額外手續費回報,而提取此貨幣則會被扣掉一點點(slippage)。今次攻擊就是利用這個機制,製造巨大比例失衡,令yearn蝕錢給Curve,而攻擊者則透過Curve來賺取(或者叫搶走)yearn的資金。
攻擊手法解說
整個攻擊大概可以分三階段:
(為了簡潔,下文省略實際數字,如果想詳細了解,可以參考文末的參考資料)
準備
- 到dydx及Aave借閃電貸(Flash Loan),短暫借取大量ETH
- 到Compound將ETH抵押為DAI及USDC
- 將部份DAI及全部USDC存入Curve
攻擊
- 由Curve提取大量USDT,形成貨幣比例失衡(DAI及USDC遠高於USDT)
- 將手上剩餘的DAI存入yearn(yearn會轉存入Curve)
- 在Curve存入大量USDT,反轉貨幣比例(DAI及USDC遠低於USDT)
- 由yearn提取DAI,由於Curve上DAI比例極低,所以出現嚴重slippage,Curve實際能提取的DAI變少了
- 重複上述四步,讓yearn蝕錢給Curve
收割
- 攻擊五次後,從Curve提取USDC及DAI,其中DAI比最初存入為多,因為包含yearn蝕給Curve的DAI
- 到Compound償還DAI及USDC
- 到dydx及Aave償還ETH閃電貸
- 償還後剩下的DAI就是攻擊者的收獲
或許你已經發現,根據上述的攻擊原理,yearn損失的11M美金並非全部落入攻擊者手中。是的,根據 twitter 用户 @FrankResearcher 的分析,攻擊者的收獲大概為2.7M,只佔yearn損失的大約四份一,其餘其實用作支付Curve手續費以及償還Aave閃電貸利息。
為何攻擊能成立?
這個攻擊能夠成事,時間是相當重要。攻擊者上面的一大堆動作,究竟花了多長時間呢?答案是一刹那,一個交易,就已經完成。智能合約能夠將多項交易合併為一個交易,例如提款、兌換然後轉帳可以「一take過」,以一個交易完成。這次攻擊者就將上面那堆繁複的交易全部合併在一起,一次過執行,整個過程瞬間完成。
整個攻擊以借閃電貸開始,又以還閃電貸結束,究竟甚麼是閃電貸(Flash Loan)呢?就是利用智能合約能合併交易的能力,在一次交易內先借再還。過去在加密貨幣的世界,要借貸就必需提供抵押品,例如抵押ETH借出DAI。但閃電貸由於資金在借出的一瞬間就立刻歸還,所以是毋須抵押品,可以說是憑空變出龐大資金。閃電貸這發不單是用來攻擊他人,亦有其他場合的應用,有興趣可以參考更多網上資料。
不得不提,還有另兩個讓這次攻擊能成事的條件。第一是剛好遇着yearn從v1過渡至v2,暫時豁免v1提款手續費,攻擊者才會肆意多次大額提取,從yearn刮取資金。第二是Curve平台沒有設立slippage上限,令資金池嚴重失衡時出現極高slippage,形成此漏洞。
被攻擊後yearn怎樣處理?
我在BB班一直強調,任何投資都有其風險。yearn就有如虛擬投資經理,每一個vault背後有一套投資策略幫用户獲得較高回報,yearn亦一直提醒參與者注意風險(所以BB班系列最終亦沒有推介yearn)。今次的事件就有如投資經理失誤,如果是發生在傳統金融機構,或許是由投資公司承擔損失,或者是要訴諸法庭。而yearn是一個由社群共同管理的組織,首先在問題發生後大約十分鐘立即把漏洞堵塞了,之後社群在管治論壇上商討處理手法,究竟如何協助受影響的用户,同時平衡其他參與者的利益。用戶應該繼續保持持有yDAI,等待社群的決定。如果提款回DAI,那麼損失就無可挽回了。受影響的用戶,建議多加留意管治論壇上的最新討論,並積極參與。
參考資料
- 完全攻擊流程:https://twitter.com/FrankResearcher/status/1357464851531116544
- 關鍵攻擊流程解說:https://twitter.com/bkiepuszewski/status/1357483610652213249
- yearn流失資金分佈:https://twitter.com/FrankResearcher/status/1357639434380992512
舊文:加密貨幣走資賺息BB班
1. 大圍吹水篇
2. 銀包及找換店篇
3. 兌換加密貨幣篇
4. 穩定幣及找換店篇
5. 保守型存款生息篇(上)
6. 保守型存款生息篇(下)
7. 埋尾畢業篇
原文連結死火手記
Like my work? Don't forget to support and clap, let me know that you are with me on the road of creation. Keep this enthusiasm together!
- Author
- More