Nomad被黑解析|致命漏洞損失1.9億美元,白帽已返還近900萬美元

歐科雲鏈研究院 發佈 2022-08-03T17:40:11.371414+00:00

8月2日,歐科雲鏈OKLink安全團隊監測到Nomad Bridge遭受攻擊,智能合約中的WETH和WBTC被轉出,損失約1.9億美元。

8月2日,歐科雲鏈OKLink安全團隊監測到Nomad Bridge遭受攻擊,智能合約中的WETH和WBTC被轉出,損失約1.9億美元。

編輯|小歐

分析|OKLink安全團隊

繼6月24日,Horizon跨鏈橋被黑損失1億美元之後,如今Nomad跨鏈橋也面臨黑客攻擊損失近2億美元,為何黑客如此「鍾愛」跨鏈橋?

伴隨區塊鏈及鏈上應用的增長,多鏈交互需求讓跨鏈橋業務迎來了爆發性增長。而有Money效應的地方,就擺脫不了「黑暗」的滋生,當跨鏈橋在為用戶提供便利的同時,龐大的資金量也吸引了眾多黑客的關注。

回顧此次Nomad跨鏈橋被黑事件,堪稱是Web3史上最混亂的黑客攻擊之一。今天,本文將從數據概覽、事件原因、詳細經過、漏洞分析四個維度,對事件展開深度分析...

數據概覽

累計涉及1251個ETH地址

據歐科雲鏈OKLink數據追蹤顯示,此次Nomad Bridge 攻擊事件共涉及1251個ETH 地址,涉及14個資產種類,涉案金額約1.9 億美金;其中包含 12個ENS地址,ENS 地址涉案金額超 6980 萬美金,約占總金額的38%;在利用漏洞獲利後,直接進行交易的地址數達739 個,占比近60%。

但值得注意的是並不是所有地址都是惡意攻擊,已知已有白帽駭客公開表態願意歸還資金。截至發稿前,被OKLink多鏈瀏覽器標記為「Nomad官方被盜資金回收地址」,目前已返還近900萬美元資產。

此外,OKLink多鏈瀏覽器目前已對其餘黑客地址進行了7*24H監控,後期若發生相關地址異動,將第一時間同步大家。

事件起因與漏洞分析

這次漏洞產生的原因是 Replica 合約在初始化的時候將 confirmAt[0x00] 賦值為1,使得storage變量 messages中未初始化的鍵值對都能夠成功通過檢測。

大約從第 15259101 個區塊開始,攻擊者對Replica 合約的 Process 函數進行了多次的調用。

對(0xb1fe開頭的)交易哈希進行分析可以看到,當交易執行到acceptableroot函數的時候,可以發現很不尋常的地方。

從下圖可以看出,acceptableRoot函數的輸入參數為全0,且該函數返回結果為 true。

根據_messageHash獲得的 messages[_messageHash] 值為 0 字符串,有兩種情況,一是 _messageHash 在 messages mapping 中沒有對應的值,二是存在有對應值但被設為了0,並且我們從返回結果true得知,輸入0值可以繞過這個 require 檢查,這是很異常的情況。

進入到acceptableRoot函數,當輸入_root 為0時,意味著 confirmAt[_root] 滿足不為零且小於等於 block.timestamp 的值。

而confirmAt[] 只在initialize,update和 setConfirmation三個函數中出現被修改的情況,導致此次攻擊事件發生的問題出現在 initialize 函數中。

可以看到在調用initialize函數對合約變量進行初始化的時候,將confirmAt[_committedRoot] 的值設為了1。

在該合約的初始化交易中可以看到,輸入的所有變量都為0,也就是說在初始化階段 confirmAt[0x00..0] 的值被設為了1。

這也就直接導致了 acceptableRoot 函數中發生了不合理的繞過。

初始化交易哈希:

0x53fd92771d2084a9bf39a6477015ef53b7f116c79d98a21be723d06d79024cad

回到process 函數中,在了解了上述漏洞產生的原因後,只需要每次輸入沒有被使用過的 _messageHash ,就能在 messages mapping 中獲取到 0 值,從而繞過 !proven 的檢測,最終從跨鏈橋上盜取資產。

此次漏洞的核心就在對confirmAt這個mapping賦值的過程。從initialize函數輸入參數可以看到,_committedRoot使用了0x00。一般情況使用0值做初始化參數沒有問題,但是在Nomad的這個場景下,就導致了任意message都能通過檢測的安全漏洞。

也就是說,攻擊者只需要找到一個有效的交易,用自身地址找到/替換對方的地址,然後重新廣播它就能獲得Nomad跨鏈橋上資產。

OKLink安全分析師建議,未來在initialize函數中也需要進行嚴格的安全檢查和判斷,避免安全事故的發生。

鏈上安全無小事

馬虎大意不可取

此次Nomad事件影響十分廣泛,參與地址數眾多,其中出現了許多ENS地址。主要原因是執行攻擊的門檻成本低,後續參加的攻擊者只需要將先前攻擊者的calldata 稍作修改就可以完成攻擊,很多普通用戶通過社區傳授的「成功經驗」,對Nomad跨鏈橋趁火打劫,過了把「黑客癮」。

加上項目方在攻擊事件發生時,沒有相應的項目應急停止機制,因此才會造成近2億美元的損失。

近年來,跨鏈橋相關的黑客攻擊主要發生在跨鏈之前和簽名處,普遍均為合約漏洞,當然也存在類似此次Nomad官方馬虎大意造成的被盜事件。

對于越來越多的跨鏈項目及項目合約安全,歐科雲鏈OKLink安全團隊提醒:

1.項目上線前對合約進行安全審計;

2.合約調用接口需要嚴格排查其適配性;

3.版本更新時需要對相關接口及簽名安全進行重新評估;

4.需要對跨鏈簽名者進行嚴格審查以保證簽名不被惡意人員控制;

作為全球領先的區塊鏈數據與技術服務提供商,未來歐科雲鏈將持續發揮鏈上大數據公司優勢,跟進分析鏈上安全事件,為Web3時代的鏈上安全保駕護航。

關鍵字: