從 Lendf.Me 駭客事件我們看到了什麼?

買賣虛擬貨幣

不談價值觀,只總結我們看到的事實;對於前行者和後來人,切望防微杜漸。

撰文:LeftOfCenter

作者特別感謝慢霧科技創始人餘弦對本文的幫助。

對於 DeFi 投資者來說,這是一個不平靜的週末。知名的 DeFi 貸款協議 Lendf.Me 平臺上價值近 2500 萬美元的資產被駭客洗劫一空,不過是個把小時的事情。

大約是在北京時間 4 月 19 日週日早上 9 點多,DeBank 的徐勇在微信群中截圖提示, Lendf.Me 平臺上的資金利用率顯示異常。當時, 該平臺上幾乎所有可藉資產都出現極高的借出率,多個資產的利用率已經高達 99%,imBTC 的資金利用率則為 100%。DeFi Pulse 的資料也顯示,Lendf.Me 平臺鎖倉資產迅速跌落。

很快,Tokenlon 釋出公告宣佈暫停 imBTC 交易。

Lendf.Me 團隊隨後證實,北京時間 8 點 45 分,在區塊高度 9899681 遭受駭客攻擊。該團隊表示,已經關停網站並展開調查,技術團隊已經定位問題,並在網頁端建議所有使用者停止往借貸協議存入資產。

至此,駭客已將 Lendf.Me 平臺上的使用者儲存資產全部掏空。鏈上資料顯示,被攻擊後,Lendf 鎖倉資產美元價值瞬間下跌 100% 至 6 美元,而此前的鎖倉總價值超過 2490 萬美元。鏈上觀測發現,攻擊者不斷透過 1inch.exchange、ParaSwap、Tokenlon 等 DEX 平臺將盜取的資產兌換成 ETH 及其他代幣。

據區塊鏈安全公司慢霧科技當時釋出的統計,Lendf.Me 被攻擊累計的損失約 24,696,616 美元,具體盜取的幣種及數額為:

  • WETH: 55159.02134,

  • WBTC: 9.01152,

  • CHAI: 77930.93433,

  • HBTC: 320.27714,

  • HUSD: 432162.90569,

  • BUSD: 480787.88767,

  • PAX: 587014.60367,

  • TUSD: 459794.38763,

  • USDC: 698916.40348,

  • USDT: 7180525.08156,

  • USDx: 510868.16067,

  • imBTC: 291.3471

此時,我們很容易聯想到前不久發生閃貸攻擊的 bzx,那一次攻擊也是發生在 1 月的某個週六,先後兩次攻擊共盜走了 90 萬美金。當時,很多 DeFi 愛好者突然意識到,蒸蒸日上的 DeFi 並不是想象中的那麼安全。

到了週日晚間,事情又發生了一些戲劇化變化,駭客開始向 Lendf.Me 返還部分資產。

鏈上資訊顯示,攻擊者向 Lendf.Me 平臺 admin 賬戶陸續轉回 12.6 萬枚 PAX、 38 萬枚 HUSD 和 320 枚 HBTC,並附言 「Better future」。這些資產屬於合規的中心化資產,對於駭客來說,無法兌現,竟然退還了。

這一動作也在稍後團隊釋出的官方宣告中得到了證實。 Lendf.Me 平臺的發起方 dForce 的創始人楊民道在之後發表的一篇文章中稱,「駭客試圖與我們聯絡,而我們也打算與他們進行討論」。Lendf.Me 平臺的 admin 賬戶透過 memo 對攻擊者進行了迴應。楊民道稱,正與交易所和執法機構合作追查駭客,全力搶救被盜資金。

與此同時,Lendf.Me 平臺的多位受害者紛紛透過轉賬向駭客留言,求對方返還自己的血汗錢。至此,此次駭客盜竊已演變成一次大型群體事件。

團隊同時還公佈了後續解決該事件的幾個措施,包括:1. 聯絡了頂級安全公司,對 Lendf.Me 進行更全面的安全性評估;2. 與合作伙伴一起制訂解決方案,對系統進行資本重組,「雖然我們遭遇了攻擊,但不會就此被打倒」;3. 正在與主流交易所、場外交易商和執法機構合作,調查該情況,扣留被盜資金並追查駭客。

截止目前,調查及被盜資金截斷工作正在進行。

還原攻擊過程

目前已知的情況是,攻擊者利用了 imBTC 採用的 ERC-777 標準的一個「漏洞」,執行「重入攻擊」(reentrancy attack ),導致市值約 2500 萬美金的資產從 Lendf.Me合約裡被取出。

慢霧對此次攻擊事件的細節進行了詳細還原:對 Lendf.Me 實施攻擊的攻擊者地址為 0xa9bf70a420d364e923c74448d9d817d3f2a77822,此次攻擊者透過部署合約 0x538359785a8d5ab1a741a0ba94f26a800759d91d 實現。

