以太坊Token合約驚現“古老”溢位漏洞,多家交易所受到影響
阿新 • • 發佈:2018-12-28
事件
本週四凌晨(2018年12月27日),降維安全實驗室(johnwick.io)自主研發的"智子"區塊鏈威脅感知預警系統監控到某知名ERC20合約遭到黑客攻擊, 黑客利用該合約批量轉賬中存在的整數溢位問題,向黑客受控賬戶"增發"了115,792,089,237,316,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000.584007913129639935數量的ERC20 Token,直接導致該合約的Token價值歸0.
智子監控感知截圖
攻擊交易截圖
分析
通過分析該合約原始碼,我們發現本合約雖然引入了SafeMath函式庫來避免潛在的整數溢位,但是未對所有敏感資料的四則運算使用該函式庫,百密一疏,導致本合約存在3處
- 其中batchInvests()因為是onlyOwner限制只允許owner合約管理者呼叫,所以影響輕微.
- 另外2處batchTransfers()(正是上述事件中,被黑客利用的介面)和batchTransferFroms()因為是公開介面,可以被任意賬戶呼叫,所以影響更為嚴重.
batchInvest()
batchTransfers()
batchTransferFroms()
如上圖所示, 如果有問題的轉賬金額陣列amounts[]累加(黃色高亮程式碼)發生整數溢位,將導致總轉賬金額totalAmount繞過後續require()檢查程式碼(綠色高亮
值得一提的是,這個漏洞跟今年7月7號的AMMBR(AMR)代幣合約的multiTransfer()函式整數溢位漏洞如出一轍!
後續
- 我們與該ERC20合約的專案方取得了聯絡,給他們的智慧合約進行了加急審計,並提供了整改措施和修復方案.
- 專案方行動迅速,不到12小時修復了我們指出的上述問題,並提供了修改後的合約原始碼供我方審計.
- 經過我方再次審計,確認沒有安全問題,專案方再次部署上鍊.
結論
- 為了防止整數溢位,對所有敏感資料的加減乘除四則運算都應使用SafeMath函式庫
- 智慧合約編寫完成後,部署上公鏈前,應交給有經驗的第三方的審計機構進行評估.
- 智慧合約部署上公鏈後,應加入第三方威脅感知監控系統,及時預警,將風險降至最低.