新聞中心
騰訊上半年的報(bào)告統(tǒng)計(jì),因區(qū)塊鏈自身問題導(dǎo)致的損失達(dá)到12.5億,其中智能合約的問題占了較大的比重。

創(chuàng)新互聯(lián)公司是由多位在大型網(wǎng)絡(luò)公司、廣告設(shè)計(jì)公司的優(yōu)秀設(shè)計(jì)人員和策劃人員組成的一個(gè)具有豐富經(jīng)驗(yàn)的團(tuán)隊(duì),其中包括網(wǎng)站策劃、網(wǎng)頁美工、網(wǎng)站程序員、網(wǎng)頁設(shè)計(jì)師、平面廣告設(shè)計(jì)師、網(wǎng)絡(luò)營銷人員及形象策劃。承接:成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、網(wǎng)站改版、網(wǎng)頁設(shè)計(jì)制作、網(wǎng)站建設(shè)與維護(hù)、網(wǎng)絡(luò)推廣、數(shù)據(jù)庫開發(fā),以高性價(jià)比制作企業(yè)網(wǎng)站、行業(yè)門戶平臺(tái)等全方位的服務(wù)。
9月13日晚,Armors Labs研究院院長劉鵬作為主講嘉賓參與到獵云財(cái)經(jīng)空中課堂第十四期的分享當(dāng)中,本期課題:智能合約安全問題的分析與警示。
以下為分享實(shí)錄(經(jīng)編輯刪改):
主持人好,諸位幣圈兒的兄弟姐妹們,大家晚上好。歡迎大家參與獵云財(cái)經(jīng)的分享會(huì),我是劉鵬,來自Armors Labs研究院。
Armors Labs作為全球頂級的區(qū)塊鏈安全實(shí)驗(yàn)室,從智能合約全生態(tài)平臺(tái)延展到整體的區(qū)塊鏈安全平臺(tái),致力于打造一整套完整的智能合約防御、監(jiān)測、故障阻斷以及升級體系,實(shí)驗(yàn)室提供開源的智能合約引擎,并逐步適配所有流行的底層公有鏈。
01、區(qū)塊鏈安全
區(qū)塊鏈安全大致涉及到三個(gè)大的方面。
第一個(gè),區(qū)塊鏈自身機(jī)制,這里包含了智能合約、51%攻擊、雙花攻擊等。
第二個(gè),區(qū)塊鏈生態(tài),包括交易所被盜、拒絕服務(wù)攻擊、交易所被釣魚等。
第三個(gè),使用安全,包括賬號失竊、用戶被釣魚、私鑰泄露等。
我們今天要討論的重點(diǎn)內(nèi)容是區(qū)塊鏈自身機(jī)制中智能合約安全的相關(guān)話題。
02、區(qū)塊鏈發(fā)展的路徑
區(qū)塊鏈的發(fā)展劃分為三個(gè)時(shí)代,分別定義為區(qū)塊鏈1.0、2.0和3.0。
2.0時(shí)代的典型代表是以太坊,我們現(xiàn)在正處于2.0時(shí)代,大家都在以數(shù)字貨幣為出發(fā)點(diǎn),研究區(qū)塊鏈的發(fā)展,尋找具體業(yè)務(wù)的落地方式。
3.0時(shí)代的定義叫可編程社會(huì),這個(gè)時(shí)代將是區(qū)塊鏈真正落地的時(shí)代,我們目前就是在向3.0時(shí)代大步邁進(jìn)。
鏈塔數(shù)據(jù)BlockData發(fā)布了《2018年8月以太坊DApp數(shù)據(jù)分析報(bào)告》,報(bào)告顯示,以太坊上的DApp數(shù)量多達(dá)775個(gè),累計(jì)交易筆數(shù)多達(dá)3億,累計(jì)交易金額超過59億ETH。
隨著越來越多的Dapp出現(xiàn),生態(tài)的逐漸發(fā)展,區(qū)塊鏈將會(huì)真正進(jìn)入到高速發(fā)展期。
03、DAPP與智能合約
智能合約是部署在區(qū)塊鏈上的一段代碼,目前所有的Dapp都需要通過智能合約來實(shí)現(xiàn),像發(fā)行數(shù)字貨幣、投票等功能都離不開智能合約。
由于智能合約被部署到公鏈上以后,難以被修改,所以才具有了一定的公信力。
現(xiàn)在的智能合約大部分都與數(shù)字幣有關(guān),因其對應(yīng)的市場價(jià)值非常龐大,成為了攻擊者眼中的蛋糕。
騰訊上半年的報(bào)告統(tǒng)計(jì),因區(qū)塊鏈自身問題導(dǎo)致的損失達(dá)到12.5億,其中智能合約的問題占了較大的比重。
04、智能合約問題導(dǎo)致區(qū)塊鏈安全事件頻發(fā)
FOMO3D是一款主要基于以太坊智能合約開發(fā)的區(qū)塊鏈游戲,這款游戲包含了閃拍、分紅機(jī)制、戰(zhàn)隊(duì)功能、邀請好友等功能,整體看起來還是比較全面的一款博弈類游戲。
FOMO3D游戲中的隨機(jī)糖果被攻擊者大量獲取,攻擊者通過攻擊合約生成的臨時(shí)合約不斷對FOMO3D的主合約進(jìn)行攻擊,這是攻擊者利用智能合約的隨機(jī)數(shù)漏洞發(fā)起攻擊的一個(gè)典型代表。
由于FOMO3D的源代碼是公開的,在合約中可以看到,產(chǎn)生隨機(jī)數(shù)的種子是通過當(dāng)前塊信息和msg.sender一起計(jì)算出來的,攻擊者可以在攻擊之前預(yù)先計(jì)算出結(jié)果,這樣就能增大自己中獎(jiǎng)的概率,從而達(dá)到少投入、多獲益的目的。
另外一個(gè)是GOD.GAME被盜事件,2018年8月22日,GOD.GAME官方發(fā)布消息,因合約遭到攻擊,所有投注的ETH被盜走。
這個(gè)游戲被攻擊的原因與FOMO3D不同。
FOMO3D可以認(rèn)為是攻擊者利用了以太坊的規(guī)則進(jìn)行合理的操作,而GOD.GAME完全就是人為原因造成的了。
通過代碼分析發(fā)現(xiàn)GOD.GAME是由于類型轉(zhuǎn)換操作不當(dāng),導(dǎo)致dividends異常增加,攻擊者通過調(diào)用reinvest方法購買大量token,最后賣出token,獲利離場。
這是典型的由于智能合約代碼有漏洞導(dǎo)致的合約被攻擊事件。該游戲造成的損失比較小,有200多ETH。
對于有交易屬性的游戲合約,安全漏洞出現(xiàn)的情況非常普遍,除了類型轉(zhuǎn)換漏洞,還有可能有存在后門的情況。投資者在參與的時(shí)候一定要謹(jǐn)慎,投資有風(fēng)險(xiǎn),出手需謹(jǐn)慎。
另一種常見攻擊叫溢出漏洞攻擊。
溢出漏洞是指當(dāng)要表示的數(shù)據(jù)超出計(jì)算機(jī)所使用數(shù)據(jù)的表示范圍時(shí),產(chǎn)生的數(shù)據(jù)的溢出。
我們用一個(gè)比較通俗的例子解釋一下溢出漏洞。上圖的這個(gè)算盤,很老的物件,大概民國時(shí)期的,叫5檔算盤,這個(gè)算盤能表示的最大數(shù)字是99999。
99999是這個(gè)算盤的極限了,思考一下,當(dāng)我們在99999的時(shí)候再加1會(huì)怎么樣呢?
結(jié)果就是所有的算珠恢復(fù)原位,只能表示0了。
多出來的一位去哪兒了呢?多出來的一位溢出了。這個(gè)漏洞造成的第一個(gè)危險(xiǎn)就是“歸零”,它可以讓一個(gè)賬戶的代幣瞬間變成或者是極小的一個(gè)數(shù)字。
而且當(dāng)你反查交易記錄時(shí),一切都是正常的。攻擊者利用這個(gè)漏洞,使判斷條件成立。
曾經(jīng)BEC批量轉(zhuǎn)賬漏洞事件就是利用了沒有使用安全函數(shù)計(jì)算乘法,導(dǎo)致計(jì)算機(jī)結(jié)果超出范圍造成溢出事件,使判斷條件成立,然后就可以進(jìn)行大量的轉(zhuǎn)賬了,最終BEC蒸發(fā)了60多億的市值,不僅僅是給投資者,也給項(xiàng)目方造成了極大的損失。
圖中紅框的地方是我們?yōu)榱吮苊庖绯雎┒炊褂玫陌踩珨?shù)學(xué)函數(shù)。
在這種寫法里,我們除了做正向計(jì)算外,還要做一次逆向計(jì)算,以保證運(yùn)算結(jié)果可逆,這樣的計(jì)算結(jié)果才是正確的。
也就是說做一個(gè)加法,我們計(jì)算a + b = c,安全函數(shù)在計(jì)算完之后一定要再計(jì)算一遍c >= a,這個(gè)結(jié)果成立,我們會(huì)認(rèn)為這是一次有效的計(jì)算。雖然這樣增加了計(jì)算量,但是由于智能合約部署以后不可變更并且不可升級的特性,我們犧牲一點(diǎn)點(diǎn)效率,換來的是安全正確的計(jì)算結(jié)果,也是值得的。
所以在投資的時(shí)候一定要找開源代碼的來投,開源代碼一定要檢查是不是用了安全函數(shù),但是要注意,有了安全函數(shù),不代表用了安全函數(shù)。
前不久有這樣一個(gè)案例合約,項(xiàng)目方定義了安全函數(shù),但是只有個(gè)別地方使用了。Transfer的操作里面沒有使用,這個(gè)時(shí)候我們給項(xiàng)目方提供了風(fēng)險(xiǎn)提示,項(xiàng)目方根據(jù)我們的指導(dǎo),逐一將安全函數(shù)應(yīng)用到位,最終才通過審核。
對于投資者來說,我們給出幾點(diǎn)建議。
第一,合約沒有開源的產(chǎn)品不要碰,風(fēng)險(xiǎn)太大;
第二,沒有經(jīng)過安全機(jī)構(gòu)審計(jì)的產(chǎn)品不要碰,可能存在潛在問題;
第三,投資風(fēng)險(xiǎn),要謹(jǐn)慎操作,不要貪心。
Armors Labs為了幫助項(xiàng)目方規(guī)避智能合約中的問題,提供了基于以太坊的開源標(biāo)準(zhǔn)庫Armors Solidity和基于EOS的開源標(biāo)準(zhǔn)庫Armors EOSCpp。這兩個(gè)標(biāo)準(zhǔn)庫可以幫助項(xiàng)目方在以太坊和EOS上快速開發(fā)自己的代幣合約。使用標(biāo)準(zhǔn)庫的代碼,可以降低合約出問題的概率。在一定程度上,保障合約的安全。
我今天要分享的內(nèi)容,就到這里,謝謝大家。
精彩問答:
Q1:劉老師,以太坊在2016年的時(shí)候,被The DAO攻擊,黑客盜取350萬個(gè)以太幣,結(jié)果是硬分叉成ETH和ETC,再結(jié)合現(xiàn)在的以太坊瀑布行情,以太坊為代表的智能合約設(shè)計(jì)是不是存在漏洞?區(qū)塊鏈的網(wǎng)絡(luò)是開放的,理論上無法阻止更多的計(jì)算機(jī)資源成為節(jié)點(diǎn),若控制大部分計(jì)算機(jī)資源,就能重改賬本,實(shí)現(xiàn)51%雙花攻擊。
劉鵬:這個(gè)世界沒有完美的系統(tǒng),51%的雙花攻擊也早就成現(xiàn)過?,F(xiàn)在大量的算力被各大礦場占據(jù),個(gè)人想掌握夠大的算力不實(shí)際。雙花攻擊本身是底鏈的安全問題,而智能合約的安全問題和它是兩種情況,不能一起討論。智能合約出問題,主要是項(xiàng)目方的開發(fā)團(tuán)隊(duì)失誤造成的。這種情況,通過測試和安全審計(jì)可以很好地降低發(fā)生問題的可能。而51%是底鏈本身的機(jī)制造成的。隨著行業(yè)的發(fā)展,會(huì)有新的算法出現(xiàn),進(jìn)一步的優(yōu)化這個(gè)問題。
Q2:劉老師,區(qū)塊鏈3.0是什么現(xiàn)在還不是十分確定,但終歸會(huì)出來。等到3.0落地的時(shí)候,基于以太坊上的2.0會(huì)怎么演變?消亡嗎?那伴隨的以太坊價(jià)格會(huì)不會(huì)非常低?
劉鵬:我認(rèn)為3.0時(shí)代是一個(gè)百花齊放的時(shí)代,不同的公鏈出現(xiàn)服務(wù)于不同的行業(yè)。以太坊上的2.0形態(tài)不會(huì)消亡,因?yàn)橐蕴槐旧硪苍谶M(jìn)化成長,開發(fā)團(tuán)隊(duì)會(huì)一直努力的讓以太坊成長下去,適應(yīng)3.0時(shí)代的到來。行業(yè)型的公鏈具有垂直性,以太坊更具有普遍性,所以以太坊未來依舊很有發(fā)展。至于價(jià)格方面,影響因素太多,我猜不出來。
標(biāo)題名稱:智能合約問題致區(qū)塊鏈安全事件頻發(fā)
本文URL:http://m.fisionsoft.com.cn/article/dpssgig.html


咨詢
建站咨詢
