全面解讀閃電貸:為什麼閃電攻擊將成為新常態?

買賣虛擬貨幣

閃電貸最近成為外界關注的熱點。兩名駭客利用閃電貸攻擊了保證金交易協議 bZx,第一起套利金額為 35 萬美元,之後又搞了一起套利金額 60 萬美元的翻版攻擊。

如果用一個詞來形容這些攻擊的話,可以說是「壯觀」。每次攻擊中身無分文的駭客貸到價值數十萬美元的 ETH,分散利用一系列鏈上協議的漏洞進行了一通操作,從所盜竊的資產中提走了數十萬美元,併成功堵上鉅額 ETH 貸款窟窿。所有這一切在瞬間完成,就是說,在一個以太坊區塊中完成。

Carmine Infantino 設計的漫畫封面

我們不清楚這些攻擊者是誰、身居何處。兩人都是空手套白狼,攻擊完成賺到數十萬美元,且沒有留下任何暴露身份的痕跡。

剛爆出這些攻擊訊息時,我正在仔細思考閃電貸及 DeFi 的安全性問題。我認為這個問題值得公共討論。

簡單說一下我的觀點:我認為閃電貸存在重大安全威脅。但閃電貸不會消失,我們需要認真考慮未來它對 DeFi 的安全性影響。

什麼是閃電貸?

閃電貸概念最早由 Marble 協議於 2018 年提出。Marble 自詡「智慧合約銀行」,其產品是很簡單、但很具智慧的 DeFi 創新:透過智慧化合約完成的零風險貸款。

貸款如何能零風險?

傳統信貸機構放貸時面臨兩種風險。第一種是違約風險:如果貸款人攜款潛逃,信貸機構會吞下苦果。但第二種是流動性風險:如果一家信貸機構在錯誤的時間放出太多貸款,或者借款人未及時還款,信貸機構可能意外遭遇流動性緊張,無法履行自己的義務。

閃電貸減緩了這兩種傳統放貸風險。閃電貸的基本工作原理是:在單筆交易中貸出借款人需要的金額。然而在交易結束時,借款人必須償還不少於貸款金額的數目。如果借款人做不到,貸款機構會自動回滾交易。(是的,智慧合約能做到這一點!)

簡單講,閃電貸是自動的:如果借款人不能償還貸款,整個交易就會回滾,就像貸款根本沒發生一樣。

這樣的事情只有在區塊鏈中才能發生。比如你不能在 BitMEX 交易所進行閃電貸。因為智慧合約平臺一次性處理交易,所以一次交易的所有元素是批處理執行的。交易執行時,可以把這個想成交易的「凍結時間」。而在中心化交易所中可能會出現激烈的競爭,可能導致你的交易部分失敗;在區塊鏈中,可以保障你的所有程式碼一行行逐次執行。

所以簡單考慮一下這裡面的經濟機制。傳統信貸機構因為兩個元素而賺到回報:他們承擔的風險(違約和流動性吃緊),以及他們所貸出資金的機會成本(例如,如果這筆錢原本可以讓貸款機構得到 2% 的存款利息,所以借款人必須支付比無風險回報率 2% 更高的利率)。

閃電貸則不同。閃電貸利率上沒有風險,也沒有機會成本!因為借款人在閃電貸過程中「凍結了時間」,所以在其他任何人眼中,該系統的資金從來沒有風險,從來沒有阻塞,因此你也賺不到利息(例如,它沒有任何機會成本)。

這意味著,成為閃電貸出借方感覺上不需要任何成本。這嚴重違反了直覺。所以均衡狀態下閃電貸的成本應該是多少?

基本上講,閃電貸應該是沒有成本費用的。或者更準確的說,一筆很小的費用,能補償讓一筆資產進入可放貸狀態而新增的三行程式碼。

來自 0x 研發人員 Remco Bloemen

閃電貸不能收取傳統意義上的利息,因為貸款的持續時間為 0.( APR * 0 = 0)。當然,如果任何放貸機構收取更高的利息,將會被利息更低的其他競爭對手碾壓。

