Nomad事件今天霸屏幣圈,短短幾個小時被黑上億美元。而且Nomad在受到攻擊之後,TVL也在幾個小時內撤出了將近2億美元。
在之前的區塊鏈項目被黑的事件中,曾有用戶用Any Swap跨鏈被黑十幾萬,通過對漏洞的追踪,最終發現在Any Swap下,黑客可以利用隨機數種子反推出用戶的私鑰來達到盜取用戶資產的目的。
Any Swap這種破解私鑰的技術可能需要一定的技術門檻,但是這次Nomad漏洞是為數不多的,即便是普通人不懂技術和代碼也有機會可以實現的攻擊,所以事件才會發酵如此之快。此次事件也受到業內白帽的關注。
@samczsun是業內知名的白帽,相信大家都不陌生,在早年有一個項目漏洞,他本可以輕易將資金轉走,但是他卻花了整整一個通宵,幾經轉折聯繫到了項目方修補了這個漏洞,而此次他也對Nomad事件做了一個詳細的分析。
我們不妨來一起來回顧一下此次被盜事件漏洞問題:
從電報中@samczsun發現鏈上的資產在迅速的撤出,於是他去查詢了鏈上具體的交易信息,發現了一些端倪。
當一個賬戶發出0.01個WBTC的時候會返回給100個WBTC,當然這不排除是某種促銷活動,於是@samczsun繼續進行一些鏈上跟踪後發現了問題,在Moonbeam上橋接的0.01個WBTC,不知是何原因以太坊卻收到了100個。
通過查詢合約代碼@samczsun定位到了一個嚴重的問題。合約中有一個叫做process的方法,這個方法的作用是,首先它會驗證信息確保收到的信息是被證明過的,如果信息沒有問題就執行。正常來說這樣的邏輯和過程是沒有任何問題的,但是問題就在於這個驗證。
Messages是一個Map,Map的結構是鍵值對的,如果在這個map裡面沒有找到對應的鍵,根據solidity的規則會返回一個默認值0,而這個鍵是從哪裡來的?
我們可以從代碼中看到,key是從process的參數message的字節碼中解析出來的,也就是說鍵是從外部傳入的,現在想要黑掉這個合約,我們的必要條件基本上都具備,關鍵驗證信息從外部傳入,這個是我們已經確認的,剩下的只要證明acceptable Root 如果能夠接受0返回true,那就能把這個驗證繞過。
@samczsun在區塊鏈瀏覽器中調用了acceptable Root這個方法,並把參數0傳入,返回的結果正如大家所見到的是true,Nomad項目被黑的核心原因終於被找到。
黑客利用這個漏洞,找一筆有效的交易反復發送構造好的交易數據,來抽取跨鏈橋被鎖定的資金,這也就是為什麼網上說這次攻擊普通人也能做到的原因,現在Nomad的資金已經基本上都空了。
對此次事件網上大家的看法也不一致,有人稱第一筆轉出是黑客所為,後面極有可能是散戶撿錢,也有用戶猜測是項目方看到情況已經失控,於是自導自演。
至於真相如何我們不得而知,此次的事件中損失最嚴重的是不久前剛給nomad投資的機構,受nomad跨鏈橋被攻擊的影響,包括與nomad跨鏈橋相關的Moonbeam也受到不小的影響,但反而evmos因為Moonbeam暫時關閉的EVM功能,而Moonbeam作為evmos與以太坊生態的主要跨鏈橋,被盜的資金需要通過evmos作為出金渠道,反而迎來了一波不小的漲幅。
跨鏈橋被盜屢見不鮮,目前區塊鏈技術還在非常早期的階段,在早期的階段雖然有著非常大的紅利,但同時也伴隨著巨大的風險,希望大家還是小心謹慎。