趙赫:區塊鏈現在是黑客的提款機,很容易變現|ISC2018

雷鋒網編者按:經常主打安全概念的區塊鏈到底是不是安全的?作為多年研究區塊鏈的專家,如何看待頻出的安全事件?這背後的原因有哪些?

在 ISC2018上,由眾享比特主辦的區塊鏈與安全論壇中,來自中科院的博士趙赫就結合近年來眾多著名的區塊鏈安全事件來剖析背後的原因。趙赫本人不僅從事區塊鏈的學術研究,同時也深耕行業,目前是中科智鏈的聯合創始人,他當天的演講是那場分論壇中反響最大的之一,現將其整理,以饗讀者。

以下為趙赫(鍾隱)在ISC2018區塊鏈與安全論壇上的演講,雷鋒網編輯整理。

首先自我介紹一下,我是來自中科院的一名科研人員,從2013年開始就進入區塊鏈和加密數字貨幣領域。

赵赫:区块链现在是黑客的提款机,很容易变现|ISC2018

直接切入正題。為什麼很多人都說區塊鏈技術很安全,屬於一種數據安全保護,或者軟件系統安全架構的一種技術。

赵赫:区块链现在是黑客的提款机,很容易变现|ISC2018

可能許多人都已經聽說過了,包括像數據公開透明、記錄不可篡改,還有經常說的分佈式共識,相信代碼,相信數學,相信組織,今天很多老師和同學都已經分享過了。

我們重點還是講講它不安全的地方。為什麼我們要說區塊鏈還不是很安全?

實際上就是區塊鏈的現狀導致的。區塊鏈的現狀等於黑客的提款機,很容易變現,前面的老師也說過,基本跟錢是一回事,而且很難追蹤。我們把區塊鏈裡面的各種攻擊,各種漏洞的形態也分成了三個大類,與大家也探討一下,分享一下,最後再給出我們的建議或者最佳實踐的一些內容。

赵赫:区块链现在是黑客的提款机,很容易变现|ISC2018

首先,第一個是應用層的攻擊,主要是講錢包合乎智能合約,像這兩個範圍內的攻擊手段。

第二個是和區塊鏈相關的交易所和在線服務提供商。

第三種是特別針對於區塊鏈本身系統裡面的攻擊手段。比如說共識算法、加密學的基礎、P2P網絡等等內容。

第一部分,應用側的攻擊,這個可能是爆發最多的,對於普通用戶來說是最容易體會到,有一種很強烈的威脅感存在。這個幣存在哪好呢?有可能存著存著就丟了。

這是以太坊非常流行的一個錢包,攻擊的方式非常多,比如說被域名劫持,因為它是一個在線的情況,在網站上訪問了之後,輸入私鑰就可以將以太幣或者以太坊上面的Token都可以收發,很方便,但是黑客也就抓住了這個方便,把安全也就很容易把幣轉到他手裡。比如釣魚事件,現在有統計,統計了5000多種攻擊,同時有1000多種都是針對於在線錢包的攻擊。

第二種類型也是最古老的攻擊手段,就是本地錢包地址替換的情況。大家可能聽說過2014年好萊塢豔照門的事件,黑客把很多好萊塢的私密照片發到了網上,最後留了一個地址,希望大家給他打賞,結果這個地方出了一個問題,很多人把自己的地址給換了,最後沒得到多少幣。對於用戶來說,我們這裡看到代碼邏輯非常簡單,直接把內存裡面監測到,把錢包直接給換掉。

最新的360安全衛士已經增加了預警功能,這個值得點贊,如果發現錢包的地址被換了會提示,黑客會不停的收到幣。比較普遍的方式是針對手機郵箱的,是基於社會工程學的一種東西,2016年年底的時候,國內的區塊鏈大V在手機上被黑了,當時不僅自己損失了一大筆錢,而且造成了市場劇烈的振盪。智能合約的攻擊事件我就不多說了。

