如何“安全”發送資產?從QBridge被攻擊事情說起

2022-01-30 06:01:25

2022 年 01 月 28 日, QBridge 遭受攻擊,損失約 8000 萬美金。網上有慢霧的分析報告。在這個推文中,我們嘗試從代碼出發,分析問題出現的最本質原因。

原因

我們的分析發現,這一問題主要由於以下原因所造成。

  1. 項目方沒有使用常用的OpenZeppelin的庫來處理資產的安全轉移,而是使用了自己實現的一個庫(SafeToken.sol)

  2. 在自己實現的庫中,對於safeTransfer函數的實現相比OZ缺少了是否為合約的判斷(當然判斷是否為0也可以)

  3. EVM在一個low level的函數調用中,如果target為0,返回值是 true。也就是返回值為true並不一定說明函數調用成功,也有可能說明目標合約根本不存在。

當然,具體是攻擊的時候,還需要結合合約本身的邏輯來進行。

在以上原因匯總,第三個原因是比較出乎意料的,也就是對一個0地址合約的函數調用返回值是true,而不是false。有問題的代碼如下圖:


      如何“安全”發送資產?從QBridge被攻擊事情說起

btw: 網上還有其他合約使用了safeToken的實現,可能存在類似問題。

實驗

為了驗證這個想法,我們寫了一個測試合約:


      如何“安全”發送資產?從QBridge被攻擊事情說起

執行TestSafeTransfer.test()函數是完全不會revert的。


      如何“安全”發送資產?從QBridge被攻擊事情說起

如何應對

對於合約中涉及資產轉移功能的代碼,我們建議

  • 使用成熟的庫,而不用自己重新設計

  • 可以在資產轉移前和後分別檢查balance,從而知道資產轉移的真正數量。這個建議對於一些通縮和通脹的資產同樣有效。


鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。

推薦文章

btc日內再次下跌 短线應當如何處理?

盡管以太坊現貨ETF獲批是個好消息,但市場反應卻不如預期。在消息公布後,以太坊價格出現了小幅下跌,...

加密蓮
134 3個月前

7月23日、BTC(合約)ETH(合約)行情分析及操作策略

昨日收益還是不錯的,日內給出的現價空單分別止盈我們目標點位,恭喜跟上的朋友喫肉。時間一晃到月底了,...

倪老師
134 3個月前

幣圈院士:血與淚的教訓!交易者為何總是撞死在同一棵樹上?

幣圈院士談。交易市場中的幾種“死法” 在幣圈市場鱗次櫛比的海洋,風起雲湧,時常讓人感到驚手不及。在...

幣圈院士
139 3個月前

7月23:Mt. Gox 比特幣錢包在市場緊縮的情況下轉移了價值 28.2 億美元的 BTC

7月23:Mt. Gox 比特幣錢包在市場緊縮的情況下轉移了價值 28.2 億美元的 BTC一個引...

168超神
131 3個月前

悅盈:比特幣68000的空完美落地反彈繼續看跌 以太坊破前高看回撤

一個人的自律中,藏着無限的可能性,你自律的程度,決定着你人生的高度。 人生沒有近路可走,但你走的每...

我是周悅盈
111 3個月前

btc完美盈利 晚間波動較大注意

昨日btc空單完美給到,最大化走出一千七百點空間~ btc: 日內开盤下跌繼續測試66000一线,...

加密蓮
121 3個月前