危及ERC20智能合約、讓代幣價值歸零的溢出漏洞到底是什么?區塊鏈
黑客可從攻擊中獲得大量代幣,拋售獲利。但同時也讓其價值迅速歸零。
7月8日下午,降維安全實驗室(johnwick.io)監控到,以太坊智能合約AMR存在高危風險交易。團隊對代碼進行分析,發現其中存在的整數溢出漏洞已被人惡意利用,導致AMR大量增發。今年4月份,攻擊者也曾利用該漏洞攻擊美圖合作的美鏈BEC,導致市場上頓時出現海量BEC,貨幣價值幾乎歸零。
那么,整數溢出漏洞是什么?可以從我們熟悉的登陸密碼說起。
程序怎么判斷用戶輸入密碼的正誤呢?后臺的操作是這樣的,先讓用戶輸入密碼,然后再調取真正的密碼,與之對比,如果差異為0,則輸出密碼正確,否則錯誤。
這在用戶輸入正確密碼(結果為0)或錯誤密碼(結果不為0)時都很好判斷。但是,由于后臺留給密碼的存儲空間是有限的(比如4個字節),如果此時用戶輸入的數據超出4個字節,那么將會出現字符溢出。如果程序事先沒有被設置對溢出進行判斷的話,溢出的字符將使系統報錯或關閉。
我們再來看此次整數溢出漏洞的缺陷代碼片段(由Bcsec安全團隊提供):
該片段出現在一個叫“multiTransfer”的函數中,函數的作用是讓一個地址可以同時給多個地址轉賬。問題代碼中的totalTokensToTransfer計算出一共要支出的幣的總量,tokens是最終給每個地址轉賬的金額。
由于項目方給totalTokensToTransfer變量賦值時未進行溢出判斷,導致當tokens參數非常大時,totalTokensToTransfer變量進行數次計算后溢出為溢出值(攻擊者一般將溢出值控制在0-10),系統即認為本次轉賬總金額為溢出后的值(比如0,也就是轉賬金額為0),由此便繞過余額檢查的步驟繼續完成交易,但實際上其轉賬金額遠大于錢包所含金額。于是系統憑空轉(多)出巨額代幣,黑客將其在市場上拋售獲利。
今年6月份,安比實驗室(SECBIT)對以太坊上部署的合約進行的分析檢測,發現共有866個合約存在相同問題。
為什么會存在這些漏洞呢?
Bcsec安全團隊表示,這類漏洞本質是由于編程人員的疏忽造成的,之所以在以太坊ERC20中較大規模蔓延,是由于很多新上線的合約直接copy自一些合約模板,而未對其進行嚴格的安全評估,因此新項目如要使用應盡量確保其合約的安全性,才可以代表資產進行交易。
1.TMT觀察網遵循行業規范,任何轉載的稿件都會明確標注作者和來源;
2.TMT觀察網的原創文章,請轉載時務必注明文章作者和"來源:TMT觀察網",不尊重原創的行為TMT觀察網或將追究責任;
3.作者投稿可能會經TMT觀察網編輯修改或補充。