我們再講講第二部分,系統層面的攻擊。比如交易所的攻破,這個聽說的也比較多,怎麼比特幣又被黑了,比特幣又被偷了,比特幣本身沒錯,是交易所被黑了。第二種比較大的類型是監守自盜,內鬼做案的事情,國內也出現過,應該是2014年的時候,如果進入這個圈子比較早的同學應該知道有一個比特幣存錢罐,存一個比特幣一年給你1.1個還是1.2個,過了一段時間存了幾千個幣之後跑了。第三種是針對於區塊鏈底層BUG被利用的攻擊。門頭溝的盜幣,監守自盜,也有一小部分被人利用了比特幣交易延展性的攻擊,偷了幾千個比特幣。

我們再看第二類,針對非交易所的,是一些在線服務商的安全事故,這樣類型的也非常多。在去年的一個ICO的項目被攻擊的原理是,服務器上有一個網站,很多程序員都知道,結果沒有打好補丁,被人找到了一個漏洞,上傳了木馬,拿到服務器權限之後,把裡面的幣全都給轉走了。

我想多說一說這一塊。很多人覺得區塊鏈是代碼寫好就OK了,人的因素攻擊還是蠻嚴重的隱患。BTP是硅谷的一個名企,屬於支付商。如果你在網上用比特幣買東西,比如在國外海淘付款,有可能你用的支付就是他們提供的。他們的首席財政官有一天收到一個郵件,這個郵件是黑客給他發的,他當然不知道。他說我們是一個幣圈人或者鏈圈的一個媒體,需要提供一個答案,他就真的點了郵件裡面的鏈接,沒有這麼簡單,點了鏈接之後讓他輸一個帳號密碼。輸進去之後黑客拿到了郵箱的登陸帳號。拿到了郵箱登陸帳號,黑客很雞賊,先去學習,先學習郵箱裡的所有軟件,發郵件是什麼樣的內容,有什麼規定,掌握完了之後黑客模仿CFO的身份給CEO發了一個郵件,我們現在有一個大客戶,用什麼緣故要轉100個比特幣,我已經檢查過了沒有什麼問題,請您批示一下。沒有多想就給他批准了,黑客拿到這個幣之後,一而再在二三偷了三次,偷了一共5個億。這個是針對人的攻擊。最後BTP找保險公司索賠了,但是沒有獲得賠償。

第三種是針對雲平臺或者雲服務器的攻擊,這也是早前發生過的一個案例。國外有一個雲平臺,類似阿里雲、騰訊雲,當時國際上也有很多礦池的雲平臺服務,當時它的管理權限被人獲取了,有好幾個比較早的創業企業被偷了2萬多個比特幣。

我們重點講一講第三部分,很多人覺得這個技術像比特幣,很多年沒有出過大的安全問題,所以這個數字貨幣是非常可信的。其實這個數字不是特別嚴謹,不是沒有出現過,而且出現過不僅一次,各種因素化險為夷了。第一個案例,德國的一個碼農,發現比特幣的腳本程序裡面有一處潛在的破壞力極強的BUG,這個BUG基本內容是,右上角是原始代碼的邏輯,case,黑客利用BUG可以調用語句,使得可以用之前錢包裡面的比特幣。如果我能花你錢包裡的錢,這個錢還值錢嗎?

這個BUG最早的時候是沒有被公開的,這個程序員發了一個郵件給比特幣的創始人,在郵件裡講,對於不知道BUG的人,千萬別講BUG的名字,如果你是很熟悉的人,你一聽就知道到底怎麼調用這個BUG,你可以想想當時的影響到底有多大。

這個BUG沒有被公開,悄悄被修復。悄悄的來,悄悄的我又走了,這個BUG後面的比特幣升級其它的內容,就是常規性的內容更新的時候,把問題給悄悄的修復了,修復完之後在所有的節點,大部分都更新了之後才被公之於眾。所以這個程序員也是比特幣或者區塊鏈歷史上最鮮為人知的大救星,他第一次救了比特幣。也有一種說法,因為他自己也持有比較多的比特幣,他不想自己的幣貶值,所以他寫了這個郵件。這也是加密經濟學裡面的角度考慮。

