區塊鏈安全入門筆記:智慧合約、交易回滾攻擊、交易排擠攻擊、隨機數攻擊

買賣虛擬貨幣
隨著越來越的人參與到區塊鏈這個行業中來,為行業注入新活力的同時也由於相關知識的薄弱以及安全意識的匱乏,給了攻擊者更多的可乘之機。面對頻頻爆發的安全事件,慢霧特推出區塊鏈安全入門筆記系列,向大家介紹區塊鏈安全相關名詞,讓新手們更快適應區塊鏈危機四伏的安全攻防世界。智慧合約 Smart Contract智慧合約(Smart Contract)並不是一個新的概念,早在 1995 年就由跨領域法律學者 Nick Szabo 提出:智慧合約是一套以數字形式定義的承諾(Promises),包括合約參與方可以在上面執行這些承諾的協議。在區塊鏈領域中,智慧合約本質可以說是一段執行在區塊鏈網路中的程式碼,它以計算機指令的方式實現了傳統合約的自動化處理,完成使用者所賦予的業務邏輯。隨著區塊鏈智慧合約數量的與日俱增,隨之暴露出來的安全問題也越來越多,攻擊者常能利用漏洞入侵系統對智慧合約使用者造成巨大損失,據 SlowMist Hacked 統計,截止目前僅 ETH、EOS、TRON 三條鏈上因智慧合約被攻擊而導致的損失就高達 $126,883,725.92,具有相同攻擊特徵的手法更是呈現出多次得手且跨公鏈的趨勢,接下來我們將為大家介紹近年來一些常見的智慧合約攻擊手法。交易回滾攻擊  Roll Back Attack交易回滾攻擊(Roll Back Attack),故名思義,指的是能對交易的狀態進行回滾。回滾具體是什麼意思呢?回滾具體指的是將已經發生的狀態恢復成它未發生時候的樣子。那麼,交易回滾的意思就是將已經發生的交易變成未發生的狀態。即攻擊者本來已經發生了支付動作,但是透過某些手段,讓轉賬流程發生錯誤,從而回滾整個交易流程,達到交易回滾的目的,這種攻擊手法多發於區塊鏈上的的智慧合約遊戲當中,當使用者的下注動作和合約的開獎動作在一個交易內的時候,即內聯交易。攻擊者就可以透過交易發生時檢測智慧合約的某些狀態,獲知開獎資訊,根據開獎資訊選擇是否對下注交易進行回滾。
該攻擊手法早期常用於 EOS DApp 上,後逐步向波場等其他公鏈蔓延,截止目前,已有 12 個  DApp 遭遇攻擊,慢霧安全團隊建議開發者們不要將使用者的下注與開獎放在同一個交易內,防止攻擊者透過檢測智慧合約中的開獎狀態實現交易回滾攻擊。交易排擠攻擊  Transaction Congestion Attack交易排擠攻擊(Transaction Congestion Attack)是針對 EOS 上的使用 defer 進行開獎的遊戲合約的一種攻擊手法,攻擊者可以透過某些手段,在遊戲合約的 defer 開獎交易前傳送大量的 defer 交易,惡意侵佔區塊內的 CPU 資源,使得智慧合約內本應在指定區塊內執行的 defer 開獎交易因資源不足無法執行,只能去到下一個區塊才執行。由於很多 EOS 上的遊戲智慧合約使用區塊資訊作為智慧合約本身的隨機數,同一個 defer 開獎交易在不同區塊內的執行結果是不一樣的。透過這樣的方式,攻擊者在獲知無法中獎的時候,就透過傳送大量的 defer 交易,強行讓智慧合約重新開獎,從而達到攻擊目的。該攻擊手法最早在駭客 loveforlover 向 EOS.WIN 發起攻擊時被發現,隨後相同的攻擊手法多次得手,據 SlowMist Hacked 統計僅 2019 年就有 22 個競猜類 DApp 因此損失了大量資金,慢霧安全團隊建議智慧合約開發者對在不同區塊內執行結果不同的關鍵的操作不要採用 defer 交易的方式,降低合約被攻擊的風險。隨機數攻擊   Random Number Attack
隨機數攻擊(Random Number Attack),就是針對智慧合約的隨機數生成演算法進行攻擊,預測智慧合約的隨機數。目前區塊鏈上很多遊戲都是採用的鏈上資訊(如區塊時間,未來區塊雜湊等)作為遊戲合約的隨機數源,也稱隨機數種子。使用這種隨機數種子生成的隨機數被稱為偽隨機數。偽隨機數不是真的隨機數,存在被預測的可能。當使用可被預測的隨機數種子生成隨機數的時候,一旦隨機數生成的演算法被攻擊者猜測到或透過逆向等其他方式拿到,攻擊者就可以根據隨機數的生成演算法預測遊戲即將出現的隨機數,實現隨機數預測,達到攻擊目的。2018 年 11 月 11 日,攻擊者向 EOS.WIN 發起連續隨機數攻擊,共獲利 20,000 枚 EOS,在此慢霧安全團隊建議智慧合約開發者使用安全隨機數源,如鏈下的隨機數種子方案,降低合約被攻擊的風險。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;