
內容 | 萬濤 IDF極安客實驗室聯合創始人
整理 | Aholiab
說起區塊鏈,雖然為人大肆談論,卻一直繞不過一個令人尷尬的問題——關于數字資產的丟失、被盜問題屢見不鮮,包括之前幣安的安全事件也引起了業界的轟動。
那么,區塊鏈安全的現狀到底是什么?區塊鏈與加密貨幣究竟存在哪些安全問題?如何構建安全的智能合約?IDF極安客實驗室聯合創始人萬濤認為,如果不顧安全大談區塊鏈都是「耍流氓」;如果以安全的名義去鼓吹區塊鏈,卻沒有實質的行動,則屬厚顏無恥。近日,萬濤給「區塊鏈大本營」講了區塊鏈安全的那些事兒。
那一夜,黑客耍了所有人
2018年3月7日深夜,不少用戶發現自己幣安賬戶中持有的各種各樣的代幣、數字幣被換成了比特幣。據網友反饋,被盜的賬號中不少人以為這是幣安系統錯誤導致的,還試圖從幣安客服那里得到解釋。當他們還沒有反應過來的時候,黑客已經開始了他們有組織、有預謀的行動。
因為大量代幣被市價拋售,導致絕大部分幣種開始下跌,市場中不明真相的散戶也開始了恐慌性拋售。在幣安比特幣的交易對中,只有10余個幣種處于正常狀態,其他幣種均在下跌。

在上漲的幣種里,VIA(維爾幣)成為了黑客影響市場的新目標:黑客操縱的賬號在1小時內用1萬個比特幣拉爆了VIA(拉爆,即BlockBeats:幣值在極短的時間內升高數倍)。
在引發恐慌性拋售之后,黑客將被盜賬戶中持有的比特幣全部高價買入VIA,從22:50分的0.000225美元直接拉升到0.025美元,整整拉了110倍!整個過程中,黑客一共消耗了約10000個比特幣。
按照正常邏輯,此時黑客手中的其他帳號就可以把自己手中持有的VIA高價賣出,換成比特幣分散到安全的賬號,然后提現離場。這一過程類似于莊家惡意拉盤又砸盤,但黑客并沒有這樣操作。
此時,幣安已經注意到了異常情況,為了防止黑客提幣,暫停了幣安平臺上所有的提幣行為。這樣一來黑客即便是把幣值拉升了100倍,也無法提幣。
當你看到這里的時候,是不是覺得幣安的安全防護已經到位,黑客沒有辦法提幣離場?
Too Young!所有人都想錯了,因為在這場攻擊中黑客壓根就沒想提幣離場,一場宏大的收割計劃其實早就結束了。
早有預謀的黑客當然會想到交易所會立即停止所有賬戶提現來挽回損失,所以他們來了一出「聲東擊西」——攻擊幣安,但最大的利潤并不從幣安上獲取。而是來自于:之前在全世界各個交易所上早就掛出的「數字貨幣和代幣做空單」。
幣安是全球交易量第二大的虛擬貨幣交易所,這個市場中的任何波動都將快速地影響到其他交易所,大的包括:OKEx、火幣、Bitfinex、Upbit等,小的包括各種二三流交易所。幣安交易所中突然出現絕大多數幣種的下跌,一定會影響到其他交易所的投資者的投資行為,進而影響虛擬貨幣價值的漲跌。
目前,已經有不少交易所上線了做空交易。黑客的真正目的是通過在開通做空交易的市場上掛空單,等到幣值下降的時候,直接收割一波離場。這樣操作,根本不需要冒著風險從幣安提幣,在市場下跌的那一刻,就直接完成了利益收割。
如果黑客一味地在幣安上交易,是存在無法提幣成功的可能性的,這會導致整場攻擊功虧一簣。但黑客選擇的是將利用幣安這個大的中心化交易所的信用背書,來影響其他交易所。因為大量空單分散在成百上千家交易所,根本無從查起。而黑客本質上也并沒有「盜取」任何人的數字貨幣,只是幫大家「換了換種類」而已。
看到了嗎,在這次事件中,黑客的攻擊已經「去中心化」了 。
關于這一點,業界已經達成共識:這場入侵的潛伏時間非常長,黑客也表現的非常有組織、有耐心。因為從黑客的行為來看,他們已經做好了多手準備,如果可以提幣,那么立刻提幣走人;如果不能提幣,依舊可以去隔壁交易所賣出或做空收割。
被打成「篩子」的交易平臺
幣安不安的事件,也許未來回頭看,在區塊鏈、數字貨幣安全歷史上具有里程碑意義,意味著區塊鏈安全領域,已有非常專業的「玩家」入場,未來的攻防對抗,會變成怎樣的驚心動魄?
其實,自比特幣誕生以來,數字貨幣被盜事件就層出不窮。對于普通投資者而言,除了數字貨幣投機風險外,不受監管的數字貨幣交易所也會帶來較高的安全隱患。尤其是近幾年,數字貨幣在價格和交易量上均呈爆發式增長,交易所成為黑客盜取和勒索的首選。
以下是比特幣歷史上比較有名的攻擊事件:
所以,安全業界有人提出:所有不顧安全大談區塊鏈的都是耍流氓。
玩區塊鏈,該如何防范安全風險?
數字貨幣被盜和交易所安全事件發生的如此頻繁,以至于成為公眾質疑其底層技術區塊鏈安全性的理由。那么,讓我們來盤點一下區塊鏈技術可能存在的區塊鏈安全風險。
錢包風險
所有主流數字貨幣都有對應的數字資產管理工具——錢包。以比特幣為例,目前支持比特幣的主流錢包就有數十種,而且還分「軟件和硬件」、「在線和離線」、「PC端和移動端」等形態。
由于歷史數據、網絡同步和使用不便等問題,個人運行和維護龐大的比特幣客戶端來管理資產非常笨重,也不現實。越來越多的數字貨幣資產管理廠商開發了錢包應用或硬件。
這個世界上,總有一些人因為運氣不佳或其它因素導致忘記了初始密鑰或丟失了硬盤,導致數字資產從網絡上永久消失。這樣的案例很多,近來的新聞或段子里也常常看到。

