色婷婷综合在线,在线日韩欧美一区二区三区,欧美日韩中文字幕在线,一区国产视频,极品嫩模,h美女漫画网站,亚洲wuma

您的位置:首頁 >公司 >

【火線視點(diǎn) 6】復(fù)盤 EOS 安全事件及再議區(qū)塊鏈安全

2018-06-02 19:58:26    來源:洞察網(wǎng)

  本文由火幣區(qū)塊鏈研究院出品,作者:袁煜明,胡智威,李慧。

2018年5月29日,360公布了其發(fā)現(xiàn)EOSIO嚴(yán)重漏洞的消息。此新聞及后續(xù)一系列相關(guān)跟進(jìn)事件迅速成為區(qū)塊鏈領(lǐng)域內(nèi)的輿論熱點(diǎn)。隨著越來越多的聲音與內(nèi)容出現(xiàn),各界對(duì)此次事件也逐漸有了更為清晰的認(rèn)識(shí)。在此有必要從技術(shù)角度對(duì)此次事件進(jìn)行客觀復(fù)盤與分析,并再次對(duì)區(qū)塊鏈安全進(jìn)行探討。

事件回顧

根據(jù)目前網(wǎng)上公開資料,包括博客、代碼記錄等,我們對(duì)本次安全事件的技術(shù)過程進(jìn)行一個(gè)簡(jiǎn)要梳理:

北京時(shí)間5月28日 360公司Vulcan(伏爾甘)團(tuán)隊(duì)聯(lián)系主導(dǎo)EOSIO開發(fā)的Daniel Larimer(即bytemaster,以下簡(jiǎn)稱BM)并報(bào)告了發(fā)現(xiàn)的高危安全漏洞情況

5月28日 BM在github的eos項(xiàng)目上新建了一個(gè)需要跟蹤的問題(Issue)。同天,該問題所描述的bug被修復(fù);該問題關(guān)閉

5月29日中午,360公司在其官方微信公眾號(hào)上公布了區(qū)塊鏈平臺(tái)EOSIO的高危安全漏洞的消息

同天晚些時(shí)候,360公司在其公司博客“奇虎360技術(shù)博客”上公布了該漏洞的細(xì)節(jié)內(nèi)容

技術(shù)分析

我們首先從奇虎360技術(shù)博客的報(bào)告“EOS節(jié)點(diǎn)遠(yuǎn)程代碼執(zhí)行漏洞 — EOS智能合約WASM函數(shù)表數(shù)組越界”[1]中來查看本次漏洞的詳細(xì)技術(shù)內(nèi)容。

根據(jù)報(bào)告所述,在修復(fù)該漏洞的提交

ea89dce21d13d41a22b3512a27be97b4be9df755之前的代碼版本上,我們可以看到在libraries/chain/webassembly/binaryen.cpp文件的76行,有assert用于檢查變量取值情況。但assert一般僅適用于程序編譯構(gòu)建的Debug模式,對(duì)于正式發(fā)布的Release模式通常并不起作用,因此相當(dāng)于沒有做檢查,導(dǎo)致78行對(duì)數(shù)組的訪問存在隱患。

因此在發(fā)現(xiàn)該漏洞后,開發(fā)團(tuán)隊(duì)已將assert改為可正常調(diào)用的名為FC_ASSERT的宏定義。

知道了問題所在后,我們?cè)賮砜匆幌戮帉慐OSIO所使用的C++程序的內(nèi)存結(jié)構(gòu)及語言特性。

C++程序的內(nèi)存區(qū)域包括棧區(qū)、堆區(qū)、自由存儲(chǔ)區(qū)、靜態(tài)全局存儲(chǔ)區(qū)、常量區(qū)及代碼區(qū)等。每個(gè)區(qū)域均有其獨(dú)特的作用。同時(shí),C/C++允許程序員通過指針等方式,對(duì)內(nèi)存進(jìn)行極為自主的控制及使用,并不強(qiáng)制檢查數(shù)組邊界等條件。因?yàn)榘▋?nèi)存管理在內(nèi)的種種極為靈活、可控制底層的語言特性,C/C++憑借其高性能被廣泛使用于對(duì)程序執(zhí)行速度有嚴(yán)格要求的工業(yè)界。但也正是因?yàn)檫@種靈活性,C/C++程序常會(huì)因?yàn)閮?nèi)存管理的復(fù)雜性而出現(xiàn)內(nèi)存泄露、宕機(jī)或內(nèi)存越界等問題。這點(diǎn)在大型工程上尤其常見。