比特幣天量刷幣漏洞,比特幣誕生半年到一年的時候,僅過了一個月出現了第二個BUG,是美國的一個碼農程序員(Jeff),他發現比特幣的區塊鏈裡面7400多個區塊有一個很異常的交易,有三個收款地址,有兩個收了900多億比特幣,一共是1800多億個。知道比特幣的同學都知道,在求和的這個邏輯裡面,有一個求和溢出,當時是沒有被處理的。發現這個BUG之後,這個時候比特幣已經在運營當中了,而且是比較嚴重的BUG,結果社區表現出來比較強的能力。開發者出了修復BUG的版本之後,號召大家趕緊在Node的版本上去挖礦,哪一個鏈最長,才是最終被認可的鏈,結果帶有補丁版本的區塊鏈的程度最後趕上並且超越了原來有BUG的這個鏈,最終才化險為夷。

說完核心代碼的一些漏洞之後,我們來聊一聊共識機制的問題。先講一個,大家可能都知道,51%攻擊的問題,現在發現它是現實的存在,原來以為是理論的存在。我們提出一種方案,他可以避免雙花。通過什麼呢?通過PUW,是有前提的。惡意用戶不能超過50%。比特幣的歷史上曾經有過這種擔憂,2014年的時候有一個礦池,不停的增長,幾乎已經達到甚至要超過一半了,結果就說大家別在我這兒挖了,我這兒已經變成一箇中心化的礦池了,我要提高手續費了,後面慢慢也就沒有出現51%攻擊的隱患。

現在有很多詬病說中國的幾家礦池聯合起來也是可以完成51%攻擊的,這也是理論上的可能。但是比特幣沒有真正被51%攻擊成功過。有一個比方,為什麼說安全沒有被51%攻擊,因為它的代價太大了,如果對它產生足夠的挑戰。我以前看了一個數據,需要全國Top500的怪獸級的超散,包括中國的神威、美國的泰坦集合在一起才可能發起有一定威脅性的攻擊。現在差距可能更大了。

51%攻擊的風險在於其它的幣種,而不是比特幣,這種攻擊是史詩級的,或者是毀滅級的攻擊。大部分都是一些所謂的空氣幣或者是山寨幣。BitcoinGold、Zencash、Vnrge,這些幣種都比較小,沒有特別強的保護措施,很容易被人通過租用雲端算力,租用大量算力衝進來到這個小比重裡面去挖礦,超過原始整個網絡的算力,一下就造成了51%攻擊雙花。我們預計未來可能會越來越多。也有學者做過研究,ETC採用的共識算法和挖礦的機制和以太幣是完全一樣的。巴西的學者研究出來,可能5000多萬的攻擊成本就有可能造成10個億的收益。

剛才講過門頭溝被盜其實有一部分被交易延展性比特幣的BUG給坑了,根據這個基礎協議上的,我沒確認嗎?黑客這部分的交易被確認了,我就把這個幣再重發一遍,就是發幣過程有問題。造成的影響還是挺大的,比特幣的協議升級已經把這個問題解決掉了。第二個是日蝕攻擊,也是很常見的一個手段,在比特幣和以太坊的節點裡都被找出了BUG,都被人修復了,原理也是通俗易懂的,節點在連上區塊鏈網絡的時候需要有很多連接來看,比如說現在的區塊高度是多少,現在網上哪些交易已經被確認了,相關的交易有沒有被確認,交易的是什麼,你連接的節點都是黑客控制的節點,他可以告訴你某一個交易的時間根本就沒有,現在的高度是某一個區塊高度,其實你根本就不是這個高度,浪費了你的算力,告訴你的時間衝也是不對的等等,這個問題就在於,如果說我們寫新的系統的時候,比特幣和以太坊都出過這種BUG。

