DeFi 連續被黑— Uniswap 與Lendf.Me 的骨牌效應

DeFi 連續被黑— Uniswap 與Lendf.Me 的骨牌效應

上週末兩項DeFi圈內小有名氣的應用—— Uniswap去中心化交易所 和 Lendf.Me借貸平臺 ——接連遭到駭客入侵,分別被盜走價值約30萬美元及2500萬美元的多種加密貨幣。

Uniswap是兌幣的應用,讓人們在加密貨幣錢包裡就能直接以ETH換DAI,不用另外到交易所註冊帳號。Lendf.Me功能則像是 Compound 借貸平臺,讓人們可以存幣生息,但Lendf.Me還額外加上一些創新。當我看到Uniswap和Lendf.Me雙雙被駭,第一反應是:跑。

雖然我沒有使用這兩款應用,但DeFi應用被黑就像是地震一樣。當你看到隔壁的大樓(Uniswap和Lendf.Me)被震倒了,難保自己待的大樓(Compound)不會受損。所以我馬上把存放在Compound賺利息的錢全部領出來,靜觀其變。直到專業資安團隊查明原因並確定Compound不受影響,我才又把錢存回去賺利息。

這種危機時刻,Compound 的放貸利率會特別高。放貸的人都怕本金有去無回,一有狀況就會馬上把銀根抽走。相較之下,從Compound 借錢的人比較不怕。他們雖然有抵押物放在Compound 裡,但手上也有從Compound 借出來的幣。即便Compound 倒了,也不至於血本無歸。借貸市場供需失衡 —— 放貸的人(供給方)大幅減少,借錢的人(需求方)大致不變 —— 資金供不應求,推升了Compound 的放貸利率。

利率高也代表風險高,得有一點心理準備才行。但事後大家都在問,Uniswap 和Lendf.Me 為什麼會接連被駭?

相容的積木,不相容

事後多家資安專業機構主動加入調查,一致認定兩起被駭事件都與ERC-777這種積木(代幣)規格有關,這是一種非常小眾的新款積木。

目前金融樂高(DeFi)世界裡,幾乎所有人都是採用ERC-20這種積木規格,並據此開發新應用。但在2018年有人仿造ERC-20積木,開發出新款的 ERC-777 積木,主打與ERC-20積木相容(backward compatible),而且安全性還有所改進。理論上,人們可以直接混用新舊兩種積木來打造新應用。可惜,事與願違。

事後查明發現,遭到駭客入侵的Uniswap 和Lendf.Me 的代碼都沒有漏洞。問題是出在號稱與ERC-20「相容」的ERC-777 積木,根本不能直接拿來當成ERC-20 積木使用。而Uniswap 和Lendf.Me 這兩項應用當初都是專為ERC-20 積木設計,事後有人拿ERC-777 積木直接當成ERC-20 積木使用時,開發團隊也沒有仔細檢查ERC-777 積木是否與自身應用完全相容。這就讓駭客找到機會趁虛而入。

駭客透過ERC-777 和應用的接合漏洞,把存放在應用裡的加密貨幣盜領一空。可以說這是ERC-777 規格制定者號稱與ERC-20「相容」誤導了大家,也可以說Uniswap 和Lendf.Me 在引入ERC-777 時缺乏審慎的安全評估與配套措施,才導致這場災難。

雖然Uniswap 和Lendf.Me 可說是難兄難弟,但DeFi 社群對兩者的評價卻不太相同 —— 同情Uniswap,譴責Lendf.Me。為什麼?

反應慢半拍

Uniswap 被駭在先,之後輪到Lendf.Me,兩者相隔約24 小時。雖然能反應的時間相當有限,但金融市場本來就是分秒必爭。Uniswap 是去中心化交易所,上面有數百種交易對,但它們當時被駭的只有ETH / imBTC 這個交易對。

依據這條線索,專業的資安人員馬上會從以下3 個問題點下手追查:

  1. ETH
  2. Uniswap 應用
  3. imBTC(ERC-777 規格的代幣)

我不是專業的資安人員,無從得知當時情況,只能從事後諸葛的角度討論。

若是以太幣出問題,應該不會只有Uniswap被駭(是沒有還是還沒?),若是Uniswap應用出問題應該不只有ETH / imBTC這個交易對被駭(為什麼不選其它?)。按照邏輯推論,大概可以猜測imBTC出問題的機率比較高,只是不知道問題在哪。

事件發生當下市場一片混亂。有些DeFi 應用立即暫停ERC-777 代幣交易,但有些則還在觀望 —— 同樣也有上架imBTC 代幣的Lendf.Me 就沒有立即採取行動。24 小時後,駭客大搖大擺地盜領走價值7.5 億臺幣的多種加密貨幣,Lendf.Me 才驚覺事態嚴重。