閃電貸讓資金成為真正的商品。這種競爭到頭來不可避免的將成本壓低到 0 或者金額極小。dYdX 目前閃電貸手續費為 0.而 AAVE 收取本金的 0.09% 作為利息。我估計這種情況不會持續下去,實際上 AAVE  社羣已經開始呼籲 0 利息。(請注意,我們前文提及的兩次駭客攻擊都沒有選擇從 AAVE 獲得閃電貸)

閃電貸有什麼用?

閃電貸最初的營銷標籤是主要用於套利交易。Marble 的亮相宣告表示:

「閃電貸可以幫助交易者從 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 換取更高的利率,通常我需要回購 40 DAI 才能關閉 CDP,這需要一些前期資金。相反我可以利用閃電貸借入 40 個 DAI 來關閉 CDP,將 60 美元的未鎖定 ETH 存入 Compound,透過 Uniswap 將其餘的 40 美元 ETH 轉換回 DAI,並用來償還閃電貸。一氣呵成,自動化 0 成本再融資。

這太神奇了!這就是資本樂高執行的偉大範例。1x.ag 實際上搭建了一個保證金交易聚合應用,利用閃電貸自動實現這類交易。

儘管這些很酷,但 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 或分片的操作。這意味著 ETH 2.0 分片或 Layer 2 DEX 不會遭遇閃電攻擊。

要求提供鏈上證明,證明完成閃電貸後使用者的賬戶餘額未出現變化

如果可以透過某種方法來檢測使用者的實際餘額是多少(即在他們貸款之前和還款之後的餘額分別是多少),我們就可以戰勝閃電攻擊。

在原生 EVM 機制中無法執行此操作,但是可以對其進行修改。你要做的是:在使用者與你的協議進行互動之前,你要求其提供 Merkle 證明,證明在上一個區塊末尾時他們有足夠的餘額來償還當前使用的資金。你需要針對每個區塊中的每個使用者跟蹤此情況。(感謝康奈爾大學教授 Ari Juels 向我概述了這種方法)

這種方法一定程度上是奏效的。當然,它還很粗糙,有一些問題:驗證這些鏈上證據在鏈上的成本極高,思維正常的使用者沒有人願意提供這類證明,併為整個過程支付 gas 費用。另外使用者完全可能有合法合理的理由,在上個區塊想調整其餘額。所以,儘管這種方法理論上有些作用,它不是一種可行的解決方案。

很清楚,我上面所舉的三種解決方案都不夠理想。我相信面對閃電攻擊沒有真正好的解決辦法。但有兩個特別應用確實能減緩閃電攻擊:市場價預言機和治理代幣。

像 Uniswap 或 OasisDEX 等市場價預言機 , 由於閃電攻擊的可能性,你任何情況下不能把當前市價中位數當成喂價。攻擊者只需要一筆交易就能輕而易舉地大幅改變市價中位數,讓預言機失靈。對此最好的解決方案是透過時間加權平均價格(TWAP)或成交量加權平均價格(VWAP)計算上一批 X 區塊的加權平均數。Uniswap v2 會自帶這一功能;經濟學家 Max Wolff 的著作 《Polaris》為其它協議提供了一種通用方法。

鏈上治理則是則會帶來一連串令人頭疼的問題。鏈上治理通常由治理代幣持幣人按權重投票決定。但如果這種治理代幣進入某一貸款池,任何攻擊者可以偷走大量選票,得到自己想要的結果。

當然,多數治理協議要求這些治理代幣在投票期間鎖定,這讓閃電攻擊無計可施。但有些治理協議並非如此,例如「Carbon Vote」和 Maker 的行政投票。在閃電攻擊的陰影之下,這些治理機制完全可能被攻陷。

理想情況下,你不想讓治理代幣進入閃電貸款池。但這並非由發幣者決定,它是由市場決定的。因此,所有治理行動應該要求代幣鎖定期,以阻止閃電襲擊。更關鍵的是,所有治理代幣必須有時間鎖(timelocks)。時間鎖迫使所有的執行決策在生效前都有一段等候期。(例如 Compound 的時間鎖是 2 天 )。如果遭遇意料之外的治理攻擊,這一機制讓系統有了容錯時間。甚至儘管 MKR 目前大量未進入閃電貸資金池,近期已經有人稱 MakerDAO 很容易遭遇此類攻擊。MakerDAO 當前正加快修復。