同樣,這個世界上也總有那么一些人因為粗心大意,導致錢包密鑰文件泄露,讓自己損失慘重。在 Twitter 上,曾有人演示使用AWS S3資源掃描工具,發現了多個比特幣錢包密鑰文件wallet.dat,并且可以公開下載!任何人下載該文件將其導入到比特幣客戶端,都可以對加密數字資產進行轉賬操作!
所以切記,財不外露,wallet.dat文件更不能外露!
主流的交易所或錢包管理軟件,都提供復制或掃碼方式獲取收款地址,但如果電腦終端被植入了木馬,那么拷貝或執行轉賬的過程中,收款地址也存在被替換的風險。
除了「密語」、密鑰和錢包地址等安全問題外,錢包App本身也存在較大的風險。在使用數字貨幣錢包時,應選擇官方推薦的錢包軟件,堅決不使用不明廠商開發或社交網絡中來源不明的錢包軟件。
挖礦風險
除了購買比特幣,獲取比特幣最基本的方式是運行比特幣客戶端記賬軟件,成為網絡區塊鏈網絡中的一個節點。通過參與區塊鏈網絡計算,維護全網數據,從而獲得比特幣獎勵——俗稱「挖礦」。當然,以現在比特幣全網的挖礦難度,普通個人電腦是無法通過挖礦獲得收益的。即便是專業的礦機也需要數月才能回本,更不要說中間還需要付出高昂的電費成本。
為此,互聯網上誕生了「礦池」。個人用戶在挖礦過程中將挖礦客戶端連接到更大的礦池服務器。與其他個人礦工抱團挖掘比特幣。當大礦池挖掘到比特幣時,按照算力貢獻對不同的客戶端進行獲利分成。絕大多數礦池會提供用戶專用的挖礦軟件和錢包地址。
以門羅幣(XMR)挖礦程序為例,個人礦機使用者在客戶端運行如下程序:

待執行完程序后,挖礦程序加入礦池mro.example.org進行挖礦。如果挖到門羅幣,礦池將進行門羅幣獎勵,直接發放到地址YOUR_WALLET_ADDRESS。
以下是主流的比特幣挖礦行業形態:

通過簡單的分析可知,挖礦產業形態存在如下風險:
如今,越來越多的黑客也開始將攻擊目標鎖定在礦池服務器。類似「挖礦平臺被黑客入侵:價值4.6億比特幣被盜」這樣的新聞,屢見不鮮。
那么,如何避免挖礦風險呢?我的建議是,挖礦軟件容易被綁定病毒,用于盜竊虛擬幣錢包,請務必從官方可靠渠道下載軟件,使用專門的挖礦電腦,不要在上面放重要信息(特別是虛擬幣錢包)。另外,礦池有倒閉和跑路的風險,請務必盡最快的速度將礦池挖礦所得轉移出來。
單靠個人電腦無法挖掘更多的數字貨幣,只有利用無限的互聯網資源才能創造更多的價值。所以從2017年開始,結合挖礦的黑客軟件和木馬病毒正一步一步向企業網絡中滲透。被成功入侵的服務器會24小時不間斷為黑客挖礦。那些安全措施不足,防御手段欠佳的企業,他們的服務器安全將遭受更大的挑戰,一旦防御失敗,將徹底淪為替黑客謀財的礦工。
曾經遇到過某企業服務器每到半夜都會滿負荷運行,所有的資源都被耗盡,但是運維人員一旦登錄服務器,系統又都恢復正常。經過多次調查,最終發現該服務器被植入了黑客木馬程序,用于門羅幣挖礦。
雖然企業信息并沒有被泄露,但原本用于業務的計算資源被挖礦軟件占用,這本身就是一種浪費和損失。如今,黑客進入你的系統再也不是搞破壞和做炫耀了,而是用服務器去挖礦,讓服務器做成搖錢樹。他們甚至還會幫你「優化」服務器,提升計算能力,榨干你的最后一個計算單元!
代碼實現上的安全
好的設計架構可以提高系統的安全性,但架構要實現必須要通過代碼。在軟件實現的過程中沒有做到嚴格的編碼安全,仍然存在風險和漏洞。相對于面向全網公開的比特幣核心代碼,錢包類App軟件、交易所網站代碼等更容易出現應用安全漏洞。如果不能及時識別和修復安全漏洞,最終將導致用戶資產被黑客攻擊竊取。
諸如交易所風控治理、釣魚、社會工程學欺詐勒索等我們認為的「傳統安全問題」,在區塊鏈技術和應用中也會不可避免的遇到。
區塊鏈自身風險
由于區塊鏈的「去中心化」特性,因此不用擔心針對單點的網絡拒絕服務攻擊。但短時間內大量的超小額(如:0.0001BTC)垃圾交易會迅速填滿區塊,使得其它轉賬信息無法及時確認,并最終導致整個區塊鏈網絡轉賬延遲。
基于算力證明進行維護的比特幣網絡,一直以來有一個重大的理論風險:如果有人掌握了巨大的計算資源(超過全網過半的算力),他就可以通過強大的算力篡改區塊鏈上的賬本,從而控制整個共識網絡,這也被稱為「51%攻擊」。
雖然這種攻擊發生的可能性不是很大(掌握這種算力的人本身就可以通過挖礦獲得巨大受益,再去冒險篡改賬本很容易暴露自身),但理論上:一旦這種攻擊被發現,比特幣網絡其他終端可以聯合起來對已知的區塊鏈進行硬分叉,全體否認非法的交易。
以太坊就安全了?目前已知的安全問題
以太坊(Ethereum)是一個開源的有智能合約功能的公共區塊鏈平臺。區塊鏈上的所有用戶都可以看到基于區塊鏈的智能合約。但是,這會導致包括安全漏洞在內的所有漏洞都可見。
如果智能合約開發者疏忽或測試不充分,而造成智能合約的代碼有漏洞的話,就非常容易被黑客利用并攻擊。并且越是功能強大的智能合約,就越是邏輯復雜,也越容易出現邏輯上的漏洞。同時,智能合約語言Solidity自身與合約設計都可能存在漏洞。
大家也許還記得,2016年6月17日發生了在區塊鏈歷史上最沉重的一次攻擊事件之一。由于以太坊的智能合約存在著重大缺陷,區塊鏈業界最大的眾籌項目TheDAO(被攻擊前擁有1億美元左右的資產)遭到攻擊,導致300多萬以太幣資產被分離出TheDAO的資產池。
2017年7月21日,智能合約編碼公司Parity放出警告,稱1.5版本及之后的錢包軟件存在漏洞,據Etherscan.io的數據確認有價值3000萬美元的15萬以太幣被盜。
2017年11月8日,以太坊Parity錢包再出現重大Bug,多重簽名漏洞被黑客利用,導致上億美元資產被凍結。
業界盤點的以太坊目前已知的安全漏洞如下:



鑒于以太坊的運行時間還不到3年,如上漏洞可能只是所有漏洞的冰山一角,為保證業務在區塊鏈上安全可靠的運行,保護數字資產的安全,采用以太坊做為區塊鏈技術方案時必須對智能合約代碼進行充分測試。
最近有安全團隊揭露以太坊「偷渡」漏洞導致的「全球黑客瘋狂投幣」,也值得大家予以重視和關注。
5招構建安全的智能合約
第一招,對可能的錯誤有所預判。
任何有意義的智能合約或多或少都存在錯誤。因此你的代碼必須能夠正確地處理出現的Bug和漏洞。比如始終保證以下規則:當智能合約出現錯誤時,可以停止合約(「斷路開關」);預先考慮管理賬戶的資金風險(限制(轉賬)速率、最大(轉賬)額度);提供有效的途徑來進行Bug修復和功能提升。
第二招,謹慎發布智能合約。
盡量在正式發布智能合約之前發現并修復可能的Bug。對智能合約進行徹底的測試,并在任何新的攻擊手法被發現后及時進行測試(包括已經發布的合約);從Alpha版本在測試網上發布開始,便提供Bug賞金計劃(類似互聯網安全行業常見的SRC漏洞獎勵);階段性發布,每個階段都提供足夠的測試。
第三招,保持智能合約的簡潔。
復雜會增加出錯的風險。簡介是指:
第四招,保持更新。
在任何新的漏洞被發現時檢查你的智能合約;
盡可能快地將使用到的庫或工具更新到最新;
關注并主動嘗試最新的安全技術。
第五招,清楚區塊鏈的特性。
區塊鏈技術和應用的發展給安全行業帶來很大的創新機遇和機會,同時也帶來極為嚴峻的挑戰。
在涉足區塊鏈的時候,一定要記得文章開頭的那句話:
不顧安全大談區塊鏈都是「耍流氓」;以安全的名義去鼓吹區塊鏈,卻沒有實質的行動,則屬厚顏無恥!