空難發生的第一時間,各國政府會立即要求航空公司暫時停飛該型號飛機,以避免悲劇重演。只不過DeFi市場缺乏強制力,只能靠應用開發商的「自知之明」。但開發商沒有采取任何行動也不難理解。畢竟暫停服務會造成使用者不便,甚至會被質疑技術能力有問題。若每次都是虛驚一場,幾次之後用戶也會想「跳槽」。

該如何拿捏確實不容易。而這次Lendf.Me 就是因為反應太慢,導致用戶的資產被提領一空,代價高昂。絕大多數人都是事件旁觀者,如果換成當事人視角,想的事情可能會很不一樣。

損失誰來賠?

Uniswap 和Lendf.Me 都是區塊鏈上的智能合約,雖然背後開發商不同,但智能合約裡面保管的都是用戶的血汗錢。前者損失的規模比較小「只有」660 萬臺幣,但後者卻狂噴了價值7.5 億臺幣的多種加密貨幣,受害者肯定為數不少。

這就遇到經典的DeFi 世界問題,萬一資金被駭,誰來賠償用戶損失?

得先看賠不賠得起,接著才看負不負責任。像Uniswap在DeFi圈的聲譽不錯,即便幕後的開發團隊沒錢賠償,若是發起募捐活動(Gitcoin Grant!),大概也可以很快湊滿660萬賠給用戶。相對之下,Lendf.Me的損失金額恐怕是有心負責也賠不起,於是有受害者決定自發「寫信」給駭客求情:

區塊鏈上的每筆交易紀錄都是公開透明,駭客入侵的足跡、資金流向當然也是一清二楚。受害者發送小額交易「送錢」到駭客的地址,並透過交易的備註欄位上留言:

疫情肆虐全球,生活不容易。我放在Lendf.Me 的那些錢,都是從銀行借來的。如果這些錢弄丟了,我恐怕會妻離子散。求求你把錢還給我們,God bless you!

溫情喊話之外,網友和警方也循著網路足跡陸續找到駭客的IP地址(來自中國)、電腦型號、螢幕解析度,以及系統使用語言資訊。隨著犯罪線索越來越多,大家意識到偷走錢的那個人可能是位技術很強的工程師,但大概不是一位經驗老練的駭客——犯案手法太不俐落了。沒過多久,Lendf.Me的開發團隊發出公告,指出已與駭客取得聯繫並協議退款。

直到我寫文章當下,Lendf.Me已經從駭客手上取回絕大部分資金,並且將逐步歸還給用戶。幸好最終沒人妻離子散,但這次連續被駭事件,也讓人們開始反思「金融樂高」的系統性風險。

阿波羅13 號

有位作者以美國在1970年的阿波羅登月計劃來比喻此次事件,我認為相當貼切:

1970 年4 月13 日... 位於美國休士頓的地面控制中心向已經進入太空的飛船傳遞了打開風扇、攪動低溫氧氣箱的指令。於是,阿波羅13 號的太空人隨後打開了低溫氧氣箱風扇。但只過了2.7 秒,飛船就發生爆炸。阿波羅13 號上的三名太空人當時就傻了。

太空人斯威格特馬上向地面指揮中心報告,並說出了那句被無數人借用的著名臺詞:休士頓,我們有麻煩了。(Huston,we have a problem.)

NASA 事後調查發現,阿波羅13 號發射前,操作艙進行過多項改進,其中之一是將氧氣箱中的加熱器電壓由28V 提高到65V,但加熱器上的熱穩定開關卻沒跟著修改,電壓仍然是原本的28V。啟動之後,熱穩定開關因為電壓不同就融化了。接著,悲劇就發生了。

所幸,最終三位太空人都平安返回地球。

「金融樂高」和太空梭一樣,所有裝置都是一環扣一環。若對一項零件升級,卻沒有重新檢視其他關聯的零件是否應該調整,就容易發生悲劇。套用在這次事件,即便ERC-777 號稱相容於ERC-20 恐怕有誤導之嫌,但也可以說Uniswap 和Lendf.Me 如果在引入ERC-777 代幣規格之前,就仔細評估相容性的風險,也許就可以免於被駭。

開發團隊大概也有自己的苦衷 —— 自己的東西就顧不好了,哪有時間顧別人的。我認為這起被駭事件不是偶然,只是時間早晚。事件反映了當前DeFi 領域開發文化所衍生的問題。若開發者們沒有從中找到應對方法,只是把矛頭指向風暴中心ERC-777、Uniswap 或Lendf.Me,這大概不會是「金融樂高」的最後一次骨牌效應。

雪崩的時候,沒有任何一片雪花會自認該為雪崩負責。— 斯坦尼斯洛

No snowflake in an avalanche ever feels responsible. — Stanislaw Jerzy Lec

但也可以反過來改編尼采的話,那些殺不死DeFi的,將使DeFi成長。


分享到:


相關文章: