為什么黑客如此“鐘愛”跨鏈橋
1. 背景介紹
隨著區塊鏈及鏈上程序的增長,多鏈資金轉換需求迫切,跨鏈橋業務隨之增加,有業務的地方就會有安全問題,跨鏈橋為用戶提供便利的同時,可能也為黑客提供了另一扇大門,Poly Network攻擊事件發生后,跨鏈橋安全問題也隨之顯露出來。
2. 什么是跨鏈橋?
區塊鏈橋,也稱為跨鏈橋,連接兩條區塊鏈,允許用戶將加密貨幣從一條鏈發送到另一條鏈。
跨鏈橋通過在兩個獨立平臺之間啟用代幣轉移、智能合約和數據交換以及其他反饋和指令來進行資金跨鏈操作。
普通跨鏈橋運行如下:
- 用戶將資產 A 發送到原始鏈上的一個存款地址并支付過橋費;
- 資產 A 被隨機選擇的智能合約中的驗證者鎖定或受信任的托管人;
- 在目標鏈上發行等量的資產A1,并將資產 A1 被發送到目標鏈上的用戶地址;
貌似并不復雜的跨鏈資金轉移操作,但在多個跨鏈橋項目中,不同步驟均發生過安全漏洞。
3. 跨鏈橋發生過哪些漏洞
4. 跨鏈橋常見漏洞分析
(1) ChainSwap 攻擊事件
2021年7月,跨鏈資產橋梁項目ChainSwap遭到攻擊,該跨鏈橋上的二十多個項目遭到攻擊,損失了近 800 萬美元資產,并使十多個項目暴跌 99%。
該攻擊事件主要由于協議未對signatures合法性進行嚴格檢查,導致攻擊者使用自己生成的簽名可進行簽名交易。
(2) Factory合約
上圖receive方法主要功能是將用戶跨鏈之后的資金轉移給目標鏈用戶地址,需要驗證發送鏈的簽名。當前需要驗證的簽名個數為1。
由于receive方法邏輯及調用的ecrecover,_decreaseAuthQuota方法未對調用的signatures做嚴格檢查,攻擊者傳入了自己生成的簽名,后續合約邏輯對signatures的映射值及其他計算時,也并未有嚴格判斷,導致攻擊者成功執行receive方法為自己轉移資金簽名。
(3) Poly Network 攻擊事件
2021年8月,跨鏈互操作協議 Poly Network 突遭黑客攻擊,使用該協議的 O3 Swap 損失慘重,在以太坊、幣安智能鏈、Polygon 三條網絡上的資產幾乎被洗劫一空,黑客在不到1小時時間內,分別盜走了 2.5 億、2.7 億、8500 萬美元的加密資產,損失總額高達 6.1 億美元。
該攻擊事件主要由于中繼鏈驗證人公鑰被替換。也就是跨鏈的中間驗證人被攻擊者替換為自己可控。
協議內部關系:
- 中繼鏈驗證人的公鑰存在 EthCrossChainData 合約;
- EthCrossChainData 合約存在putCurEpochConPubKeyBytes 方法可以直接修改中繼鏈驗證人公鑰;
- EthCrossChainData 合約 owner 為 EthCrossChainManager 合約;
- EthCrossChainData 合約的 putCurEpochConPubKeyBytes 方法可修改中繼鏈驗證人角色。
EthCrossChainManager合約
上圖中,_executeCrossChainTx 方法未對傳入參數做嚴格限制,導致攻擊者傳入toContract,method參數均由攻擊者可控,由于協議內部關系,攻擊者傳入經過hash碰撞與putCurEpochConPubKeyBytes方法相同方法簽名,成功調用EthCrossChainData 合約的 putCurEpochConPubKeyBytes 方法直接修改中繼鏈驗證人公鑰為自己可控,之后利用該驗證人簽名惡意的資金轉移,獲取大量資金。
(4) Multichain(AnySwap) 攻擊事件
2022年1月,Multichain官方聲明協議跨鏈橋存在安全風險,部分代幣存在被黑的風險,督促用戶盡快取消授權。
事件核心原因:協議調用的底層代幣合約沒有實現 permit 方法,但包含回退功能,所以調用 permit 方法合約正常運行。
左AnyswapV4Router合約,右WETH9合約
上圖中anySwapOutUnderlyingWithPermit方法中,前三個參數均由調用者傳入,也就是from,token等參數均由攻擊者可控,當參數可控后,攻擊者部署攻擊合約,將受影響的代幣合約地址設置為底層代幣參數。核心問題是,由于WETH9不存在permit 方法,但會調用WETH9的fallback方法進行deposit操作,故調用不會發生錯誤(交易不會回滾),所以當用戶將資金授權給協議后,攻擊者會迅速將用戶資金轉移。
(5) Qubit Bridge 攻擊事件
2022 年 1 月,Qubit Finance 跨鏈橋Ethereum-Binance 被黑客入侵,損失超過 8000 萬美元。
核心問題:deposit方法中資金地址為address(0)時而safeTransferFrom未發生錯誤,導致存款功能正常執行。
QBridge合約
上圖中,deposit為正常存款方法,調用該方法中的IQBridgeHandler(handler).deposit時,當用戶傳入的resourceID映射tokenAddress地址為0地址時,后續的tokenAddress.safeTransferFrom(depositer, address(this), amount);轉賬會正常執行,導致方法及事件運行正常,調用者可以成功存款。
這里比較重要的是官方 tokenAddress的ETH為零地址是官方所為(官方已聲明deposit功能為忽略的遺棄功能)。
(6) Meter Bridge 攻擊事件
2022 年 2 月 ,Meter.io 跨鏈協議遭到攻擊,合約并沒有阻止封裝的 ERC20 代幣與原生 gas 代幣的直接交互,損失約 430 萬美元。
事件核心問題:deposit方法進行存款時未驗證WBNB存款情況,導致攻擊者繞過判斷條件不進行任何存款而正常獲取資金。
Bridge合約
上圖中,deposit和depositETH方法均為存款方法,而deposit方法存款時,未驗證存款為原生代幣的情況。攻擊者利用deposit存款時,傳入WBNB地址,由于該方法未驗證WBNB存款的情況,未進行資金存儲轉移,之后調用depositHandler.deposit方法成功繞過判斷條件,最后攻擊者利用該缺陷,成功獲取大量資金。
(7) Wormhole 攻擊事件
2022 年 2 月 ,Ethereum和Solana兩大區塊鏈的重要橋接“蟲洞”(Wormhole)遭黑客攻擊,損失超過3.2億美元。
漏洞核心原因:verify_signatures調用的load_instruction_at方法中未驗證instruction合法性,導致攻擊者可偽造,從而利用驗證簽名獲取資金。
verify_signature.rs 接口合約
上圖中verify_signatures方法是跨鏈驗證時所調用的簽名方法,由于verify_signatures方法調用了load_instruction_at方法,load_instruction_at方法為協議更新后的廢棄方法,該方法中未對傳入的instruction做嚴格檢查,導致攻擊者傳入了自己可控的值,攻擊者利用該簽名方法對自己的跨鏈請求進行簽名,獲取大量資金。
(8) Li Finance 攻擊事件
2022 年3 月,以太坊上分布式跨鏈協議Li.Finance 受到了攻擊,攻擊者執行了 37 次 call 注入,獲取了多個錢包中約 60 萬美元的資產(204 個 ETH)。
該攻擊事件的核心問題是未對傳入的外部數據進行嚴格限制,導致攻擊者傳入了自己可控call調用邏輯。
CBridgeFacet合約
上圖swapAndStartBridgeTokensViaCBridge 方法中,對傳入的_swapData參數未進行嚴格限制,同樣的LibSwap.swap調用中,也未對該值進行嚴格限制,導致swap方法中,_swapData可成功調用call方法進行惡意操作,攻擊者利用該缺陷,進行多次call調用獲取資金。
(9) Ronin Network 攻擊事件
2022 年 3 月, Axie Infinity側鏈Ronin驗證器節點和 Axie DAO 驗證器節點遭到破壞,導致在兩筆交易中從 Ronin 橋接了 173,600 個以太坊和 2550 萬美元的 USDC。
攻擊發生原因:
Sky Mavis 的 Ronin 鏈目前由 9 個驗證節點組成。為了識別存款事件或取款事件,需要九個驗證者簽名中的五個。攻擊者控制了 Sky Mavis 的四個 Ronin 驗證器和一個由 Axie DAO 運行的第三方驗證器。( 2021 年11月 - 12 月,Axie DAO 允許 Sky Mavis 代表其簽署各種交易,該事件停止后未撤銷許可名單訪問權限,攻擊者獲得了 Sky Mavis 系統的訪問權限,并使用無Gas RPC 從 Axie DAO 驗證器獲取簽名)。
5. 總結及建議
通過上述跨鏈橋攻擊事件可以發現,從去年兩個重要的跨鏈橋攻擊到今年目前為止已發生多個跨鏈橋攻擊事件,跨鏈橋攻擊明顯增多,被盜資金也頗為龐大,貌似黑客已經盯上了跨鏈橋這塊肥肉。從表格總結來看,攻擊主要發生在跨鏈之前和簽名處,普遍均為合約漏洞,也存在官方馬虎大意造成的被盜事件。
對于越來越多的跨鏈項目及項目合約安全,可遵循以下安全建議:
- 項目上線前對合約進行安全審計
- 合約調用接口需要嚴格排查其適配性
- 版本更新時需要對相關接口及簽名安全進行重新評估
- 需要對跨鏈簽名者進行嚴格審查以保證簽名不被惡意人員控制