---
# System prepended metadata

title: 區塊鍊資安事件研究
tags: [公開]

---

# 區塊鍊資安事件研究

## 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

