全面解讀閃電貸:為什麼閃電攻擊將成為新常態?
編者按:本文來自鏈聞(ID:chainnewscom)編者按:本文來自
鏈聞(ID:chainnewscom)
鏈聞(ID:chainnewscom)
鏈聞(ID:chainnewscom)
鏈聞(ID:chainnewscom)
圖片描述
圖片描述
閃電貸最近成為外界關注的熱點。兩名黑客利用閃電貸攻擊了保證金交易協議bZx,第一起套利金額為35 萬美元,之後又搞了一起套利金額60 萬美元的翻版攻擊。
圖片描述
二級標題
我們不清楚這些攻擊者是誰、身居何處。兩人都是空手套白狼,攻擊完成賺到數十萬美元,且沒有留下任何暴露身份的痕跡。
二級標題
剛爆出這些攻擊消息時,我正在仔細思考閃電貸及DeFi 的安全性問題。我認為這個問題值得公共討論。
簡單說一下我的觀點:我認為閃電貸存在重大安全威脅。但閃電貸不會消失,我們需要認真考慮未來它對DeFi 的安全性影響。
二級標題
什麼是閃電貸?
閃電貸概念最早由Marble 協議於2018 年提出。 Marble 自詡「智能合約銀行」,其產品是很簡單、但很具智慧的DeFi 創新:通過智能化合約完成的零風險貸款。
傳統信貸機構放貸時面臨兩種風險。第一種是違約風險:如果貸款人攜款潛逃,信貸機構會吞下苦果。但第二種是流動性風險:如果一家信貸機構在錯誤的時間放出太多貸款,或者藉款人未及時還款,信貸機構可能意外遭遇流動性緊張,無法履行自己的義務。
閃電貸減緩了這兩種傳統放貸風險。閃電貸的基本工作原理是:在單筆交易中貸出借款人需要的金額。然而在交易結束時,借款人必須償還不少於貸款金額的數目。如果借款人做不到,貸款機構會自動回滾交易。 (是的,智能合約能做到這一點!)
簡單講,閃電貸是自動的:如果借款人不能償還貸款,整個交易就會回滾,就像貸款根本沒發生一樣。
閃電貸則不同。閃電貸利率上沒有風險,也沒有機會成本!因為藉款人在閃電貸過程中「凍結了時間」,所以在其他任何人眼中,該系統的資金從來沒有風險,從來沒有阻塞,因此你也賺不到利息(例如,它沒有任何機會成本) 。
圖片描述
基本上講,閃電貸應該是沒有成本費用的。或者更準確的說,一筆很小的費用,能補償讓一筆資產進入可放貸狀態而添加的三行代碼。
二級標題
二級標題
閃電貸不能收取傳統意義上的利息,因為貸款的持續時間為0,( APR * 0 = 0)。當然,如果任何放貸機構收取更高的利息,將會被利息更低的其他競爭對手碾壓。
二級標題
圖片描述
閃電貸最初的營銷標籤是主要用於套利交易。 Marble 的亮相聲明表示:
圖片描述
「閃電貸可以幫助交易者從Marble 銀行貸款,在一家去中心化交易所DEX 中買幣, 然後在另一家DEX 以較高價格賣出代幣,一筆自動化交易就可以讓您將套利收益收入囊中。」
而現實確實如此—— 從金額上講,我們目前看到的多數閃電貸都被用於此類套利交易。
AAVE 的閃電貸用途,來源:AAVE
但金額還很小。 AAVE 自成立以來發起的閃電貸金額才剛剛超過1 萬美元。與套利交易規模和DeFi 市場流動性相比,不過九牛一毛。
另一方面,從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 黑客攻擊讓我們管中窺豹,我懷疑這僅僅是個開頭而已。
為何閃電貸成為攻擊者的利器?主要有兩個原因。
短期貸款可以最大程度地減少攻擊者的污點。如果我有一個如何以1000 萬美元的ETH 操縱Oracle 幣的想法,即使我擁有那麼多的ETH,我可能也不想用自己的資金來冒險。我的ETH 可能沾染污點,交易所可能會拒絕我的存款,洗錢難度大大增加。有風險!但是,如果我用閃電貸貸出1000 萬美元,誰在乎呢?各方都會有收益。我的貸款來源——dYdX 的抵押池不會被污染, dYdX 的污染某種程度上消失了。
您可能不喜歡,但交易所審查制度如今已成為區塊鏈安全模式的一部分——相當模糊且中心化。但我認為對一個攻擊者而言,閃電貸實質上改變了這種風險。在比特幣白皮書中,中本聰發出了著名的宣言:比特幣不會遭受安全攻擊,因為:
而在閃電貸中,攻擊者與閃電貸遊戲絲毫沒有利益捆綁。閃電貸從本質上改變了攻擊者的風險。
二級標題
當然攻擊者不是僅憑大量金錢就可以對這些協議實施攻擊。如果所有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 向我概述了這種方法)
很清楚,我上面所舉的三種解決方案都不夠理想。我相信面對閃電攻擊沒有真正好的解決辦法。但有兩個特別應用確實能減緩閃電攻擊:市場價預言機和治理代幣。
二級標題
鏈上治理則是則會帶來一連串令人頭疼的問題。鏈上治理通常由治理代幣持幣人按權重投票決定。但如果這種治理代幣進入某一貸款池,任何攻擊者可以偷走大量選票,得到自己想要的結果。
二級標題
當然,多數治理協議要求這些治理代幣在投票期間鎖定,這讓閃電攻擊無計可施。但有些治理協議並非如此,例如「Carbon Vote」和Maker 的行政投票。在閃電攻擊的陰影之下,這些治理機製完全可能被攻陷。
二級標題
這些有什麼深遠意義?
這不會是最後一起閃電攻擊事件。第二起bZx 攻擊只是第一次翻版而已,我懷疑未來幾個月還有一波類似攻擊。現在全球各個角落有數千名聰明的青少年對所有這些DeFi 樂高虎視眈眈,用顯微鏡尋找任何漏洞,試圖找出發動閃電攻擊的辦法。如果攻陷一個漏洞,他們也會賺到數十萬美元,對全球多數國家和地區而言,這一數字足以改變人生。
圖片描述
最後,這些事件讓我去思考加密世界的古老概念:礦工可提取價值(MEV )。 MEV 指礦工可以從一個區塊鏈系統中可以提取的總價值,包括出塊獎勵和費用,但也包括其它不那麼正大光明的收益,例如交易重新排序或向塊中插入流氓交易。
圖片描述
從根本上講,應該將所有這些閃電攻擊都視為海量資金內存池(mempool)中的單筆交易。例如,第二次bZx 攻擊在單筆交易中產生了價值64.5 萬美元的ETH 利潤。如果你是礦工,並且打算開始開採新區塊,請想像一下查看先前區塊的交易並對自己說:「這算怎麼回事兒?上一個區塊中包含64.5 萬美元的利潤,我為什麼要開採一個只換來500 美元的新區塊?」
更符合你利益的做法不是繼續開採新區塊,而是試圖重寫歷史,讓你自己成為那個閃電攻擊者。想一下:這一筆交易就相當於以太坊誠實挖礦四個小時的所得!這與擁有一個包含正常塊獎勵1000 倍的超級塊是同樣的原理——這種超級塊帶來的合理結果是大批礦工瘋狂爭奪,為自己竊取那個超級塊。
圖片描述
模擬展示礦工們的激烈爭奪
均衡狀態下,所有閃電攻擊應該最終被礦工提取價值。 (注意他們應該也會最終竊取了所有鏈上套利和清算)。諷刺的是,這會成為阻止閃電攻擊的一個重要元素,因為會讓攻擊黑客無法將竊取成果折現。也許最終礦工們會開始私下懸賞攻擊代碼,為黑客提供線人費。技術上講,利用零知識認證是可以在無需信任的情況下完成。 (這樣想是不是有點怪?)


