鏈聞ChainNews
公眾號ID:chainnewscom
對各家 DeFi 協議而言,閃電攻擊意味著安全模式已經改變;閃電貸也給以太坊帶來了新的動力,要儘快過渡到以太坊 2.0。
撰文:Haseeb Qureshi,加密貨幣風投機構 Dragonfly Capital 管理合夥人閃電貸最近成為外界關注的熱點。兩名黑客利用閃電貸攻擊了保證金交易協議 bZx,第一起套利金額為35 萬美元,之後又搞了一起套利金額 60 萬美元的翻版攻擊。 如果用一個詞來形容這些攻擊的話,可以說是「壯觀」。每次攻擊中身無分文的黑客貸到價值數十萬美元的 ETH,分散利用一系列鏈上協議的漏洞進行了一通操作,從所盜竊的資產中提走了數十萬美元,併成功堵上鉅額 ETH 貸款窟窿。所有這一切在瞬間完成,就是說,在一個以太坊區塊中完成。
Carmine Infantino 設計的漫畫封面我們不清楚這些攻擊者是誰、身居何處。兩人都是空手套白狼,攻擊完成賺到數十萬美元,且沒有留下任何暴露身份的痕跡。
剛爆出這些攻擊消息時,我正在仔細思考閃電貸及 DeFi 的安全性問題。我認為這個問題值得公共討論。
簡單說一下我的觀點:我認為閃電貸存在重大安全威脅。但閃電貸不會消失,我們需要認真考慮未來它對 DeFi 的安全性影響。什麼是閃電貸?閃電貸概念最早由Marble 協議於2018年提出。Marble 自詡「智能合約銀行」,其產品是很簡單、但很具智慧的 DeFi 創新:通過智能化合約完成的零風險貸款。
貸款如何能零風險?
傳統信貸機構放貸時面臨兩種風險。第一種是違約風險:如果貸款人攜款潛逃,信貸機構會吞下苦果。但第二種是流動性風險:如果一家信貸機構在錯誤的時間放出太多貸款,或者借款人未及時還款,信貸機構可能意外遭遇流動性緊張,無法履行自己的義務。 閃電貸減緩了這兩種傳統放貸風險。閃電貸的基本工作原理是:在單筆交易中貸出借款人需要的金額。然而在交易結束時,借款人必須償還不少於貸款金額的數目。如果借款人做不到,貸款機構會自動回滾交易。(是的,智能合約能做到這一點!)
簡單講,閃電貸是自動的:如果借款人不能償還貸款,整個交易就會回滾,就像貸款根本沒發生一樣。
這樣的事情只有在區塊鏈中才能發生。比如你不能在 BitMEX交易所進行閃電貸。因為智能合約平臺一次性處理交易,所以一次交易的所有元素是批處理執行的。交易執行時,可以把這個想成交易的「
這意味著,成為閃電貸出借方感覺上不需要任何成本。這嚴重違反了直覺。所以均衡狀態下閃電貸的成本應該是多少?
基本上講,閃電貸應該是沒有成本費用的。或者更準確的說,一筆很小的費用,能補償讓一筆資產進入可放貸狀態而添加的三行代碼。
來自 0x 研發人員 Remco Bloemen
閃電貸不能收取傳統意義上的利息,因為貸款的持續時間為 0,( APR * 0 = 0)。當然,如果任何放貸機構收取更高的利息,將會被利息更低的其他競爭對手碾壓。 閃電貸讓資金成為真正的商品。這種競爭到頭來不可避免的將成本壓低到 0 或者金額極小。dYdX目前閃電貸手續費為 0。而AAVE收取本金的0.09%
「閃電貸可以幫助交易者從 Marble 銀行貸款,在一家去中心化交易所 DEX 中買幣, 然後在另一家 DEX 以較高價格賣出代幣,一筆自動化交易就可以讓您將套利收益收入囊中。」
而現實確實如此—— 從金額上講,我們目前看到的多數閃電貸都被用於此類套利交易。
AAVE 的閃電貸用途,來源:AAVE但金額還很小。AAVE 自成立以來發起的閃電貸金額才剛剛超過 1 萬美元。與套利交易規模和 DeFi 市場流動性相比,不過九牛一毛。
這主要是因為多數套利交易是由運行復雜機器人的競爭性套利者完成的。他們進行鏈上優先 gas 拍賣 ,然後利用 GasToken 來優化交易費。這一市場競爭非常激烈,他們很樂意在賬面上保留部分代幣來優化利潤。
另一方面,從 AAVE 借款的成本約為 8 萬 gas,並收取本金 0.09%,對利潤微薄的套利競爭而言,這一成本過高。實際上多數 AAVE 套利交易中,借款人給貸款池支付的手續費多過其套利收益。
長期來看,除非是某些特殊情況,否則套利者不太可能使用閃電貸。
事實證明,閃電貸在 DeFi 中還有其他更引人注目的用例。一個例子是為貸款再融資。例如,假設我有一個 Maker 抵押債倉(CDP),在裡面中鎖定了 100 美元的 ETH,我從其中借了 40 個 DAI 幣的貸款,因此減去債務後我在 CDP 中的淨頭寸為 60 美元。假設我想再融資放在Compound
儘管這些很酷,但 bZx 攻擊者讓我們清楚看到,閃電貸能帶來多大的傷害。
閃電攻擊對安全的重大意義我越來越相信閃電貸真正解鎖的是閃電攻擊——利用閃電貸進行高額資金攻擊。近期的 bZx 黑客攻擊讓我們管中窺豹,我懷疑這僅僅是個開頭而已。
為何閃電貸成為攻擊者的利器?主要有兩個原因。
很多黑客攻擊需要大量的前置資金(例如操縱 Oracle 幣價格)。如果你 1000 萬美元的 ETH 取得正收益,那應該不是什麼套利交易。
短期貸款可以最大程度地減少攻擊者的汙點。如果我有一個如何以 1000 萬美元的 ETH 操縱 Oracle 幣 的想法,即使我擁有那麼多的 ETH,我可能也不想用自己的資金來冒險。我的 ETH 可能沾染汙點,交易所可能會拒絕我的存款,洗錢難度大大增加。有風險!但是,如果我用閃電貸貸出 1000 萬美元,誰在乎呢?各方都會有收益。我的貸款來源——dYdX的抵押池不會被汙染, dYdX 的汙染某種程度上消失了。
您可能不喜歡,但交易所審查制度如今已成為區塊鏈安全模式的一部分——相當模糊且中心化。但我認為對一個攻擊者而言,閃電貸實質上改變了這種風險。在比特幣白皮書中,中本聰發出了著名的宣言:比特幣不會遭受安全攻擊,因為:
「(攻擊者)應該會發現按照規則參與的話比毀壞系統更有利可圖,而毀壞系統就是毀壞他自己的資產。」
而在閃電貸中,攻擊者與閃電貸遊戲絲毫沒有利益捆綁。閃電貸從本質上改變了攻擊者的風險。 另外請記住,閃電貸可以累積!鑑於 gas 的限制,你可以在一筆交易中從所有能放貸的資金池中貸款(最高可達 5000 萬美元),然後將所有資金捆綁到一個可攻擊合約中。現在攻擊者手裡有了 5000 萬美元的重磅大錘,只要
當然攻擊者不是僅憑大量金錢就可以對這些協議實施攻擊。如果所有 DeFi 堆棧都像它聲稱的那樣安全,這應該不是個問題——面對富鯨哪種協議是不安全的?您可能會說,這些協議沒有考慮到那種情況,僅僅是疏忽了。
不過據稱每小時用不到 20 萬美元的資金就可以讓以太坊本身遭受 51% 攻擊**。這個金額也並不很大!如果以太坊自身的安全模式僅僅能防止資金匱乏的攻擊者,我們何必那麼苛責那些防不住 1000 萬美元攻擊的 DeFi 應用呢?
(**說明一下,我個人並不相信這個數字,這個數字忽略了 ETH 短缺等情況的影響 , 不過它展示了一個思路。)如何減緩閃電攻擊?
假設你是一家衍生品平臺,想避免受到閃電攻擊。自然會問:我是否能檢測出與我交易的用戶是不是在用閃電貸?
簡單的答案是:你做不到。
以太坊的 EVM
短短的一秒鐘,如果有人要用 1000 萬美元敲開你家交易平臺的大門,無法判斷這是他們自己的資金,還是一筆閃電貸。
所以我們要防範閃電攻擊,真正的選擇是什麼?我想到三種方法。
說服閃電貸協議停止提供這種服務
開個玩笑而已。夥計們,這可是加密世界啊!
嚴肅地講,試圖讓貸款池停止提供閃電貸,就像試圖阻止噪聲汙染一樣,
迫使關鍵交易跨越兩個區塊
要記住,閃電貸允許你在單筆交易時間內借入資本。如果一個資本密集型交易需要跨越至少兩個區塊,用戶需要至少在兩個區塊時間段取出貸款,閃電攻擊就成為不可能。(注意:要達到這一效果,兩個區塊之間用戶價值必須鎖定,以防止其償還貸款。如果你沒有正確地設計,則用戶可能會在兩個區塊進行閃電攻擊)
顯然這是以大幅犧牲用戶體驗下進行的:這意味著交易將不再是同步的,很像 commit / reveal 方案。用戶體驗很糟糕,需要謹慎三思。
很多開發者抱怨智能合約異步操作,例如與 Layer 2 或以太坊 2.0 的跨片通信協議的互動。具有諷刺意味的是,異步性使得這些系統更安全,避免遭遇閃電攻擊。因為攻擊者無法在一次自動化交易中同步完成主鏈與 Layer 2 或分片的操作。這意味著
要求提供鏈上證明,證明完成閃電貸後用戶的賬戶餘額未出現變化
如果可以通過某種方法來檢測用戶的實際餘額是多少(即在他們貸款之前和還款之後的餘額分別是多少),我們就可以戰勝閃電攻擊。 在原生 EVM 機制中無法執行此操作,但是可以對其進行修改。你要做的是:在用戶與你的協議進行交互之前,你要求其提供Merkle證明,證明在上一個區塊末尾時他們有足夠的餘額來償還當前使用的資金。你需要針對每個區塊中的每個用戶跟蹤此情況。(感謝康奈爾大學教授 Ari Juels 向我概述了這種方法)這種方法一定程度上是奏效的。當然,它還很粗糙,有一些問題:驗證這些鏈上證據在鏈上的成本極高,思維正常的用戶沒有人願意提供這類證明,併為整個過程支付 gas 費用。另外用戶完全可能有合法合理的理由,在上個區塊想調整其餘額。所以,儘管這種方法理論上有些作用,它不是一種可行的解決方案。 很清楚,我上面所舉的三種解決方案都不夠理想。我相信面對閃電攻擊沒有真正好的解決辦法。但有兩個特別應用確實能減緩閃電攻擊:
我認為 bZx 攻擊事件徹底改變了局面。
這不會是最後一起閃電攻擊事件。第二起 bZx 攻擊只是第一次翻版而已,我懷疑未來幾個月還有一波類似攻擊。現在全球各個角落有數千名聰明的青少年對所有這些 DeFi 樂高虎視眈眈,用顯微鏡尋找任何漏洞,試圖找出發動閃電攻擊的辦法。如果攻陷一個漏洞,他們也會賺到數十萬美元,對全球多數國家和地區而言,這一數字足以改變人生。
對各家 DeFi 協議而言,閃電攻擊意味著安全模式已經改變。在 bZx 黑客事件後如果再遭到類似攻擊,會和 DAO 黑客事件後再遭重入式攻擊一樣,會成為加密世界的笑話。不過你可以預期,這是會出現的。 最後,這些事件讓我去思考加密世界的古老概念:礦工可提取價值(MEV )。MEV 指礦工可以從一個區塊鏈系統中可以提取的總價值,包括出塊獎勵和費用,但也包括其它不那麼正大光明的收益,例如交易重新排序或向塊中插入流氓交易。 從根本上講,應該將所有這些閃電攻擊都視為海量資金內存池(mempool)中的單筆交易。例如,第二次 bZx 攻擊在單筆交易中產生了價值 64.5 萬美元的 ETH 利潤。如果你是礦工,並且打算開始開採新區塊,請想象一下查看先前區塊的交易並對自己說:「這算怎麼回事兒?上一個區塊中包含 64.5 萬美元的利潤,我為什麼要開採一個只換來 500 美元的新區塊?」 更符合你利益的做法不是繼續開採新區塊,而是試圖重寫歷史
模擬展示礦工們的激烈爭奪均衡狀態下,所有閃電攻擊應該最終被礦工提取價值。(注意他們應該也會最終竊取了所有鏈上套利和清算)。諷刺的是,這會成為阻止閃電攻擊的一個重要元素,因為會讓攻擊黑客無法將竊取成果折現。也許最終礦工們會開始私下懸賞攻擊代碼 ,為黑客提供
在今天這還都是科幻。礦工們明顯沒有這麼做。
他們為什麼沒這麼幹?有無數的理由。首先它很難,需要大量工作, EVM 很難模擬,風險很高,存在漏洞可能造成資金流失或孤塊,會招致口誅筆伐,整個礦池會遭遇公關危機,可能被列為「以太坊公敵」。在目前情況下,礦工如果這麼做更有可能帶來更多經濟損失和孤塊,而不是拿到這筆錢。
在目前這是真的,但這種情況不會持續很久。
這給以太坊帶來了一個新的動力去儘快過渡到以太坊 2.0。以太坊上的 DeFi 儘管令人驚歎且令人著迷,但毫無疑問是漏洞百出的。DeFi 在 PoW 鏈上不穩定,因為所有高價值交易都會由礦工重新分配(也被稱為時間匪徒攻擊)。 對於大規模運營的系統,你需要的是不可改變性——礦工不能重寫已確認的區塊。這將會保護之前的區塊不會被重新分配。另外,如果 DeFi 協議存在於單獨的以太坊 2.0 分片上,它們不會在閃電攻擊面前弱不禁風。
依據我的估計 , 閃電攻擊帶給我們很小、但很有用的一個提醒是,這僅僅是個開局。我們還沒有擁有出色的架構來構建未來的金融系統。
目前閃電貸款會是新常態。也許在長遠來看,以太坊上的所有資產都可以被投入閃電貸。交易所所持有的所有抵押物, Uniswap 的抵押物,也許所有 ERC-20 標準代幣。
誰知道呢,不過是幾行代碼的事兒。