# 區塊鍊資安事件研究 ## EOS隨機數攻擊 ### 項目:競猜類遊戲 FFGame、 EOSBETDice等等 ### 原因:偽隨機數演算法被破解 #### 詳述: 以EOSBETDice為例,其產生偽隨機數之函式種子使用tapos_block_prefix() 跟 tapos_block_num(),為下注區塊的【前一區塊】資訊,由於種子在下注區塊產生前便已誕生,導致其結果可被預測。 事件發生後,開發者試圖延遲開獎時間,使得種子為下注區塊產生前尚未產生的區塊資訊,然而再次被駭客以智能合約模擬出結果。 ### 損失:如下圖 ![](https://i.imgur.com/pzNMrAo.png) ### 後續處理方式:使用DEXON、公正第三方如:oracle ### 參考資料 https://blockcast.it/2018/11/13/five-eos-gaming-dapp-hacked-in-past-one-month/ https://medium.com/dexonzh/blockchain-pop-sci-part1-a1f5fe997a2b ## EOS回滾攻擊 ### 項目:競猜類遊戲 LuckyGo ### 原因:使用inline action進行開獎 #### 詳述: 【action】:用以調用某一個智能合約 【transaction】:用以調用某一個可連鎖觸發其他action的智能合約 【inline action】:用以調用transaction,但N個action中只要有一個失效,則整個transaction失效,一切回滾。 駭客首先部屬自己的智能合約,並且在合約中下注。並且判斷是否中獎,如果否,則拋出異常,使action失效。由於使用inline action,因此整筆下注都將無效。進而達成無本獲利。 ### 損失:LuckyGo 1029EOS 與下圖 ![](https://i.imgur.com/F99yOxS.png) ### 後續處理方式:可使用【defer action】 【defer action】:每個action互不影響。 ### 參考資料 https://learnblockchain.cn/2019/05/16/eos-DApp-revert/ https://www.anquanke.com/post/id/168858 ## ethereum溢出攻擊 ### 項目:BEC、SMT ### 原因:整數溢出 #### 詳述: 在此使用簡單例子解釋溢出。 unsign int 8可儲存[0,255]間的數值。 如果試圖儲存255+1,則會發生11111111+1=100000000的二進制運算,即為溢位。同理可證若試圖儲存0-1則會發生00000000-00000001=11111111。駭客便利用此漏洞憑空獲取大量虛擬貨幣。 ### 損失:BEC、SMT市值蒸發。 ### 後續處理方式:使用 SafeMath來處理算術邏輯,避免溢位。 ### 參考資料 https://reurl.cc/QpxKXq ## ethereum重入攻擊 ### 項目:The DAO ### 原因:遞歸漏洞 #### 詳述: ![](https://i.imgur.com/zHdjAYv.png) 駭客向The DAO平臺申請專案X經費。接著The DAO會透過Token建立程序,將以太幣給與專案X,之後才進行扣款。來刪減The DAO帳目的以太幣數目。不過,當The DAO執行withdrawRewardFor程式,要撥款給專案X時,駭客透過自訂智能合約的功能,再次呼叫splitDAO功能,在扣款指令還未進行之前,再次執行專案建立功能進行再次撥款,因扣款完成前,用戶以太幣餘額仍是正值,在The DAO來不及更新前,這項操作將重複執行。 ### 損失:370萬個以太幣(7,200萬美元)、以太坊價格暴跌30% ### 後續處理方式:使用硬分岔 ### 參考資料 https://www.ithome.com.tw/news/107405 https://bitnance.vip/news/d9e7b524-a9a8-41a3-9eb7-7d03b47905a0 ## EOS交易排擠攻擊 ### 項目:EOS.WIN ### 原因:偽隨機數演算法使用了時間作為種子 #### 詳述: 駭客先使用 loveforlover 發起正常的轉賬交易,然後使用另一個合約帳號檢測中獎行爲。如果不中獎,則發起大量的 defer 交易,將項目方的開獎交易"擠"到下一個區塊中。 大量Defer侵占區塊鏈內部的CPU資源,由於本應在指定區塊鏈內部執行的開獎交易因資源不足,只能到下一個區塊鏈執行。而作為智能合約本身的隨機數,同一個開獎交易在不同區塊鏈的執行結果是不一樣的。也就是透過強行讓智能合約重新開獎,從而達到攻擊目的。 ### 損失:5000EOS ### 後續處理方式:關鍵操作不使用defer交易的方式 ### 參考資料: http://www.qukuaiwang.com.cn/news/14878.html https://www.chainnews.com/zh-hant/news/504514131141.htm ## EOS假轉帳通知攻擊 ### 項目:EOS nkpaymentcap ### 原因:智能合約設計缺失 #### 詳述: 第一種方式: EOS DApp競猜類游戲,用戶需要向DApp轉賬EOS幣,目前普遍採用的轉賬方法是,用戶直接調用eosio.token合約(EOS智能合約)的轉移函數給DApp賬號轉賬EOS幣,然後,遊戲合約檢測到用戶進行了真實的轉賬之後,會按照開獎流程發放獎金。 駭客先通過EOS的eosio.token合約發行了一種代幣,並把它命名為EOS,然後給EOSBet的遊戲幣帳號假EOS,遊戲沒有檢測EOS發行方,而後調用了轉移函數,給駭客發放獎金。 第二種方式: 駭客創建了兩個帳號,A、B,先用A通過EOS系統合約eosio.token給B發送正常的EOS轉賬,同時,黑客在B上部署了合約,B收到轉賬通知,會通過該合約把轉賬給EOSBet遊戲合約。 EOSBet遊戲幣在收到轉賬通知後,沒有確認收款方是否為自己,而認為這是一筆正常的轉賬,然後按照正常的開獎流程發放獎金給駭客,駭客因此獲利。 ### 損失:50000EOS(180000美元) ### 後續處理方式:重新設計智能合約,並做好安全測試 ### 參考資料: https://www.babaofan.com/wxnews/201903111915251311.html https://www.chainnews.com/news/860787511029.htm ## 粉塵攻擊(社交工程攻擊) ### 項目:Bitcoin Bamourai及部分虛擬貨幣 ### 原因:社交工程攻擊 #### 詳述: 此網頁詳細講解粉塵攻擊手法 https://cobo.com/blog/fenchengongji?locale=zh ### 損失: ### 後續處理方式:某些錢包允许用户把不明轉入視為粉塵攻擊,永遠不會被選中進行交易。 ### 參考資料: https://www.binance.vision/zt/security/what-is-a-dusting-attack