透過檢視 Etherscan 上其中一筆交易(https://etherscan.io/tx/0xae7d664bdfcc54220df4f18d339005c6faf6e62c9ca79c56387bc0389274363b)發現:

攻擊者首先是存入了 0.00021593 枚 imBTC,但是卻從 Lendf.Me 中成功提現了 0.00043188 枚 imBTC,也就是說,提現的數量幾乎是存入數量的翻倍。

那麼攻擊者是如何從短短的一筆交易中拿到翻倍的餘額的呢?接下來,慢霧對一筆交易中的每一個動作進行了深入分析:

攻擊者對 Lendf.Me 進行了兩次 supply() 函式的呼叫,但是這兩次呼叫都是獨立的,並不是在前一筆 supply() 函式中再次呼叫 supply() 函式;

緊接著,在第二次 supply() 函式的呼叫過程中,攻擊者在他自己的合約中對 Lendf.Me 的 withdraw() 函式發起呼叫,最終提現;

攻擊者的 withdraw() 呼叫是發生在 transferFrom 函式中,也就是在 Lendf.Me 透過 transferFrom 呼叫使用者的 tokensToSend() 鉤子函式的時候呼叫的。很明顯,攻擊者透過 supply() 函式重入了 Lendf.Me 合約,造成了重入攻擊。

如果說以上的技術細節對於小白來說不那麼容易理解,那麼,可以透過以下這個類比來通俗地理解何為重入攻擊:

假設甲是現實生活中的一名詐騙犯,他來到銀行櫃檯前對櫃員乙表示需要取出自己賬戶裡的所有錢。

櫃員乙查詢了甲的賬戶金額,將金額記賬到了「待取款的臨時賬戶」裡。不過,還沒等櫃員乙從「待取款的臨時賬戶」裡把錢取出來並更新甲的賬戶金額及重置甲的「待取款的臨時賬戶」,甲已經不見蹤影;

甲以光速來到了另一個分行,向該分行的櫃員丙表示需要取錢,櫃員丙又執行了一遍之前櫃員乙的操作:查詢了甲的賬戶金額,將金額再次記賬到了「待取款的臨時賬戶」裡,從「待取款的臨時賬戶」裡把錢取出來並更新甲的賬戶金額及重置甲的「待取款的臨時賬戶」;

最終這導致甲取了自己金額兩倍的錢,如此往復,直到將該銀行的所有資金掏空為止。

在Lendf.Me 駭客事件中,甲對應的是駭客,而銀行則是Lendf.Me。

禍從何處來?

這是 DeFi 領域中一次標誌性的駭客事件,引發了業內廣泛討論,範圍不僅僅侷限於被黑金額和專案本身,更是涉及了安全的重要性、開放金融的意義、社羣的包容性乃至中西區塊鏈社羣的誤解和偏見。

首先,2500 萬美金是一筆數目不小的損失,它可能是平臺上普通使用者的所有積蓄。對於這些 DeFi 領域的早期探索者而言,對中心化平臺持懷疑態度讓他們投向了開放金融的懷抱,這次這個沉重的代價無疑是一記重拳,打擊了他們對 DeFi 的信心。

而對於專案方來說,這有可能意味著重頭再來。Lendf.Me 作為 DeFi 領頭羊之一,是從中國發起的明星區塊鏈專案和冉冉升起的潛力之星,2019 年 9 月啟動到目前僅半年時間,在開放金融借貸市場佔有一席之地,並已發展成為最大的法幣穩定幣借貸協議。在被攻擊事件發生之前,其資產規模接近 3000 萬美元,並有近 1000 萬美元的未償還貸款。就在幾天前,Lendf.Me 才獲得來自 Multicoin Capital 、火幣資本和招銀國際的 150 萬美金戰略投資。

dForce 的創始人楊民道在宣告中也表示,其個人也在本次駭客攻擊中遭到了嚴重的經濟損失。

更糟糕的是,除了直接受害者,此次事件帶來的間接傷害可能更大。今年 2 月,DeFi 才剛剛迎來里程碑事件(鎖定資產突破 10 億美金),同時作為以太坊重要的真實用例,這可能會對以太坊甚至整個公鏈的失去信心。

針對此次攻擊,有社羣成員認為,平臺方具有不可推卸的責任。Lendf.Me 本身作為運營方,對介面端的合約安全性稽覈不足,導致事故發生。對此,團隊表示,已經聯絡了頂級安全公司,對 Lendf.Me 進行更全面的安全性評估,預計團隊後續會在這個方面有所加強。

也有另一種聲音則認為, imBTC 的資產發行方 Tokenlon 負有一定責任,在前一晚 Uniswap 發生事故關停imBTC 的合約轉賬後,又重新開通了 imBTC 的合約轉賬功能,給了駭客可乘之機。

不過,Tokenlon 透露的資訊則表示,在 4 月 18 日 17:00 重啟imBTC 的轉賬功能之前,曾經與 Lendf.Me 及其他 imBTC 合作平臺溝通,並得到 Lendf.Me 及其他合作平臺確認安全風險評估沒問題後,才重啟轉賬功能的。

imBTC 是與 BTC 1:1 錨定的 ERC-777 代幣(相容 ERC-20 ),由 Tokenlon 負責發行和監管,imBTC 採用 ERC-777 代幣標準規範。

出於安全上的考慮,很多投資者紛紛開始清查哪些平臺涉及 ERC-777 標準的代幣,一時之間對 ERC-777 標準聞之色變。

也有人為協議標準喊冤,認為協議本身沒問題,只是開發者在使用時沒有考慮到其中存在的相容性問題。

比如,有開發者認為,ERC20 之於 ERC777,就如同比特幣之於以太坊,ERC20 雖然更加安全,但功能具有侷限性。

誕生於 2015 年的 ERC20 標準,功能非常簡單,因此也很受歡迎。但對於一個試圖建立「可程式設計貨幣」的系統來說,ERC 20 代幣標準的功能非常有限,其侷限性導致了以太坊的許多使用者體驗問題。

ERC 777 標準可以看作是 ERC 20 標準的升級版,作為一種新的代幣標準,它向後相容 ERC20,並增加了一些新的功能,這些功能包括資料欄位、運算子,配合合約錢包還可拒絕不想要的代幣等功能。

但 ERC 777 可解決的最大問題是,透過新增「鉤子」,提供以太坊代幣之外的代幣支付功能,這可實現在 Uniswap 中將 Dai 轉換為 ETH 的交易只需一步即可完成。

對於不熟悉 ERC20 代幣標準的同學,這裡可以做個簡單科普:由於 ERC20 代幣標準沒有「支付功能」,在進行代幣交易時需要進行多筆交易,比如如果使用 Uniswap 將 ETH 轉換為 Dai,基本上傳送 ETH 即可獲得 Dai,但如果是相反,將 Dai 轉換為 ETH,則需要先進行一筆交易對 Dai 進行批准,之後才可以置換成 ETH。

這個問題的原因在於,ERC20 標準沒有「支付功能」,這讓合約在收到 ETH 時可以執行程式碼,但是在收到 ETH 之外的其他代幣時則無法執行程式碼。而 ERC 777 透過新增「鉤子」解決了這個問題,讓 Dai 轉換為 ETH 的交易一步即可完成。

但 ERC777 標準最大的問題是,呼叫「鉤子」函式會導致安全問題。最近 imBTC/Uniswap 發生的兩起安全事故就是駭客利用了 ERC777 標準導致的重入攻擊,讓攻擊者可提現餘額變多,直到掏空平臺所有資產。

不過,重入攻擊並不是什麼新鮮事物。2017 年那起導致以太坊分家的「The DAO 事件」就是由可重入攻擊引起的。對於開發者而言,新鮮事物可能是,重入攻擊也會對 ETH 之外的代幣產生影響,而此前,開發者瞭解的可能是:ETH 轉移很容易受到重入攻擊,但其他代幣轉移則是安全的。

此次事件更引發了對 DeFi 整個生態系統的反思。

被成為貨幣樂高的 DeFi 具有可組合和互操作性的特點,這給我們帶來了無數的可能性。但硬幣的另一面也是的 DeFi 的最大問題:作為一個複雜系統,DeFi 的風險也會被無限放大,系統的安全性取決於最短的那塊木板,樂高積木中只要有一個模組出了問題,整個系統就會被拖垮。這就是經典的木桶原理。

為此,安全團隊慢霧給出的防禦性建議之一是:「在對多個合約進行對接的時候需要對多方合約進行程式碼安全和業務安全的把關,全面考慮各種業務場景相結合下的安全問題。」

再反思

那些出於對安全隱患的擔憂,從中心化平臺轉向 DeFi 的早期探索者們,赫然發現,去中心化上的安全問題似乎更大。

尤其在近一年以來, DeFi 領域已經頻頻發生多起事故。

2019 年 6 月,Synthetix 受到預言機攻擊,損失超過 3700 萬 sETH 合成代幣。

今年 1 月,bZx 先後遭到兩次攻擊,損失達 90 萬美金;

今年 3 月,新晉 DeFi 明星專案 iearn.finance 提供的 Zap 智慧合約因未檢查滑點導致穩定幣交易平臺 Curve 出現一筆異常交易,後透過人為干預使得損失者幾乎未遭受損失,但其創始人 Andre Cronje 稱無法承受社交壓力,將讓該專案自運營。

3 月 12 日發生的黑天鵝事件導致部分清算人以價格為 0 的出價贏得以太坊抵押品清算程式的拍賣,導致 MakerDAO 出現近500 萬美元抵押不足的未償債務,導致多名抵押者在市場拋售期間損失了所有抵押品。

Lendf.Me 駭客事件發生的前一天,駭客利用 Uniswap 的 ERC777 相容性問題,盜走價值超 30 萬美元的 imBTC。

顯然,Lendf.Me 發生的這起事故不是第一起,也不會是最後一起。

此次駭客事件為整個行業敲響警鐘,倒逼各個專案開始審查自己專案的安全的漏洞。

Lendf.Me 事件發生後的一天,利用聯合曲線進行做市的去中心化穩定幣交易平臺 Curve 公佈自己的 sUSD 資金池合約存在漏洞,稱「所有的漏洞已經解決,資金安全,無損失發生」。Curve 請使用者提回資金,並等候新合約部署,新合約的改變將進行審計。

到目前為止,已有相容 ERC-777 標準的平臺開始採取行動。以太坊「無損彩票」平臺 PoolTogether 宣佈已移除 ERC-777 標準的代幣 plDai,之前這是為第三方的開發人員提供的小型資金池,僅涉及約 480 個 plDai。不過慢霧創始人餘弦則表示,「拿掉 plDai 也不是徹底解決方案,他們自己的程式碼也往 ERC-777 去相容實現,所以自己的程式碼還得加強。」

另一支區塊鏈安全團隊PeckShield 則提出了一個有效的解決方案,建議開發者採用 「Checks-Effects-Interactions」方法來防止這類重入攻擊。舉個例子,Lendf.Me 的 supply() 裡如果是先更新 token 餘額,再呼叫 doTransferIn() 。這將會讓攻擊在 withdraw() 之後沒有重置餘額的可能性。

這是一次極好的總結和反思機會,讓專案和使用者本身開始審視安全的重要性。長遠來說,這有利於整個行業的發展。

對於專案方來說,未來最重要的是防微杜漸,以「如何最大限度保障平臺資金的安全」/為此,慢霧提出了一系列防禦建議:

在關鍵的業務操作方法中加入鎖機制,如:OpenZeppelin 的 ReentrancyGuard;

開發合約的時候採用先更改本合約的變數,再進行外部呼叫的編寫風格

專案上線前請優秀的第三方安全團隊進行全面的安全審計,儘可能的發現潛在的安全問題

多個合約進行對接的時候也需要對多方合約進行程式碼安全和業務安全的把關,全面考慮各種業務場景相結合下的安全問題

合約儘可能的設定暫停開關,在出現「黑天鵝」事件的時候能夠及時發現並止損

安全是動態的,各個專案方也需要及時捕獲可能與自身專案相關的威脅情報,及時排查潛在的安全風險

防微杜漸還意味著,一旦真的發生安全問題該如何補救。回答這個問題十分重要,因為它給使用者加入並繼續留存在 DeFi 帶來信心。

使用者層面上,每一次攻擊事件都會讓使用者對 DeFi 的信心減少數分,如果沒有預先的應對措施,使用者就會對 DeFi 失去信心。而對於 DeFi 來說,信心很重要,沒有信心,DeFi 就沒有未來。

體量巨大的中心化交易所尚有補救措施,出現資產丟失的情況下,一般都會由資金雄厚的中心化機構賠償使用者的損失,並設定有保險池。去中心化金融的補救措施該如何進行呢?去中心化保險還是聯合兜底?在沒有中心化機構背書的情況下,本質上是尋求一種公地治理的有效機制。

和其他行業不同,DeFi 作為一個開放、無需允許的公共金融領域,具有牽一髮動全身的整體性,一個專案的損失,也不再是專案本身的損失,它會消弱其他 DeFi 參與者的信心。作為公鏈目前唯一有用的敘事,這樣的悲劇事件,甚至可能會影響競品甚至整個行業發展。

這個時候因為競爭關係出現的攻訐、挑釁、甚至民族主義言論則更顯得諷刺。事發之後,無論中國 DeFi 社羣還是 Lendf.Me 本身的社羣成員,都給了 Lendf.Me 滿滿的支援和信任。至此,無論是損失者、使用者、專案方、DeFi 、以太坊和區塊鏈儼然已成為了一個命運共同體。

參考:

慢霧對Lendf.Me攻擊事件詳細細節還原(https://www.chainnews.com/articles/427601377396.htm

技術詳解 ERC777: (https://twitter.com/dmihal/status/1252082010513977346

白話重放攻擊 :(https://twitter.com/aliatiia_/status/1251997020769878016

免責聲明:

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

推荐阅读

;