2021 年 6 月 29 日,去中心化跨鏈交易協議 THORChain 推文稱發現一個針對 THORChain 的惡意攻擊,節點以做出反應並進行隔離和防禦,帶您了解這起跨鏈系統的「假充值」攻擊結果為何。
(前情提要: Thorchain|想成為跨鏈的 Uniswap ,原生代幣 RUNE 的價值捕獲模式為何?)
(事件背景: BSC首現閃電貸攻擊/技術解析 Spartan Protocol 遭駭手法,造成 3 千萬美元損失)
據慢霧區消息,2021 年 6 月 29 日,去中心化跨鏈交易協議 THORChain 發推稱發現一個針對 THORChain 的惡意攻擊,THORChain 節點已作出反應並進行隔離和防禦。慢霧安全團隊第一時間介入分析,經分析發現,這是一起針對跨鏈系統的「假充值」攻擊,結果分享如下:
什麼是「假充值」?
當我們在談論「假充值」攻擊時,我們通常談的是攻擊者利用公鏈的某些特性,繞過交易所的充值入帳程序,進行虛假充值,並真實入帳。
慢霧在早期已經披露過多起「假充值」攻擊事件:
- USDT 假充值:USDT 虛假轉帳安全⻛險分析 | 2345 新科技研究院區塊鏈實驗室
- EOS 假充值:EOS 假充值 (hard_fail 狀態攻擊) 紅色預警細節披露與修復方案
- 以太坊代幣假充值:以太坊代幣「假充值」漏洞細節披露及修復方案
- 比特幣 RBF 假充值風險:比特幣 RBF 假充值風險分析
隨著 RenVM、THORChain 等跨鏈服務的興起,跨鏈節點充當起了交易所的角色,通過掃描另一條公鏈的資產轉移情況,在本地公鏈上生成資產映射。THORChain 正是通過這種機制,將以太坊上的代幣轉移到其它公鏈。
漏洞分析
我們從業務邏輯入口去追蹤分析此漏洞的成因。
首先看到在處理跨鏈充值事件時,調用了 getAssetFromTokenAddress 方法去獲取代幣訊息,並傳入了資產合約地址作為參數:
bifrost/pkg/chainclients/ethereum/ethereum_block_scanner.go
在 getAssetFromTokenAddress 方法裡,我們看到它調用了 getTokenMeta 去獲取代幣元數據,此時也傳入了資產合約地址作為參數,但在此處有一個定義引起我們的警覺,在初始化代幣時,默認賦予了代幣符號為 ETH,這就是漏洞的關鍵點之一:asset := common.ETHAsset,如果傳入合約地址對應的代幣符號為 ETH,那麼此處關於 symbol 的驗證將被繞過。
bifrost/pkg/chainclients/ethereum/ethereum_block_scanner.go
繼續驗證我們的猜測,我們看到當代幣地址在系統中不存在時,會從以太坊主鏈上去獲取合約訊息,並以獲取到的 symbol 建構出新的代幣,此時所有的漏洞成因都已經顯現:
bifrost/pkg/chainclients/ethereum/ethereum_block_scanner.go
bifrost/pkg/chainclients/ethereum/tokens_db.go
bifrost/pkg/chainclients/ethereum/ethereum_block_scanner.go
總結一下,首先是由於錯誤的定義,如果跨鏈充值的 ERC20 代幣符號為 ETH,那麼將會出現邏輯錯誤,導致充值的代幣被識別為真正的以太幣 ETH。
還原攻擊真相
我們來看一筆攻擊交易的執行過程,可以提取出充值的代幣合約地址:
我們在 Etherscan 上查看這個代幣合約地址:
發現這個地址對應的合約的代幣符號正是 ETH,攻擊者正是通過部署了假幣合約,完成了這次跨鏈假充值。
漏洞修復
漏洞補丁:
項目方在發現攻擊後快速對程式碼進行了修復,刪除了默認的代幣類型,使用 common.EmptyAsset 進行空代幣定義,並在後續邏輯中使用 asset.IsEmpty() 進行判斷,過濾了沒有進行賦值的假充值代幣。
總結
幸運的是,但作為跨鏈系統,未來可能聚集巨額的多鏈資金,安全性不容忽視,因此慢霧安全團隊建議在進行跨鏈系統設計時應充分考慮不同公鏈不同代幣的特性,充分進行「 假充值」測試,做好狀態監控和預警,必要時可聯繫專業安全公司進行安全審計。
📍相關報導📍
算法穩定幣SafeDollar遭駭「歸零」!攻擊者得手25萬美元,Polygon生態被駭客盯上?
BSC生態系「閃電貸攻擊」第九起! Impossible Finance 被駭流程分析
BSC 項目 PancakeBunny 遭閃電貸攻擊!估遭駭 2 億美元,BUNNY 暴跌 99%
讓動區 Telegram 新聞頻道再次強大!!立即加入獲得第一手區塊鏈、加密貨幣新聞報導。
LINE 與 Messenger 不定期為大家服務