圖 1 內(nèi)存問題引起程序崩潰示例

原因在于,C++程序指針訪問到相應(yīng)內(nèi)存區(qū)域,即有可能對(duì)其進(jìn)行相應(yīng)的操作,所以如果控制不當(dāng),訪問到原本的“界限”之外,就會(huì)產(chǎn)生越界的問題:如果訪問到數(shù)據(jù)區(qū)域,則可能會(huì)引起程序崩潰或讀取、修改到原本不應(yīng)訪問到的信息;如果訪問到代碼區(qū)域,則可能注入或改變?cè)姓4a。這就是緩沖區(qū)溢出的基本原理。

作為計(jì)算機(jī)及互聯(lián)網(wǎng)上十分常見且潛在影響巨大的攻擊手段,利用緩沖區(qū)溢出進(jìn)行攻擊有記錄的最早一次是發(fā)生在1988年的Morris蠕蟲攻擊。據(jù)估計(jì),它一經(jīng)出現(xiàn)便影響了互聯(lián)網(wǎng)上10%的計(jì)算機(jī),造成約10萬至100萬美元的損失。從其首次出現(xiàn)到今天的30年間,很多著名的攻擊事件都采取了緩沖區(qū)溢出的方式進(jìn)行,其影響也隨著互聯(lián)網(wǎng)的發(fā)展而擴(kuò)大。

回到本次EOSIO的這個(gè)漏洞,根據(jù)360的報(bào)告我們可以看到:當(dāng)檢查代碼失效后,如果offset變量被任意設(shè)置一個(gè)地址,例如0xfffffff,則會(huì)引起segmentation fault的錯(cuò)誤而導(dǎo)致程序崩潰;而如果對(duì)合約進(jìn)行精心設(shè)計(jì),攻擊者可通過對(duì)內(nèi)存越界寫入的方式來執(zhí)行惡意代碼,正如360報(bào)告中附加的視頻所示。

同時(shí),如果能將風(fēng)險(xiǎn)控制在單機(jī)范圍內(nèi),那對(duì)全局來說影響還是相對(duì)可接受的。但正是由于惡意代碼可以是一個(gè)區(qū)塊鏈上的合約,因此EOSIO將合約打包成區(qū)塊后會(huì)在整個(gè)網(wǎng)絡(luò)中傳播,使得所有節(jié)點(diǎn)均可被此惡意代碼控制,即整個(gè)網(wǎng)絡(luò)都受到致命影響。

構(gòu)建區(qū)塊鏈安全生態(tài)

從本次漏洞結(jié)合近期以太坊ERC20漏洞等安全事件,我們應(yīng)更加認(rèn)識(shí)到《【火線視點(diǎn)3】從ERC20漏洞事件看區(qū)塊鏈安全生態(tài)建設(shè)》中的觀點(diǎn):區(qū)塊鏈安全生態(tài)不僅僅需要項(xiàng)目團(tuán)隊(duì)、開發(fā)人員,更需要多方的通力合作。下面主要從項(xiàng)目團(tuán)隊(duì)內(nèi)控、項(xiàng)目生態(tài)激勵(lì)和投資者自我防范這三個(gè)方面去探討區(qū)塊鏈安全生態(tài)的建設(shè)。

1 完善代碼安全審查機(jī)制

回顧ERC20漏洞事件和EOSIO的緩沖區(qū)溢出事件,他們完全都可以通過有效的代碼安全審查機(jī)制來避免。以ERC20漏洞為例,經(jīng)過核查,使用ERC20協(xié)議的項(xiàng)目竟然有20余個(gè)都存在類似的問題。

瞬息萬變的幣圈確實(shí)發(fā)展的太快,每一個(gè)人都是飛奔著前進(jìn),都趕著寫白皮書、趕著募資、趕著上項(xiàng)目,自然而然就很少有人沉下心來好好做測(cè)試,好好做安全審查,導(dǎo)致漏洞頻出、安全事件頻發(fā)。

區(qū)塊鏈作為一個(gè)分布式的去中心化系統(tǒng),代碼一旦部署將很難更新,需通過硬分叉或者軟分叉來對(duì)代碼進(jìn)行升級(jí),成本不可謂不高。THE DAO事件則直接將以太坊分裂成為ETH和ETC,是對(duì)以太坊生態(tài)的重大破壞。所以在項(xiàng)目發(fā)布之前,充足的測(cè)試和代碼審核變得十分關(guān)鍵和必要。比如多人代碼審核、內(nèi)部測(cè)評(píng)小組、外部專家評(píng)測(cè)等。