下面講一下漏洞算法的問題。這個漏洞發生過程也很有意思。2017年5月份,IOTA是集DOT做的一個區塊鏈系統,請MIT的研究組來審計代碼,本來是一個好事,MIT的研究者就做了檢查,兩個月之後他們發現確實好,這個裡面還有問題,我一開始也上當了,IOTA創始人我們是Curl被騙了,是一個加密(哈西)值的漏洞。我可以構造兩個不一樣的原始數據,本來(哈西)要避免的事情,在這個裡面竟然有這樣一個問題,顯而易見,導致數字簽名的安全性是無法保障的。9月份MIT,因為這個BUG已經修復了,就公佈了漏洞審查的報告,沒成想出現了戲劇性的一幕,IOTA馬上表示強烈的抗議,MIT違反學術道德,我們是故意把它放在你們的,我放在你們是防止別人抄我們的代碼。這個也是很有意思的,區塊鏈漏洞系統裡面的歷史事件。

第二個是共識機制裡面的攻擊,這個叫IOTA纏結縫合攻擊,纏結是區塊鏈的一個名詞,今年有一個科幻電影《湮滅》,IOTA經歷了這樣的事情,黑客造出來的各種垃圾交易,並且在這兩個鏈之間不停的用鏈串聯出來。這個造成什麼結果呢?IOTA當時的共識算法是不需要交手續費的,交易的確認是需要打包前面兩個交易,就造成了普通的用戶去確認的時候,大家基本上都在確認大量的垃圾交易,黑客也在確認垃圾交易,這樣造成整個網絡是無法使用很長一段時間,整個系統等於是不可用了。後面通過共識機制的升級,才解決了這個問題。

其實我們聊了很多,還有大量的,今天時間關係沒有辦法和大家一起分享討論。

赵赫:区块链现在是黑客的提款机,很容易变现|ISC2018

我們再回到區塊鏈的安全主題上來。區塊鏈到底是不是重新定義安全,我們覺得區塊鏈技術並不是安全的一個萬能鑰,區塊鏈系統裡面仍然會繼承現有的互聯網安全、軟件安全等問題,同時還引用了新的攻擊向量。

區塊鏈確實在有些方面是顯著提高安全性的。比如這裡提出了兩點,容忍部分節點做,但是系統還是不影響的。還有一個沒列出來的,能夠抗審查,在微博、微信上的東西可能被刪,存在這個上面的東西是沒法兒被刪的。要達成這樣的安全性顯著提升的目標,有一個前提,在它的設計研發和運營之中還要要對問題充分的重視,做好防範。我們覺得現有的安全技術和區塊鏈技術是相輔相成,良性循環的過程。區塊鏈技術在很多方面補齊了現有安全技術不足的地方,但是現有安全技術又反過來可以促進區塊鏈的技術提升,兩個是相互促進良性循環的關係。

第一,如果你是區塊鏈資產的持有者(用戶),私鑰還是權利,以前你的法幣的資產,或者什麼東西丟了,去警察局報個案,去銀行凍結誰動了你銀行的卡好。這個是幣圈或者老人說的一句話,如果說你買了幣,第一時間把它提出來不要放到交易所,交易所裡面的幣都是欠條,你並不真正擁有這些幣,它只是一個符號。不要重複使用密碼,儘量使用自動生成的密碼,很多人就是幾位數的密碼,最好都通過軟件自動生成它,開啟短信認證,這個是比短信驗證碼更安全的機制,學會識別各種推廣鏈接,百度的,谷歌的,仔細閱讀安全提示的相關內容,大額資產建議大家是離線存儲,或者是考慮硬件錢包,當然硬件錢包也不一定安全,可能是比直接在電腦上直接存著被偷的概率低一些,最好是硬件存儲。我的一個老朋友,是一個老兵,把私鑰存到記事本里面,傳到雲盤上去,在本地把文件就刪了,結果把刪除的這一步步驟同步到雲盤上去了,這樣做也是非常危險的。保管好郵箱帳號是顯而易見的。最後建議大家考慮優先使用蘋果手機,我也很喜歡用安卓,只不過因為這些年安卓的碎片化是比較嚴重的,除了剛剛發佈的第一年安全更新比較頻繁,比較快,稍微老一點的安全更新很多做的是不到位的,不僅僅錢包有風險,短信驗證碼,包括兩步驗證的APP都有可能會被竊取裡面的信息。

