Transit Swap被盜超2800萬美元 合約過度授權該如何防範?

2022-10-19 14:30:14

前不久,閃兌交易平台Transit Swap 官方發佈公告表示遭遇了黑客攻擊。根據10月12日的官方公告,本次黑客攻擊造成了總價值2890萬美元的資金損失。在Transit Swap的呼籲下,白帽已歸還了價值2400萬美元的資金,目前還有價值490萬美元的資金未歸還。

 

黑客攻擊原因

Transit Swap的官方公告在事故發生後稱,根據其自查結果,確認了該事件是由於代碼中的bug導致,而隨後發佈的慢霧安全團隊報告對該事件進行了詳細的分析。

 

Transit Swap本質是一個跨鏈DEX聚合器,它將市面上的主流DEX數據匯聚到一起從而給用戶提供服務。用戶在兌換使用過程中需要經過一個路由橋合約並對其進行授權。獲得用戶授權後,路由橋合約才能夠調用用戶用來兌換的Token。

 

然而Transit Swap的代碼設計中卻有著致命的缺陷。根據慢霧的分析,Transit Swap的路由代理合約、路由橋合約和權限管理合約在進行Token兌換時沒有對接收的參數、調用數據、兌換合約地址等相關傳入數據進行嚴格檢查,導致了本次黑客攻擊事件的發生。

 

黑客在發現這一漏洞後,將自己構造好的數據傳入並調用了路由橋合約。最終,攻擊者的兌換合約地址被指定為權限管理合約地址,從而竊取了所有對權限管理合約進行授權的用戶的Token。

 

過度授權的風險

在本次攻擊事件中,白帽雖然歸還了超80%的竊取資金,但未歸還的剩餘資金仍然給用戶帶來了較大的損失。從事件復盤中可以看出,攻擊者的資金竊取對象是對Transit Swap授權的用戶。

 

我們在日常的DApp使用中,經常會遇到DApp申請授權的情況。這是因為在用戶進行合約交互前,必須先給DApp授權,DApp的合約才能夠調用你對應的加密資產進行兌換或者借貸等操作。

 

而大部分開發者為了減少用戶授權次數,一般會設置授權相當大數量的Token給相應的智能合約。以PancakeSwap為例,如下圖所示,對USDC交易進行授權時,授權金額達到了驚人的10的71次方數額。這種方式的確能夠減少後續授權的麻煩以及gas費的消耗,例如下次還需要用USDC進行兌換時,就無需再進行授權,也無需再支付一次授權的gas費。

 

 

但是,10的71次方這麼大的數額在節省你時間和小部分費用的同時,也意味著合約擁有了無限轉走你錢包中USDC資產的權限。一旦出現類似於Transit Swap這樣的漏洞,相當於攻擊該合約的黑客也能夠隨時調用你的所有USDC,畢竟誰也不可能真的擁有超過10的71次方個USDC。

 

我們該如何防範?

1、 不要將資產集中在一個錢包

我們在與DApp交互時,可以盡可能地將資產分類。例如使用一個錢包存放長線持有的大額加密資產,另外的錢包存放少量資產用於與Dapp交互。這樣即便合約出現問題,也能將損失降低到最小。

 

2、設置小數額的授權上限

雖然大額授權可以節省後續使用的時間和gas費,但一旦發生黑客攻擊事件,無限授權的方式存在著更大的風險。為了避免因小失大,我們盡可能採取「使用多少就授權多少「的策略。例如我需要在本次交易中使用100USDC進行兌換,那麼我就可以在權限編輯中將授權數量從10的71次方更改為100,這樣這筆兌換就剛好耗盡這次授權的額度。即便以後該合約發生黑客攻擊,他也無法因為此次授權從我的錢包中轉走USDC。

 

 

3、定期清理授權

對於已經進行授權的合約,我們可以採取定期清理的方式來保障自己的錢包安全。我們以以太坊瀏覽器上提供的授權取消工具為例來演示如何取消錢包授權。

 

首先打開 https://etherscan.io/tokenapprovalchecker 授權取消網站,並選擇連接Web3錢包。

 

 

連接後就可以查看該錢包的Token(ERC-20)及NFT(ERC-721及ERC-1155)的資產授權情況,然後在最後一欄點擊撤銷授權。

 

 

隨後瀏覽器會彈出取消授權的具體信息,點擊「撤銷」後進入下一步。

 

 

接下來就是確認並支付gas費了,點開權限詳情就會發現,其實取消授權的方式就是將對該合約的授權最大數額改為0,從而達到取消授權的目的。

 

 

除了以太坊以外,還有其他區塊鏈瀏覽器也提供了授權取消工具,常有的授權取消網站有:

ETH鏈授權取消:https://etherscan.io/tokenapprovalchecker

BSC鏈授權取消:https://bscscan.com/tokenapprovalchecker

Polygon鏈授權取消:https://polygonscan.com/tokenapprovalchecker

AVAX鏈授權取消:https://snowtrace.io/tokenapprovalchecker

HECO鏈授權取消:https://www.hecoinfo.com/tokenapprovalchecker

Solana鏈授權取消:https://solscan.io/account/

 

在加密世界中,我們無法去檢查每一個合約是否絕對安全,只能盡可能地自我防範,提高資產安全意識,降低對外界的授權數量,從而減少因外部安全事故而出現的資產損失,保障我們的資產安全。

 

相關文章