多人代碼審核

由于一個(gè)人的能力和認(rèn)知總是有限的,所以對(duì)于同一段代碼,不同的人將會(huì)發(fā)現(xiàn)不同的問題,多人代碼審核機(jī)制能使得代碼的BUG率和漏洞率大大降低。這種方式也是軟件行業(yè)降低錯(cuò)誤率最為通用和有效的方式之一。

內(nèi)部測(cè)評(píng)小組

項(xiàng)目組建立內(nèi)部安全測(cè)評(píng)小組,梳理業(yè)界常見的安全問題清單,并逐一對(duì)發(fā)布的項(xiàng)目進(jìn)行安全審計(jì),通過簡(jiǎn)單的梳理和測(cè)評(píng)便能將常見的基本漏洞一掃而空,大大增加了系統(tǒng)的可靠性。

外部專家評(píng)測(cè)

對(duì)于某些新型的,特殊性的漏洞,項(xiàng)目組可以借助于例如第三方評(píng)測(cè)機(jī)構(gòu)等外部安全專家的幫助進(jìn)行梳理和測(cè)評(píng),爭(zhēng)取在項(xiàng)目發(fā)布前將安全隱患降到最低程度。

2 發(fā)展白帽黑客激勵(lì)機(jī)制

世界無非兩極,一陰一陽、一黑一白、一正一邪,有黑客肆意破壞,就有白帽黑客維護(hù)世界正義。隨著各類數(shù)字資產(chǎn)的市值越來越高,黑客們從中套取的收益也越來越客觀,相比之下,白帽黑客們卻窮酸的多。

這種巨大的收入差導(dǎo)致越來越多人加入的黑客的陣營,而白帽黑客們則為數(shù)稀少。通過激勵(lì)白帽黑客來抑制或者是平衡黑客越來越肆無忌憚的破壞行為或許將成為一種有效的手段。

那么如何激勵(lì)白帽黑客們?yōu)槠脚_(tái)做出貢獻(xiàn)呢?我想主要可以從兩方面入手,一是物質(zhì)激勵(lì),二是精神激勵(lì)。

物質(zhì)激勵(lì)

對(duì)于發(fā)行通證的公鏈來說,最實(shí)在的物質(zhì)激勵(lì)自然就是通證。它既是區(qū)塊鏈平臺(tái)的價(jià)值載體,也是平臺(tái)生態(tài)治理的重要手段。比如COSMOS,為了鼓勵(lì)發(fā)現(xiàn)并及時(shí)報(bào)告缺陷,Cosmos Hub允許黑客通過ReportHackTx 交易來“邀功”,主要就是說明,“這個(gè)節(jié)點(diǎn)已被攻擊,請(qǐng)將獎(jiǎng)金發(fā)到這個(gè)地址”。黑客可以收到擊中資產(chǎn)的5%作為賞金。

除此之外我們也可以通過設(shè)立黑客獎(jiǎng)金池、黑客基金或者項(xiàng)目特別顧問等方式來激勵(lì)白帽黑客主動(dòng)挖掘漏洞,幫助平臺(tái)持久安全地運(yùn)行。

精神激勵(lì)

除了物質(zhì)獎(jiǎng)勵(lì),對(duì)于Hacker這一非常另類、有性格的群體來說,精神上的激勵(lì)或許是更持久有效的方式。對(duì)于每一個(gè)為平臺(tái)或者項(xiàng)目作出貢獻(xiàn)的黑客來說,項(xiàng)目組、基金會(huì)或者社區(qū)都應(yīng)將給與其相應(yīng)的榮譽(yù)獎(jiǎng)勵(lì)。可以是排行榜、貢獻(xiàn)值亦或是某種稀缺頭銜等等,使其不僅能被社區(qū)其它成員知曉,更能明顯區(qū)別于普通會(huì)員,增強(qiáng)其在社區(qū)的存在感、參與感和榮譽(yù)感。更可考慮用較為“極客”的方式進(jìn)行精神激勵(lì),例如將白帽黑客對(duì)平臺(tái)、社區(qū)的貢獻(xiàn)記錄在區(qū)塊鏈上,形成更有針對(duì)性的生態(tài)系統(tǒng)良性循環(huán)。

相關(guān)閱讀