MakerDAO存在安全漏洞?這或許跟一個特殊防禦機制有關
灑脫喜/張詠晴編譯
2019-12-11 09:00

(圖片來自:pexels.com/)

來自Coinmonks的研究者Micah Zoltu,日前披露了MakerDAO治理系統存在的漏洞,其表示任何擁有約40000 MKR(約2000萬美元)的人,都可以竊取Maker DAO的所有抵押品,包括DAI、SAI以及來自Compound、Uniswap以及其它Maker集成系統的大量資產,共計超過3.4億美元。目前,Maker基金會已發布了緊急公告,稱會透過修改治理規則修復這一問題。

以下是Micah Zoltu披露的漏洞細節及Maker基金會的公告內容:

摘要

任何擁有約40000 MKR(約2000萬美元)的人,都可以竊取Maker DAO的所有抵押品,包括DAI、SAI以及來自Compound、Uniswap以及其它Maker集成系統的大量資產,共計超過3.4億美元。Maker DAO v2版本(又名多抵押DAI或McDAI)本應啟動安全措施(緊急關閉和治理延遲),以防惡意的MKR持有者竊取所有抵押品(攻擊者還可能在該過程中,搶劫與Maker集成的大量Uniswap、Compound及其它系統)。然而,他們並沒有選擇這樣去做。

一家銀行

Maker DAO,正是這個東西讓DAI在工作,目前,它在v1和v2版本中鎖定了價值約3.4億美元的ETH。它也是一個「被治理」的系統,與uniswap.exchange或者augur.net不同,這意味著一些財閥可以控制系統的行為。

Maker DAO的設計

治理系統可以調用各種各樣的內部函數,這些函數允許管理者做他們想做的任何事情。治理是一個相當簡單的「stake the leader」系統,在這個系統中,你將你的MKR質押在你想要控制系統的合約當中,而質押最多MKR的合約,就擁有這樣的控制權。

由於當前的執行合約(又名執行提議)上大約質押了80,000 MKR,所以,做任何你想做之事的原始成本大約是80000 MKR(或大約4100萬美元)。

為了減輕惡意參與者的威脅,系統有一種機制,其在選擇新的執行合約後,在採取任何行動之前,會有一個延遲。在此延遲期間,任何擁有足夠MKR的人,都可以觸發整個系統的全局結算,在新的執行合約做出任何不利的事情之前,有效地將其關閉。這意味著,如果一個竊賊出現,並試圖在他們自己的執行合約中投票,而該合約的程式是竊取所有抵押品,即使他們擁有比其他執行合約更多的權益,他們也將不得不等待這一延遲,並希望在此期間沒有人觸發防禦機制。

疏忽之處

而問題在於,Maker基金會決定此治理延遲的適當值為0秒。好的,防禦者有0秒的時間來防禦(富有但惡意的)一方發起的攻擊。

微妙之處

有鑒於上述情況,攻擊者可以執行以下操作:

  1. 盡一切可能獲得80000 MKR;
  2. 創建一個執行合約,它會把所有抵押品從Maker系統轉走;
  3. 立即(在同一交易中)對合約進行投票表決;
  4. 立即(在同一交易中)激活合約;
  5. 帶走價值3.4億美元的ETH(別費心去拿你的MKR了,這種攻擊發生後,它就一文不值了);

這種攻擊的回報率是令人難以置信的(8倍),但它的執行成本很高,幸運的是,只要耐心一點,我們就能把這次攻擊的成本降低50%。

還記得上面我們如何描述現行投票制度的運作方式嗎?即擁有最多投票權的執行合約,擁有著所有控制權。無論何時提出治理投票,都會有一段時期,讓MKR質押權益從舊的執行合約,轉移到新的執行合約。這種情況從來不會一下子發生,通常是隨著時間的推移,個人將把他們的選票向前遷移。因此,將會有一個時間點,其中80,000枚積極參與的MKR,將被分割在兩個執行合約當中,其中每個都有大約40000 MKR。一個擅長寫腳本的傢伙,可以很容易地確定交易的時間,這樣當MKR在兩個合約之間以最佳方式分配時,它就可以在這個時候執行上述攻擊,而只需要花費40000 MKR(約2000萬美元)的金額。

本文為巴比特資訊授權刊登,原文標題為「15秒內從2000萬美元變成3.4億美元?MakerDAO緊急修復這一安全漏洞