區(qū)塊鏈每日解讀5星評價
2020-05-13 14:30:56
因為ERC20被發(fā)現(xiàn)存在溢出攻擊(BatchOverFlow)的可能
近期由于BEC以及SMT被黑客利用溢出攻擊(BatchOverFlow),利用整數(shù)溢出漏洞,可以憑空創(chuàng)造大量虛假的虛擬貨幣,這類被黑客創(chuàng)造的虛擬貨幣也可以裝入到交易所進(jìn)行交易,這也就導(dǎo)致了BEC價格幾乎歸零。
其中SMT項目錯誤的函數(shù)如下:
function transferProxy(address _from, address _to, uint256 _value,uint256 _feeSmt,uint8 _v,bytes32 _r, bytes32 _s) public transferAllowed(_from) returns (bool)
這個函數(shù)沒有進(jìn)行整數(shù)上溢出檢查。_feeSmt和value都是外部傳入的參數(shù)。由于定義為uint256(256位無符號整數(shù))
那么假設(shè)
_feeSmt = 8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
value = 7000000000000000000000000000000000000000000000000000000000000001
那么_feeSmt + _value = 0,直接溢出,將可以繞過代碼檢查,自行制造大量的虛擬貨幣。
由于擔(dān)心其他ERC20項目中也有類似的漏洞,所以交易所紛紛下架了ERC20項目代幣。讓各個項目對于自己的代碼進(jìn)行檢查,看看是否還有存在整數(shù)溢出的問題。
小猩猩1235星評價
2020-05-13 14:31:09
這兩天,在OKEx分別暫停了BEC和SMT交易和提現(xiàn)后,又暫停了所有以太坊ERC20代幣的充值功能。
另一家交易所火幣也是如此。
這個ERC20代幣是什么?為什么會有這么大的風(fēng)險?應(yīng)該怎么處理我們手里的資產(chǎn)?
1、ERC20 Token
現(xiàn)在交易所上大家炒的幣主要分為兩種,一種有自己的鏈,一種沒有,僅僅運行在以太坊等公鏈上。像比特幣和以太坊這樣的項目,都有自己的鏈,礦工挖的就是這種幣。再比如前兩天暴漲的比原鏈,昨天才有了自己的主網(wǎng),才能用礦機(jī)挖礦。而EOS,要等到6月份主網(wǎng)上線才能挖礦,這也是最近EOS超級節(jié)點競爭的原因,他們在爭奪挖礦權(quán)。
但是并不是每一種幣都會有自己的主網(wǎng),這是要根據(jù)每個token(也稱為通證或代幣)的使用功能和共識決定。有些token完全可以在以太坊或者其他公鏈上運行,不需要自己擁有主鏈。如果有些小項目發(fā)的token有自己主鏈的話,可能很容易被51%算力攻擊,反而運行在其他公鏈上會比較安全。
根據(jù)每種token不同的應(yīng)用場景,項目方會選擇不同的公鏈,比如以太坊、NEO、量子鏈等等。當(dāng)然最火的就是以太坊,絕大多數(shù)token就是發(fā)在以太坊上的,所以ICO基本都是用以太坊眾籌。其實發(fā)幣非常容易,之前網(wǎng)上的教程《5分鐘教你在以太坊上發(fā)行自己的代幣》,那些說的就是發(fā)行在以太坊上的ERC20 Token。發(fā)幣容易也就導(dǎo)致了門檻很低,誰都能發(fā)個幣,空氣幣層出也是由于這個原因。
最后說到ERC20代幣,ERC即是Ethereum Request for Comments的簡寫,直譯為以太坊征求意見,也可以說是以太坊開發(fā)者的協(xié)議提案。提案有很多版本,ERC20是最廣為人知的標(biāo)準(zhǔn)之一,也是現(xiàn)在很多ICO代幣使用的版本,誕生于2015年。ERC20簡單說是token的一種,也是一種協(xié)議。這里不過多討論技術(shù),就不把代碼搬上來了。
對代碼感興趣的可以打開下面鏈接https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md
之所以稱ERC20是代幣的一種,是因為這個協(xié)議里規(guī)定了幾個必須寫的函數(shù),這些函數(shù)定義了代幣總量,代幣轉(zhuǎn)賬方式等等。除了這個協(xié)議外,還有一個知名的ERC721代幣。既然有兩個不同的代幣協(xié)議,他們發(fā)的token也是不同的。簡單講,ERC721 token中每個token都是獨一無二的。最著名的就是以太貓這個游戲了,這個游戲就是使用的ERC721協(xié)議,因此每個以太貓都是獨一無二的token,也是這個游戲的玩法。
2、現(xiàn)在面臨什么問題?
這次以太坊智能合約上的安全漏洞叫做溢出攻擊,簡單說就是黑客發(fā)現(xiàn)了項目的代碼漏洞,自己創(chuàng)造了好多之前設(shè)定并不存在的幣。比如一個項目只發(fā)了10億個ERC20代幣,黑客卻用漏洞自己又弄出了5億個,他們把這些多出來的幣充到交易所上賣出,對這個項目可以說是毀滅性地打擊。
不過,以太坊ERC20的問題,和以太坊的構(gòu)架也有關(guān)系。以太坊使用的是賬戶模型,比特幣使用的是UTXO模型。解釋一下,并不存在比特幣這種幣,比特幣只是轉(zhuǎn)賬記錄,每個幣在轉(zhuǎn)賬時都能找到它的來源,不會憑空冒出來。但是以太坊的模式不是這樣,所以才可能出現(xiàn)這種問題。
如果主網(wǎng)上線后就會回到自己的鏈上運行,也就不會出現(xiàn)上述以太坊智能合約的問題。EOS現(xiàn)在就是發(fā)行在以太坊上的ERC20代幣,因為等到6月1日才會上線自己的主網(wǎng)。像EOS的主網(wǎng)映射過程就是先建立EOS主網(wǎng)錢包,再關(guān)聯(lián)上現(xiàn)在暫時放在以太坊上EOS代幣,然后等主網(wǎng)上線后就能直接將之前的ERC20代幣映射到EOS主網(wǎng)上。
但是并不是所有項目以后都會有自己的主鏈,像上面所說的,小項目很容易被51%算力攻擊。如果贊同以太坊的共識機(jī)制,而且以太坊也能滿足項目需求的話,完全不需要自己搞出主鏈來,發(fā)在公鏈上反而更安全。
3、我們要怎樣面對這種安全漏洞?
其實我們做不了什么,畢竟是項目方掌控著代碼?,F(xiàn)在的漏洞主要是“數(shù)據(jù)溢出”漏洞,黑客多搞出了很多代幣,然后向市場拋售導(dǎo)致幣價下跌。慶幸的是黑客不能轉(zhuǎn)走我們錢包里的幣,或者我們交易所賬戶里的幣。因此交易所要暫停ERC20代幣的充值,就是防止黑客將多搞出來的代幣充到交易所上交易,套現(xiàn)。
我們現(xiàn)在能做的就是等著項目方排查他們的代碼,保證不會再出現(xiàn)類似的行為。這樣也能看出來,哪些項目靠譜,哪些項目連代碼都不管了。