當離黑客如此近...從 Lendf.Me 黑客事件我們看到了什麼?

對於 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 平臺的多位受害者紛紛通過轉賬向黑客留言,求對方返還自己的血汗錢。至此,此次黑客盜竊已演變成一次大型群體事件。


當離黑客如此近...從 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 雖然更加安全,但功能具有侷限性。


當離黑客如此近...從 Lendf.Me 黑客事件我們看到了什麼?


誕生於 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 、以太坊和區塊鏈儼然已成為了一個命運共同體。


分享到:


相關文章: