近年來,幣圈可謂是一波未平一波又起,接連不斷的黑客攻擊事件讓虛擬貨幣這個概念在一起被投資者重新審視。從2017年開始,黑客們就利用各種
近年來,“幣圈”可謂是一波未平一波又起,接連不斷的黑客攻擊事件讓虛擬貨幣這個概念在一起被投資者重新審視。從2017年開始,黑客們就利用各種虛擬貨幣的協議漏洞進行各種各樣的“盜竊”行為。給投資者們帶來了眾多煩惱,也給“幣圈”的前景籠罩上了一層陰霾。
今年4月22號,有黑客利用以太坊 ERC-20 智能合約中 BatchOverFlow 漏洞中數據溢出的漏洞攻擊了美鏈 BEC 的智能合約,從中盜取出57,896,044,618,658,100,000,000,000,000,000,000,000,000,000,000,000,000,000,000.792003956564819968 個BEC貨幣并大規模的想市場上拋售。導致該數字貨幣急劇貶值,價值幾近歸零,給BEC市場帶來了毀滅性的打擊。
BEC遭遇的毀滅性漏洞是怎么產生的?
我們來舉個例子說明: 有一個民風淳樸的國家,這個國家的數學發展的很緩慢,他們不懂得加減乘除,連兩位數的數字也沒有,在這個國家的數學知識里,只存在:、1、2、3、4、5、6、7、8、9。這9個數。
這個國家商店的面包一包也最多只賣9根。有一天這個商店舉行一個優惠活動,只要路過的人都可以進店憑身份證免費領取不超過9根的面包。有一個愛抖小機靈的人叫小黑,他看到這個活動就動了壞心眼。他去商店領取面包的時候,從1開始一根一根的拿,1根、2根、3根……當拿到第9根的時候,他還繼續拿,然后第10根的時候,商店的店員數不過來了,因為不知道9以上的數字,這個店員只能從1繼續數。于是就這么循環往復,小黑拿走了商店里的所有面包。
就像中國古話說的九九歸一。此時的一已經不再是單純的一了,是囊括了從一到九之后的新的以一這個概念表達出來的新狀態。
這次的BEC漏洞事件也是這個原因。也許很多人回想,天下哪兒有這么笨的人,但是對于程序來說,這個事情是可能的。我們來看黑客進攻的步驟。
眾所周知,第257行寫著amount=uint256(cnt)
uintx 類型的取值范圍是 0 到 2的x次方 -1
而在計算機語言中,這段代碼代表著最大取值范圍不能超過2的256-1次方,也就是2的255次方。當一個數值的次方大于255的時候,程序會自動把數值歸于0。注意!這個時候的0并不等于真的0。只是因為閾值溢出而表現為0;此時的0代表著是2的256次方。而代碼的第258行到259行,本來是對于該項數值的檢測。
黑客通過將量回歸到 0,攻擊者就可以繞過 258 行到 259 行的合理性檢測,使得 261 行的差值變得不再相關。
于是黑客就將代表著2的256次方數值的0再加上正常要取出的數值一起“偷”了出來。于是美鏈BEC便在頃刻土崩瓦加。
而截止至BEC事發過去12小時,網上爆出除了 BEC Token 之外,還有多達 12 項目 Token 的智能合約中存在 BatchOverFlow 整數溢出漏洞,黑客可以繼續利用這一漏洞轉賬生成「不存在」的虛擬貨幣并進行交易獲利。
就在兩天之后,火幣Pro公告,SMT項目方反饋今日凌晨發現其交易存在異常問題,經初步排查,SMT的以太坊智能合約存在漏洞。受此影響,火幣Pro現決定暫停所有幣種的充提幣業務。
在數字貨幣暴漲背后,曾有黑客曾表示,當前99%的黑客都盯上了這塊肥肉。他們集體作戰,信息收集、入侵潛伏、“黑箱”洗幣等形成一條完整產業鏈。
我們發現,黑客之所以能屢屢對數字貨幣造成危害,就是因為目前的以太坊智能合約還不完善,還存在漏洞。那么以太坊智能合約到底有什么用,它的存在對于數字貨幣來說到底意味著什么?
以太坊智能合約
智能合約是由尼克薩博提出的理念,幾乎與互聯網同齡。但是由于缺少可信的執行環境,智能合約并沒有被應用到實際產業中。自從比特幣誕生后,人們認識到比特幣的底層技術區塊鏈天生可以為智能合約提供可信的執行環境,以太坊首先實現了區塊鏈和智能合約的完整契合。
以太坊是內置有圖靈完備編程語言的區塊鏈,通過建立抽象的基礎層,使得任何人都能夠創建合約和去中心化應用,并在其中設立他們自由定義的所有權規則、交易方式和狀態轉換函數。建立一個代幣的主體框架只需要兩行代碼就可以實現,諸如貨幣和信譽系統等其他協議只需要不到20行代碼就可以實現。智能合約就像能在以太坊的平臺上創建的包含價值而且只有滿足某些條件才能打開的加密箱子,并且因為圖靈完備性、價值意識(value-awareness)、區塊鏈意識(blockchain-awareness)和記錄多狀態所增加的功能而比比特幣腳本所能提供的智能合約強大得多。
但是隨著數字貨幣的如雨后春筍般越來越多,而各個幣種之間的執行邏輯又各有些不同,導致智能合約面對的情況越來越復雜,于是人們就開始不斷地為智能合約進行修補。這就是ERC20協議標準的來源。
ERC20協議標準
代碼即法律(Code Is Law),一個程序的完成,無論執行多少次都會得到同樣的結果,除非有外界因素的干擾。在多人協作的過程中一定是要按照一個標準來進行分工,這樣才能最快的完成整體任務,不至于出錯。
對于接觸過數字貨幣的投資者來說,以太坊是一個分布式的智能合約平臺,可以分發代幣(Token)。目前以太坊上有24351個代幣的智能合約。
市面上的代幣數不勝數,如果這么多代幣的標準不統一,對于其他人來查看代碼是相當痛苦的,眾籌的人也就沒有辦法來檢查代幣分發的是否合理,也沒有辦法做到多種錢包的兼容。
所以才推出了一種以太坊代幣的標準:ERC20標準。
什么是ERC20標準
ERC-20 標準是在2015年11月份推出的,使用這種規則的代幣,表現出一種通用的和可預測的方式。簡單地說,任何 ERC-20 代幣都能立即兼容以太坊錢包(幾乎所有支持以太幣的錢包,包括Jaxx、MEW、imToken等,也支持 erc-20的代幣),由于交易所已經知道這些代幣是如何操作的,它們可以很容易地整合這些代幣。這就意味著,在很多情況下,這些代幣都是可以立即進行交易的。
ERC20 讓以太坊區塊鏈上的其他智能合約和去中心化應用之間無縫交互。一些具有部分但非所有ERC20標準功能的代幣被認為是部分 ERC20兼容,這還要視其具體缺失的功能而定,但總體是它們仍然很容易與外部交互。
因此ERC-20協議是目前數字貨幣交易體系中較為主流的一種協議體系。但是該協議也存在不完善的地方。正如同清掃房間,總會有沒有看到的地方一樣,智能合約的協議只能不斷地根據漏洞來改進,卻不能一勞永逸的解決所有漏洞。黑客們也正是利用這些漏洞來實現自己的目的。
如何將漏洞帶來的數字貨幣危害降到最低
這次美鏈BEC的風波,究其原因,是因為程序開發者的疏忽,導致程序中存在有機可趁的漏洞。讓黑客鉆了空子。程序開發者在所有的代碼段都加入了SafeMAth的憑證,卻單單在數值這一行沒有加。
為此,我們專門采訪了中科軟科技股份有限公司的李冰冰工程師,他說:“目前的算力只要達不到只要量子計算機的算力,妄想暴力破解比特幣是基本沒啥可能的;不過,這是在算法程序沒有缺陷的情況下。美鏈BEC的事件說明,往往造成安全的最大威脅不是來自外部,而是內部。美鏈BEC這次的漏洞,其實一個普通的測試組都可以測出這樣的問題。究竟是開發的疏忽,當局者迷,還是這又是個龐氏騙局;故意留給內行的,然后收攏一波資金呢?或許只有開發者自己知道了”此次美鏈BEC事件,到底真實的原因是什么我們也許不得而知,但就技術而言,正是因為內部程序開發者的失誤導致的。這也作為一個警鐘來告訴其他數字貨幣的運營公司。為了保證自己的貨幣不受到黑客的傷害,應該切實的保證內部的開發、運營過程不出問題。
而對于廣大用戶來說,除了自身加強自我安全意識意外,也要有一雙火眼金睛,來分辨出哪些數字貨幣是安全的,值得投資的,哪些是有風險的。只有這樣,才能讓自己的資產受到最小的損失。