0
雷鋒網(wǎng)編者按:經(jīng)常主打安全概念的區(qū)塊鏈到底是不是安全的?作為多年研究區(qū)塊鏈的專家,如何看待頻出的安全事件?這背后的原因有哪些?
在 ISC2018上,由眾享比特主辦的區(qū)塊鏈與安全論壇中,來自中科院的博士趙赫就結(jié)合近年來眾多著名的區(qū)塊鏈安全事件來剖析背后的原因。趙赫本人不僅從事區(qū)塊鏈的學(xué)術(shù)研究,同時也深耕行業(yè),目前是中科智鏈的聯(lián)合創(chuàng)始人,他當(dāng)天的演講是那場分論壇中反響最大的之一,現(xiàn)將其整理,以饗讀者。
以下為趙赫(鐘隱)在ISC2018區(qū)塊鏈與安全論壇上的演講,雷鋒網(wǎng)編輯整理。
首先自我介紹一下,我是來自中科院的一名科研人員,從2013年開始就進(jìn)入?yún)^(qū)塊鏈和加密數(shù)字貨幣領(lǐng)域。
直接切入正題。為什么很多人都說區(qū)塊鏈技術(shù)很安全,屬于一種數(shù)據(jù)安全保護(hù),或者軟件系統(tǒng)安全架構(gòu)的一種技術(shù)。
可能許多人都已經(jīng)聽說過了,包括像數(shù)據(jù)公開透明、記錄不可篡改,還有經(jīng)常說的分布式共識,相信代碼,相信數(shù)學(xué),相信組織,今天很多老師和同學(xué)都已經(jīng)分享過了。
我們重點(diǎn)還是講講它不安全的地方。為什么我們要說區(qū)塊鏈還不是很安全?
實(shí)際上就是區(qū)塊鏈的現(xiàn)狀導(dǎo)致的。區(qū)塊鏈的現(xiàn)狀等于黑客的提款機(jī),很容易變現(xiàn),前面的老師也說過,基本跟錢是一回事,而且很難追蹤。我們把區(qū)塊鏈里面的各種攻擊,各種漏洞的形態(tài)也分成了三個大類,與大家也探討一下,分享一下,最后再給出我們的建議或者最佳實(shí)踐的一些內(nèi)容。
首先,第一個是應(yīng)用層的攻擊,主要是講錢包合乎智能合約,像這兩個范圍內(nèi)的攻擊手段。
第二個是和區(qū)塊鏈相關(guān)的交易所和在線服務(wù)提供商。
第三種是特別針對于區(qū)塊鏈本身系統(tǒng)里面的攻擊手段。比如說共識算法、加密學(xué)的基礎(chǔ)、P2P網(wǎng)絡(luò)等等內(nèi)容。
第一部分,應(yīng)用側(cè)的攻擊,這個可能是爆發(fā)最多的,對于普通用戶來說是最容易體會到,有一種很強(qiáng)烈的威脅感存在。這個幣存在哪好呢?有可能存著存著就丟了。
這是以太坊非常流行的一個錢包,攻擊的方式非常多,比如說被域名劫持,因?yàn)樗且粋€在線的情況,在網(wǎng)站上訪問了之后,輸入私鑰就可以將以太幣或者以太坊上面的Token都可以收發(fā),很方便,但是黑客也就抓住了這個方便,把安全也就很容易把幣轉(zhuǎn)到他手里。比如釣魚事件,現(xiàn)在有統(tǒng)計(jì),統(tǒng)計(jì)了5000多種攻擊,同時有1000多種都是針對于在線錢包的攻擊。
第二種類型也是最古老的攻擊手段,就是本地錢包地址替換的情況。大家可能聽說過2014年好萊塢艷照門的事件,黑客把很多好萊塢的私密照片發(fā)到了網(wǎng)上,最后留了一個地址,希望大家給他打賞,結(jié)果這個地方出了一個問題,很多人把自己的地址給換了,最后沒得到多少幣。對于用戶來說,我們這里看到代碼邏輯非常簡單,直接把內(nèi)存里面監(jiān)測到,把錢包直接給換掉。
最新的360安全衛(wèi)士已經(jīng)增加了預(yù)警功能,這個值得點(diǎn)贊,如果發(fā)現(xiàn)錢包的地址被換了會提示,黑客會不停的收到幣。比較普遍的方式是針對手機(jī)郵箱的,是基于社會工程學(xué)的一種東西,2016年年底的時候,國內(nèi)的區(qū)塊鏈大V在手機(jī)上被黑了,當(dāng)時不僅自己損失了一大筆錢,而且造成了市場劇烈的振蕩。智能合約的攻擊事件我就不多說了。
我們再講講第二部分,系統(tǒng)層面的攻擊。比如交易所的攻破,這個聽說的也比較多,怎么比特幣又被黑了,比特幣又被偷了,比特幣本身沒錯,是交易所被黑了。第二種比較大的類型是監(jiān)守自盜,內(nèi)鬼做案的事情,國內(nèi)也出現(xiàn)過,應(yīng)該是2014年的時候,如果進(jìn)入這個圈子比較早的同學(xué)應(yīng)該知道有一個比特幣存錢罐,存一個比特幣一年給你1.1個還是1.2個,過了一段時間存了幾千個幣之后跑了。第三種是針對于區(qū)塊鏈底層BUG被利用的攻擊。門頭溝的盜幣,監(jiān)守自盜,也有一小部分被人利用了比特幣交易延展性的攻擊,偷了幾千個比特幣。
我們再看第二類,針對非交易所的,是一些在線服務(wù)商的安全事故,這樣類型的也非常多。在去年的一個ICO的項(xiàng)目被攻擊的原理是,服務(wù)器上有一個網(wǎng)站,很多程序員都知道,結(jié)果沒有打好補(bǔ)丁,被人找到了一個漏洞,上傳了木馬,拿到服務(wù)器權(quán)限之后,把里面的幣全都給轉(zhuǎn)走了。
我想多說一說這一塊。很多人覺得區(qū)塊鏈?zhǔn)谴a寫好就OK了,人的因素攻擊還是蠻嚴(yán)重的隱患。BTP是硅谷的一個名企,屬于支付商。如果你在網(wǎng)上用比特幣買東西,比如在國外海淘付款,有可能你用的支付就是他們提供的。他們的首席財(cái)政官有一天收到一個郵件,這個郵件是黑客給他發(fā)的,他當(dāng)然不知道。他說我們是一個幣圈人或者鏈圈的一個媒體,需要提供一個答案,他就真的點(diǎn)了郵件里面的鏈接,沒有這么簡單,點(diǎn)了鏈接之后讓他輸一個帳號密碼。輸進(jìn)去之后黑客拿到了郵箱的登陸帳號。拿到了郵箱登陸帳號,黑客很雞賊,先去學(xué)習(xí),先學(xué)習(xí)郵箱里的所有軟件,發(fā)郵件是什么樣的內(nèi)容,有什么規(guī)定,掌握完了之后黑客模仿CFO的身份給CEO發(fā)了一個郵件,我們現(xiàn)在有一個大客戶,用什么緣故要轉(zhuǎn)100個比特幣,我已經(jīng)檢查過了沒有什么問題,請您批示一下。沒有多想就給他批準(zhǔn)了,黑客拿到這個幣之后,一而再在二三偷了三次,偷了一共5個億。這個是針對人的攻擊。最后BTP找保險公司索賠了,但是沒有獲得賠償。
第三種是針對云平臺或者云服務(wù)器的攻擊,這也是早前發(fā)生過的一個案例。國外有一個云平臺,類似阿里云、騰訊云,當(dāng)時國際上也有很多礦池的云平臺服務(wù),當(dāng)時它的管理權(quán)限被人獲取了,有好幾個比較早的創(chuàng)業(yè)企業(yè)被偷了2萬多個比特幣。
我們重點(diǎn)講一講第三部分,很多人覺得這個技術(shù)像比特幣,很多年沒有出過大的安全問題,所以這個數(shù)字貨幣是非常可信的。其實(shí)這個數(shù)字不是特別嚴(yán)謹(jǐn),不是沒有出現(xiàn)過,而且出現(xiàn)過不僅一次,各種因素化險為夷了。第一個案例,德國的一個碼農(nóng),發(fā)現(xiàn)比特幣的腳本程序里面有一處潛在的破壞力極強(qiáng)的BUG,這個BUG基本內(nèi)容是,右上角是原始代碼的邏輯,case,黑客利用BUG可以調(diào)用語句,使得可以用之前錢包里面的比特幣。如果我能花你錢包里的錢,這個錢還值錢嗎?
這個BUG最早的時候是沒有被公開的,這個程序員發(fā)了一個郵件給比特幣的創(chuàng)始人,在郵件里講,對于不知道BUG的人,千萬別講BUG的名字,如果你是很熟悉的人,你一聽就知道到底怎么調(diào)用這個BUG,你可以想想當(dāng)時的影響到底有多大。
這個BUG沒有被公開,悄悄被修復(fù)。悄悄的來,悄悄的我又走了,這個BUG后面的比特幣升級其它的內(nèi)容,就是常規(guī)性的內(nèi)容更新的時候,把問題給悄悄的修復(fù)了,修復(fù)完之后在所有的節(jié)點(diǎn),大部分都更新了之后才被公之于眾。所以這個程序員也是比特幣或者區(qū)塊鏈歷史上最鮮為人知的大救星,他第一次救了比特幣。也有一種說法,因?yàn)樗约阂渤钟斜容^多的比特幣,他不想自己的幣貶值,所以他寫了這個郵件。這也是加密經(jīng)濟(jì)學(xué)里面的角度考慮。
比特幣天量刷幣漏洞,比特幣誕生半年到一年的時候,僅過了一個月出現(xiàn)了第二個BUG,是美國的一個碼農(nóng)程序員(Jeff),他發(fā)現(xiàn)比特幣的區(qū)塊鏈里面7400多個區(qū)塊有一個很異常的交易,有三個收款地址,有兩個收了900多億比特幣,一共是1800多億個。知道比特幣的同學(xué)都知道,在求和的這個邏輯里面,有一個求和溢出,當(dāng)時是沒有被處理的。發(fā)現(xiàn)這個BUG之后,這個時候比特幣已經(jīng)在運(yùn)營當(dāng)中了,而且是比較嚴(yán)重的BUG,結(jié)果社區(qū)表現(xiàn)出來比較強(qiáng)的能力。開發(fā)者出了修復(fù)BUG的版本之后,號召大家趕緊在Node的版本上去挖礦,哪一個鏈最長,才是最終被認(rèn)可的鏈,結(jié)果帶有補(bǔ)丁版本的區(qū)塊鏈的程度最后趕上并且超越了原來有BUG的這個鏈,最終才化險為夷。
說完核心代碼的一些漏洞之后,我們來聊一聊共識機(jī)制的問題。先講一個,大家可能都知道,51%攻擊的問題,現(xiàn)在發(fā)現(xiàn)它是現(xiàn)實(shí)的存在,原來以為是理論的存在。我們提出一種方案,他可以避免雙花。通過什么呢?通過PUW,是有前提的。惡意用戶不能超過50%。比特幣的歷史上曾經(jīng)有過這種擔(dān)憂,2014年的時候有一個礦池,不停的增長,幾乎已經(jīng)達(dá)到甚至要超過一半了,結(jié)果就說大家別在我這兒挖了,我這兒已經(jīng)變成一個中心化的礦池了,我要提高手續(xù)費(fèi)了,后面慢慢也就沒有出現(xiàn)51%攻擊的隱患。
現(xiàn)在有很多詬病說中國的幾家礦池聯(lián)合起來也是可以完成51%攻擊的,這也是理論上的可能。但是比特幣沒有真正被51%攻擊成功過。有一個比方,為什么說安全沒有被51%攻擊,因?yàn)樗拇鷥r太大了,如果對它產(chǎn)生足夠的挑戰(zhàn)。我以前看了一個數(shù)據(jù),需要全國Top500的怪獸級的超散,包括中國的神威、美國的泰坦集合在一起才可能發(fā)起有一定威脅性的攻擊?,F(xiàn)在差距可能更大了。
51%攻擊的風(fēng)險在于其它的幣種,而不是比特幣,這種攻擊是史詩級的,或者是毀滅級的攻擊。大部分都是一些所謂的空氣幣或者是山寨幣。BitcoinGold、Zencash、Vnrge,這些幣種都比較小,沒有特別強(qiáng)的保護(hù)措施,很容易被人通過租用云端算力,租用大量算力沖進(jìn)來到這個小比重里面去挖礦,超過原始整個網(wǎng)絡(luò)的算力,一下就造成了51%攻擊雙花。我們預(yù)計(jì)未來可能會越來越多。也有學(xué)者做過研究,ETC采用的共識算法和挖礦的機(jī)制和以太幣是完全一樣的。巴西的學(xué)者研究出來,可能5000多萬的攻擊成本就有可能造成10個億的收益。
剛才講過門頭溝被盜其實(shí)有一部分被交易延展性比特幣的BUG給坑了,根據(jù)這個基礎(chǔ)協(xié)議上的,我沒確認(rèn)嗎?黑客這部分的交易被確認(rèn)了,我就把這個幣再重發(fā)一遍,就是發(fā)幣過程有問題。造成的影響還是挺大的,比特幣的協(xié)議升級已經(jīng)把這個問題解決掉了。第二個是日蝕攻擊,也是很常見的一個手段,在比特幣和以太坊的節(jié)點(diǎn)里都被找出了BUG,都被人修復(fù)了,原理也是通俗易懂的,節(jié)點(diǎn)在連上區(qū)塊鏈網(wǎng)絡(luò)的時候需要有很多連接來看,比如說現(xiàn)在的區(qū)塊高度是多少,現(xiàn)在網(wǎng)上哪些交易已經(jīng)被確認(rèn)了,相關(guān)的交易有沒有被確認(rèn),交易的是什么,你連接的節(jié)點(diǎn)都是黑客控制的節(jié)點(diǎn),他可以告訴你某一個交易的時間根本就沒有,現(xiàn)在的高度是某一個區(qū)塊高度,其實(shí)你根本就不是這個高度,浪費(fèi)了你的算力,告訴你的時間沖也是不對的等等,這個問題就在于,如果說我們寫新的系統(tǒng)的時候,比特幣和以太坊都出過這種BUG。
下面講一下漏洞算法的問題。這個漏洞發(fā)生過程也很有意思。2017年5月份,IOTA是集DOT做的一個區(qū)塊鏈系統(tǒng),請MIT的研究組來審計(jì)代碼,本來是一個好事,MIT的研究者就做了檢查,兩個月之后他們發(fā)現(xiàn)確實(shí)好,這個里面還有問題,我一開始也上當(dāng)了,IOTA創(chuàng)始人我們是Curl被騙了,是一個加密(哈西)值的漏洞。我可以構(gòu)造兩個不一樣的原始數(shù)據(jù),本來(哈西)要避免的事情,在這個里面竟然有這樣一個問題,顯而易見,導(dǎo)致數(shù)字簽名的安全性是無法保障的。9月份MIT,因?yàn)檫@個BUG已經(jīng)修復(fù)了,就公布了漏洞審查的報告,沒成想出現(xiàn)了戲劇性的一幕,IOTA馬上表示強(qiáng)烈的抗議,MIT違反學(xué)術(shù)道德,我們是故意把它放在你們的,我放在你們是防止別人抄我們的代碼。這個也是很有意思的,區(qū)塊鏈漏洞系統(tǒng)里面的歷史事件。
第二個是共識機(jī)制里面的攻擊,這個叫IOTA纏結(jié)縫合攻擊,纏結(jié)是區(qū)塊鏈的一個名詞,今年有一個科幻電影《湮滅》,IOTA經(jīng)歷了這樣的事情,黑客造出來的各種垃圾交易,并且在這兩個鏈之間不停的用鏈串聯(lián)出來。這個造成什么結(jié)果呢?IOTA當(dāng)時的共識算法是不需要交手續(xù)費(fèi)的,交易的確認(rèn)是需要打包前面兩個交易,就造成了普通的用戶去確認(rèn)的時候,大家基本上都在確認(rèn)大量的垃圾交易,黑客也在確認(rèn)垃圾交易,這樣造成整個網(wǎng)絡(luò)是無法使用很長一段時間,整個系統(tǒng)等于是不可用了。后面通過共識機(jī)制的升級,才解決了這個問題。
其實(shí)我們聊了很多,還有大量的,今天時間關(guān)系沒有辦法和大家一起分享討論。
我們再回到區(qū)塊鏈的安全主題上來。區(qū)塊鏈到底是不是重新定義安全,我們覺得區(qū)塊鏈技術(shù)并不是安全的一個萬能鑰,區(qū)塊鏈系統(tǒng)里面仍然會繼承現(xiàn)有的互聯(lián)網(wǎng)安全、軟件安全等問題,同時還引用了新的攻擊向量。
區(qū)塊鏈確實(shí)在有些方面是顯著提高安全性的。比如這里提出了兩點(diǎn),容忍部分節(jié)點(diǎn)做,但是系統(tǒng)還是不影響的。還有一個沒列出來的,能夠抗審查,在微博、微信上的東西可能被刪,存在這個上面的東西是沒法兒被刪的。要達(dá)成這樣的安全性顯著提升的目標(biāo),有一個前提,在它的設(shè)計(jì)研發(fā)和運(yùn)營之中還要要對問題充分的重視,做好防范。我們覺得現(xiàn)有的安全技術(shù)和區(qū)塊鏈技術(shù)是相輔相成,良性循環(huán)的過程。區(qū)塊鏈技術(shù)在很多方面補(bǔ)齊了現(xiàn)有安全技術(shù)不足的地方,但是現(xiàn)有安全技術(shù)又反過來可以促進(jìn)區(qū)塊鏈的技術(shù)提升,兩個是相互促進(jìn)良性循環(huán)的關(guān)系。
第一,如果你是區(qū)塊鏈資產(chǎn)的持有者(用戶),私鑰還是權(quán)利,以前你的法幣的資產(chǎn),或者什么東西丟了,去警察局報個案,去銀行凍結(jié)誰動了你銀行的卡好。這個是幣圈或者老人說的一句話,如果說你買了幣,第一時間把它提出來不要放到交易所,交易所里面的幣都是欠條,你并不真正擁有這些幣,它只是一個符號。不要重復(fù)使用密碼,盡量使用自動生成的密碼,很多人就是幾位數(shù)的密碼,最好都通過軟件自動生成它,開啟短信認(rèn)證,這個是比短信驗(yàn)證碼更安全的機(jī)制,學(xué)會識別各種推廣鏈接,百度的,谷歌的,仔細(xì)閱讀安全提示的相關(guān)內(nèi)容,大額資產(chǎn)建議大家是離線存儲,或者是考慮硬件錢包,當(dāng)然硬件錢包也不一定安全,可能是比直接在電腦上直接存著被偷的概率低一些,最好是硬件存儲。我的一個老朋友,是一個老兵,把私鑰存到記事本里面,傳到云盤上去,在本地把文件就刪了,結(jié)果把刪除的這一步步驟同步到云盤上去了,這樣做也是非常危險的。保管好郵箱帳號是顯而易見的。最后建議大家考慮優(yōu)先使用蘋果手機(jī),我也很喜歡用安卓,只不過因?yàn)檫@些年安卓的碎片化是比較嚴(yán)重的,除了剛剛發(fā)布的第一年安全更新比較頻繁,比較快,稍微老一點(diǎn)的安全更新很多做的是不到位的,不僅僅錢包有風(fēng)險,短信驗(yàn)證碼,包括兩步驗(yàn)證的APP都有可能會被竊取里面的信息。
如果您是一位區(qū)塊鏈項(xiàng)目的開發(fā)者,幾位前輩都講過這個問題,最好是能自己去看看里面的代碼邏輯,里面到底是不是真的,不要信某個牛人或者某個泰斗,在數(shù)字貨幣或者區(qū)塊鏈的這個領(lǐng)域里面蠻有反叛性精神的,沒有所謂的權(quán)威在這里面,大家還是自己去看是最保險的方式。用去中心化的思維,沒有以前的服務(wù)器客戶端的架構(gòu),沒有BS架構(gòu),CS架構(gòu)了,各種攻擊都可能在里面出現(xiàn),你要考慮這個方面,不要去嘗試自己設(shè)計(jì)一種加密算法,這是一個很大的坑。好像自己天不知道地不知道,只有我自己安全。
謹(jǐn)慎對待慈基數(shù)或者時間戳這樣的變量和數(shù)值,這樣的在區(qū)塊鏈的編程也是非常難的。我也在思考這個問題,讓用戶參與進(jìn)來提供周邊的環(huán)境信號,包括麥克風(fēng)或者傳感器的數(shù)據(jù),混合本地的隨機(jī)數(shù)據(jù),這樣也許會安全一點(diǎn)。時間戳也是一樣的,重視安全用例的編寫,一定要重視你寫的每一個Library,哪怕是別人寫的智能合約里面有BUG,您這個系統(tǒng)仍然是可能會被找到漏洞,會被擊潰的。如果您的工作是基于比特幣、以太坊的區(qū)塊鏈去做的,不用重復(fù)發(fā)明文字,一定要同步去更新像比特幣、以太坊攻擊的安全代碼,一般能夠比較快的及時響應(yīng)里面的安全問題,如果你的工作是基于他們的工作基礎(chǔ)上來做,你又沒有去跟進(jìn),等于是告訴黑客,比特幣和以太坊等于是告訴黑客,告誡自己智能合約很難寫,很難寫的好寫的安全,一定要謹(jǐn)小慎微,補(bǔ)齊密碼學(xué)的基礎(chǔ)知識。您開發(fā)的系統(tǒng)有多安全,這個取決于您。
第三個類別,如果您是一位區(qū)塊鏈相關(guān)產(chǎn)品的創(chuàng)業(yè)者,如果你以前不是做這一塊的,現(xiàn)在來做這一塊,我們的建議是,如果您的項(xiàng)目還沒有開始,還是問一問自己,是不是一定要用區(qū)塊鏈。第二個,如果項(xiàng)目已經(jīng)開始了,可以重新從安全的角度審查一下各個方面。應(yīng)該充分了解,在區(qū)塊鏈領(lǐng)域特別是這樣的,要投入大量的人力、物力、財(cái)力是看不到的,一旦出現(xiàn)事故之后是影響很大的,追悔莫及。針對于自己,針對于關(guān)鍵團(tuán)隊(duì)成員,甭管C什么O,這里面一個關(guān)鍵人物出了問題,可能也會造成影響。非區(qū)塊鏈服務(wù)系統(tǒng)的漏洞,這也是容易忽視的一個問題,服務(wù)器上放上您的代碼,操作系統(tǒng)的漏洞就不用說了,他的問題也會導(dǎo)致您這個系統(tǒng)的問題。劃撥資金池,最好還是有一個單獨(dú)的資金,這樣更多的放在社區(qū)里面會更有動機(jī)去介入進(jìn)來,他會覺得這個項(xiàng)目是比較友好的,他也樂意去幫助你,聘任顧問,來審計(jì)第三方產(chǎn)品。建議使用兩組人員,兩種不同的語言來進(jìn)行開發(fā),把協(xié)議約定好。以太坊采用了這種路線,所以避免了好幾次大的問題。同樣也是針對供應(yīng)鏈,開源才是最安全的,但是千萬別等到明天上線今天宣布開源,上線的時候是開源產(chǎn)品,這樣其實(shí)是最危險的,今年有幾個數(shù)字貨幣就出現(xiàn)過這個問題,官方的錢包出現(xiàn),第一天就找到了BUG。最后,做好思想準(zhǔn)備,您這個系統(tǒng)一定會有漏洞,有漏洞就一定會有攻破的,至少有一個安全專員,要有一個應(yīng)急預(yù)案。
以上演講來自ISC2018區(qū)塊鏈與安全論壇,雷鋒網(wǎng)整理。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。