如果您是一位區塊鏈項目的開發者,幾位前輩都講過這個問題,最好是能自己去看看裡面的代碼邏輯,裡面到底是不是真的,不要信某個牛人或者某個泰斗,在數字貨幣或者區塊鏈的這個領域裡面蠻有反叛性精神的,沒有所謂的權威在這裡面,大家還是自己去看是最保險的方式。用去中心化的思維,沒有以前的服務器客戶端的架構,沒有BS架構,CS架構了,各種攻擊都可能在裡面出現,你要考慮這個方面,不要去嘗試自己設計一種加密算法,這是一個很大的坑。好像自己天不知道地不知道,只有我自己安全。

謹慎對待慈基數或者時間戳這樣的變量和數值,這樣的在區塊鏈的編程也是非常難的。我也在思考這個問題,讓用戶參與進來提供周邊的環境信號,包括麥克風或者傳感器的數據,混合本地的隨機數據,這樣也許會安全一點。時間戳也是一樣的,重視安全用例的編寫,一定要重視你寫的每一個Library,哪怕是別人寫的智能合約裡面有BUG,您這個系統仍然是可能會被找到漏洞,會被擊潰的。如果您的工作是基於比特幣、以太坊的區塊鏈去做的,不用重複發明文字,一定要同步去更新像比特幣、以太坊攻擊的安全代碼,一般能夠比較快的及時響應裡面的安全問題,如果你的工作是基於他們的工作基礎上來做,你又沒有去跟進,等於是告訴黑客,比特幣和以太坊等於是告訴黑客,告誡自己智能合約很難寫,很難寫的好寫的安全,一定要謹小慎微,補齊密碼學的基礎知識。您開發的系統有多安全,這個取決於您。

第三個類別,如果您是一位區塊鏈相關產品的創業者,如果你以前不是做這一塊的,現在來做這一塊,我們的建議是,如果您的項目還沒有開始,還是問一問自己,是不是一定要用區塊鏈。第二個,如果項目已經開始了,可以重新從安全的角度審查一下各個方面。應該充分了解,在區塊鏈領域特別是這樣的,要投入大量的人力、物力、財力是看不到的,一旦出現事故之後是影響很大的,追悔莫及。針對於自己,針對於關鍵團隊成員,甭管C什麼O,這裡面一個關鍵人物出了問題,可能也會造成影響。非區塊鏈服務系統的漏洞,這也是容易忽視的一個問題,服務器上放上您的代碼,操作系統的漏洞就不用說了,他的問題也會導致您這個系統的問題。劃撥資金池,最好還是有一個單獨的資金,這樣更多的放在社區裡面會更有動機去介入進來,他會覺得這個項目是比較友好的,他也樂意去幫助你,聘任顧問,來審計第三方產品。建議使用兩組人員,兩種不同的語言來進行開發,把協議約定好。以太坊採用了這種路線,所以避免了好幾次大的問題。同樣也是針對供應鏈,開源才是最安全的,但是千萬別等到明天上線今天宣佈開源,上線的時候是開源產品,這樣其實是最危險的,今年有幾個數字貨幣就出現過這個問題,官方的錢包出現,第一天就找到了BUG。最後,做好思想準備,您這個系統一定會有漏洞,有漏洞就一定會有攻破的,至少有一個安全專員,要有一個應急預案。

以上演講來自ISC2018區塊鏈與安全論壇,雷鋒網整理。


分享到:


相關文章: