USDC 的風險在於其擁有管理員權限的代理合約,如果權限泄露,集成 USDC 的 DeFi 項目都可能遭受攻擊。

原文標題:《去中心化金融,並不如我們所想》
撰文:outprog,imToken 後端開發與智能合約開發
來源:幣乎

在經歷 Lendf.Me 被盜事件後,我們知道 ERC777 代幣合約和普通借貸池合約組合會產生漏洞,正如 imToken Simon 所說:「 酒沒錯,頭孢也沒錯,放在一起,要了命」。這次事件最終導致了 2500 萬美元(摺合人民幣 1.7 億)被盜,雖然最後如數追回,卻在我們心裏刻下一次深刻的印記,讓我們不得不重新審視智能合約安全問題。

咕嚕踩雷記 已經全面的分析了使用去中心化金融所帶來的風險。回過頭再來看我們其他的去中心化項目,它們還存在其他的問題嗎?

在調查中,我們發現以太坊的去中心化金融場景中,大量項目集成了 USDC。而 USDC 在其代幣實現中,加入了一個前置代理合約。簡單的說就是我們使用 USDC 合約進行轉賬時,訪問的是 USDC 的代理,該代理再通過內部設置的地址,訪問到 USDC 的目標合約上。

USDC 會是 DeFi 下一個安全事故導火索嗎?

代理合約擁有一個管理員權限可以更改其代理的目標,當合約需要升級時就可以使用管理權限替換目標合約地址。這是一種可升級、可更替智能合約的設計模式,解決了合約升級這一難題,但同時也產生了巨大的風險。

如果代理合約的管理權限泄露,意味着攻擊者可以將代理的目標地址指向任何地址。攻擊者可以很輕易的僞造一個可以任意發行代幣的攻擊合約,再將代理合約指向這個攻擊合約。因此,USDC 代理合約一旦攻破,Compound (借貸池)也會像 Lendf.Me 一樣被全部抽空。甚至現今最大的穩定幣平臺 MakerDAO,也能通過對 USDC 代理合約攻擊而錯誤的生成穩定幣。任何平臺只要是集成了 USDC,皆存在該風險。而 USDC 正在去中心化應用中大規模的使用着。

當更多的代幣使用代理模式時,每一個代幣都會成爲攻擊向量,如果去中心化項目持續集成類似的項目,會使其安全性大打折扣。相比之下不使用代理合約,銷燬管理員密鑰的方式看來會更加健壯。

去中心化對信任的要求比傳統應用更高。由於智能合約要自動化的處理所有過程,在建立代碼的過程中就要求所有代碼之間之完全信任。像 USDC 這樣的代幣項目,本身具有一定的中心化屬性,大規模的應用在所有項目中時,就會把這些項目所有的信任全部集中在一箇中心化的單點上。這個單點的控制權對於整個去中心化生態而言,相當於上帝模式。此時一個單點代理合約的密鑰泄露,就可能引起整個去中心化生態的崩潰,造成無數項目被黑,無數代幣丟失。反觀,一個雖然未被黑的中心化單點,也具有控制整個去中心化生態權限,代幣管理機構可以使用同樣的手段對任何集成它的項目進行破壞或關閉。

可見,USDC 在大規模的應用過程中,使整個去中心化生態的風險全部集中在了 USDC 中心化控制的代理合約上,該合約爲 USDC 的管理機構提供了整個生態的上帝模式。或許我們所謂的去中心化,反而比傳統項目還更加中心化?

如若說去中心化還是早期階段,那在這蠻荒的開墾過程中,USDC 可謂是荒野之王。

One Ring to rule them all, One Ring to find them, One Ring to bring them all and in the darkness bind them (魔戒)

來源鏈接:bihu.com