這些有什麼深遠意義?

我認為 bZx 攻擊事件徹底改變了局面。

這不會是最後一起閃電攻擊事件。第二起 bZx 攻擊只是第一次翻版而已,我懷疑未來幾個月還有一波類似攻擊。現在全球各個角落有數千名聰明的青少年對所有這些 DeFi  樂高虎視眈眈,用顯微鏡尋找任何漏洞,試圖找出發動閃電攻擊的辦法。如果攻陷一個漏洞,他們也會賺到數十萬美元,對全球多數國家和地區而言,這一數字足以改變人生。

對各家 DeFi 協議而言,閃電攻擊意味著安全模式已經改變。在 bZx 駭客事件後如果再遭到類似攻擊,會和 DAO 駭客事件後再遭重入式攻擊一樣,會成為加密世界的笑話。不過你可以預期,這是會出現的。

最後,這些事件讓我去思考加密世界的古老概念:礦工可提取價值(MEV )。MEV 指礦工可以從一個區塊鏈系統中可以提取的總價值,包括出塊獎勵和費用,但也包括其它不那麼正大光明的收益,例如交易重新排序或向塊中插入流氓交易。

從根本上講,應該將所有這些閃電攻擊都視為海量資金記憶體池(mempool)中的單筆交易。例如,第二次 bZx 攻擊在單筆交易中產生了價值 64.5 萬美元的 ETH 利潤。如果你是礦工,並且打算開始開採新區塊,請想象一下檢視先前區塊的交易並對自己說:「這算怎麼回事兒?上一個區塊中包含 64.5 萬美元的利潤,我為什麼要開採一個只換來 500 美元的新區塊?」

更符合你利益的做法不是繼續開採新區塊,而是試圖重寫歷史,讓你自己成為那個閃電攻擊者。想一下:這一筆交易就相當於以太坊誠實挖礦四個小時的所得!這與擁有一個包含正常塊獎勵 1000 倍的超級塊是同樣的原理——這種超級塊帶來的合理結果是大批礦工瘋狂爭奪,為自己竊取那個超級塊。

模擬展示礦工們的激烈爭奪

均衡狀態下,所有閃電攻擊應該最終被礦工提取價值。(注意他們應該也會最終竊取了所有鏈上套利和清算)。諷刺的是,這會成為阻止閃電攻擊的一個重要元素,因為會讓攻擊駭客無法將竊取成果折現。也許最終礦工們會開始私下懸賞攻擊程式碼 ,為駭客提供線人費。技術上講,利用零知識認證是可以在無需信任的情況下完成。(這樣想是不是有點怪?)

在今天這還都是科幻。礦工們明顯沒有這麼做。

他們為什麼沒這麼幹?有無數的理由。首先它很難,需要大量工作, EVM 很難模擬,風險很高,存在漏洞可能造成資金流失或孤塊,會招致口誅筆伐,整個礦池會遭遇公關危機,可能被列為「以太坊公敵」。在目前情況下,礦工如果這麼做更有可能帶來更多經濟損失和孤塊,而不是拿到這筆錢。

在目前這是真的,但這種情況不會持續很久。

這給以太坊帶來了一個新的動力去儘快過渡到以太坊 2.0.以太坊上的 DeFi 儘管令人驚歎且令人著迷,但毫無疑問是漏洞百出的。DeFi 在 PoW 鏈上不穩定,因為所有高價值交易都會由礦工重新分配(也被稱為時間匪徒攻擊)。

對於大規模運營的系統,你需要的是不可改變性——礦工不能重寫已確認的區塊。這將會保護之前的區塊不會被重新分配。另外,如果 DeFi 協議存在於單獨的以太坊 2.0 分片上,它們不會在閃電攻擊面前弱不禁風。

依據我的估計 , 閃電攻擊帶給我們很小、但很有用的一個提醒是,這僅僅是個開局。我們還沒有擁有出色的架構來構建未來的金融系統。

目前閃電貸款會是新常態。也許在長遠來看,以太坊上的所有資產都可以被投入閃電貸。交易所所持有的所有抵押物, Uniswap 的抵押物,也許所有 ERC-20 標準代幣。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;