揭秘THORChain(RUNE)安全風險 – CoinEx安全團隊報告
4月1日,THORChain官方公佈了2022年Q1財報,在2022年初期持續性低迷的市場行情和高度不穩定的地緣政治雙重因素影響下,THORChain營收實現了正增長。從公開數據顯示THORChain一季度收入2.17 億美元。被譽為“跨鏈版UniSwap”的THORChain憑藉自身的產品獨特性成功躋身跨鏈交易市場,受到投資者的青睞。
看似光鮮的背後,THORChain也飽受黑客盜幣之苦。自THORChain在以太坊發行以來,安全事件頻發引起市場對THORChain安全性的質疑。 4月11日,THORChain官方推特發布一則注意網絡釣魚攻擊的貼文,警告用戶不要與錢包的[DeTHOR]或其他未知Token進行交互,再次引發用戶對THORChain安全問題的擔憂。
CoinEx安全團隊在專注自身產品的安全體系建設以外,同時保持對區塊鏈行業安全事件持續性關注,希望從技術安全的視角幫助用戶更好地了解不同項目的安全性,減輕項目投資風險。出於促進行業安全規範的角度出發,CoinEx安全團隊對近期關注度較高的項目-THORChain(RUNE)進行了安全風險剖析。期望能夠引起項目方重視並進行合約代碼的優化,同時警醒用戶增強資產安全意識,規避資金損失風險。
THORChain(RUNE)的安全性如何?
CoinEx安全團隊經過對THORChain(RUNE)合約代碼及邏輯進行分析,總結THORChain(RUNE)可能存在的風險:
首先,通過查看THORChain(RUNE)的合約代碼:
https://etherscan.io/address/0x3155ba85d5f96b2d030a4966af206230e46849cb#code
我們可以看到這是一個相對標準的ERC-20 Token。值得注意的是,除了標準的ERC-20標準接口,THORChain(RUNE)還額外提供了一個接口:
如上圖所示,在tranferTo我們可以看到THORChain(RUNE)使用了tx.origin,這是導致THORChain(RUNE)風險存在的因素之一。在這裡,我們需要解釋下tx.origin與msg.sender的區別:
下圖是普通地址直接調用合約的情況:
這種情況下,智能合約裡:msg.sender = account.address, tx.origin = account.address。 msg.sender和tx.origin是一樣的。
接下來,我們再觀察下地址調用合約,合約再調用合約的情況如何:
如上圖所示,在合約再調用合約的情況下,我們看到對於合約contractA, 其msg.sender和tx.origin沒有區別都是account.address。
但是對於contract B,結果顯示msg.sender等於合約A的地址,而tx.origin則為account.address。因此,tx.origin相當於一個全局變量,它遍歷整個調用棧並返回最初發送交易的帳戶地址。這就是問題的關鍵所在,截至目前為止,THORChain(RUNE)已知的黑客攻擊事件幾乎都是因為tx.origin。
接下來,讓我們看看攻擊者是如何通過tx.origin的特性盜取用戶的RUNE代幣:
第一種方式:“順手牽羊”
以太坊上地址分為:外部地址和合約地址。通過外部地址給兩種類型的地址轉賬ETH有著本質的區別。通過查看solidity的官方文檔,我們知道要給合約地址轉賬,合約地址必須實現receive方法。
結合tx.origin的特性,攻擊者可以構造一個Attack合約:
通過Attack合約,只要用戶給該合約轉賬ETH,在轉賬過程中,Attack合約就會順手牽羊,把用戶的賬上持有的RUNE同步順走。
第二種方式:“珠聯‘幣’合”
“珠簾‘幣’合”則相對比較特殊,攻擊者若通過本方式盜取用戶的RUNE不僅需要一個媒介Token,還需要該token有機會調用第三方合約。通過觀察以太坊上RUNE的轉賬記錄,發現有攻擊者通過AMP token的轉賬盜取用戶RUNE的記錄。
AMP Token使用erc1820協議進行hook註冊管理,每次transfer時都會有檢測是否有註冊Hook。如有,則調用對應的Hook回調。
通過查看AMP Token的合約代碼,我們發現transfer最終執行的是:_transferByPartition,其中有兩處涉及transferHook的回調。一個是轉賬之前:_callPreTransferHooks,一個是轉賬之後:_callPostTransferHooks。 _callPreTransferHooks是針對from地址,而_callPostTransferHooks則針對的是to地址,即接收token的地址。
對普通用戶而言,薅自己的token並沒有任何意義。因此,對攻擊者而言,可以操作的是_callPostTransferHooks。讓我們來查看_callPostTransferHooks的代碼:
注意看,唯一可能被利用的回調
下面將詳細介紹如何利用該回調在轉賬AMP Token的同時轉走用戶的RUNE。
第一步:需要一個回調合約,如下所示:
第二步:部署第一步的合約得到地址Attack Address
第三步:調用erc1820合約接口setInterfaceImplementer註冊接口
erc1820地址:0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24
ERC-1820 Address: 0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24
合約接口:setInterfaceImplementer(address toAddr, bytes32 interfaceHash, address implementer)
其中:toAddr為轉走AMP的接收地址,
interfaceHash為AmpTokensRecipient的hash:
0xfa352d6368bbc643bcf9d528ffaba5dd3e826137bc42f935045c6c227bd4c72a
interfaceHash is the hash of AmpTokensRecipient:
0xfa352d6368bbc643bcf9d528ffaba5dd3e826137bc42f935045c6c227bd4c72a
Implementer:為第二步部署得到的attack address
Implementer is the Attack Address obtained in Step 2.
第四步:引誘用戶向toAddr轉AMP觸發回調,同時轉賬用戶的RUNE。
第三種方式:“投怀送抱”
“投怀送抱”顧明思議是攻擊者通過贈送用戶一些可觀的福利從而引誘用戶進行合約操作。下面將介紹一種常見的方式。
第一步:攻擊者發行一個ERC-20 token,他可以寫入任何涉及到簽名的合約接口中;
第二步:在Uniswap或者其他swap創建交易對;
第三步:給所有持有RUNE token的用戶地址進行空投;
通過以上三步驟,前期的“投怀送抱”工作基本完成,接下來只需等待用戶去swap交易,用戶只要進行approve、transfer等操作都有RUNE丟失的風險。
此外,為進一步核實THORChain合約代碼的安全風險問題,CoinEx安全團隊與行業兩家知名安全機構慢霧安全團隊及派盾安全團隊進行了討論,經慢霧安全團隊和派盾安全團隊驗證後,認為以上提到的安全風險確實存在。
那麼,項目方該如何優化合約代碼以提高項目的安全性,確保用戶資產安全呢?
無他,唯有慎用tx.origin。
另一方面,作為普通用戶面對防不勝防的盜幣方式時,該如何規避風險保護自我資產。對此,CoinEx安全團隊建議:
1. 針對第一種盜幣方式:在轉賬時需要注意預估的gas消耗。普通的ETH轉賬,21000的Gas消耗足矣,若發現Gas消耗遠超於21000,則需要加強警惕。
2. 針對第二種盜幣方式:建議進行錢包隔離。不同的token存放在不同的錢包地址,尤其是交易所的熱錢包地址,更應多加小心。
3、針對第三種盜幣方式:貪婪是萬惡之源,切勿盲目參與空投活動。
安全是區塊鏈行業更古不變的話題,無論是項目方、交易所還是所有的行業參與者都應當將安全作為項目運營的重中之重,承擔起保護用戶資產安全的責任,共同推動行業良性發展。
最近有許多朋友來信詢問該如何安全、無痛的進入加密貨幣世界,這邊統整了我自己長久使用、體量大名聲好的虛擬貨幣交易所給大家,可以快速省下爬文的時間。
- 幣安:全球最大虛擬貨幣交易所,流動性佳,現貨、合約、Defi這裡通通有,文章介紹
- OKX:全球第二大虛擬貨幣交易所、USDT活存15~40%,IEO收益率極高,文章介紹
- 派網:14種免費量化交易機器人,我用來使用網格交易、雙幣投資的好工具,文章介紹
- MAX:台幣出入金專用,可以讓你把台幣與USDT互換,購買各種虛擬貨幣,文章介紹
更多交易所的特色與介紹,可參考:虛擬貨幣交易所排名、理財產品、手續費、IEO、推薦新手註冊交易所統整
本站文章僅做教學使用,內文提到產品/服務/標的均不代表任何投資建議,投資人需了解任何投資皆有其風險。文章相關連結皆可視為有可能為網站帶來介紹費,主要用來支持網站持續分享,且不會為你帶來額外成本。
一般留言