謝 婷,劉曉鋒,吳玉娟
(西華師范大學,四川 南充 637000)
2008年,中本聰提出具有去中心化、可追溯和匿名化等特點的區塊鏈技術,受到各界人士的關注,至此誕生出各種基于區塊鏈技術的應用,如比特幣、萊特幣和以太坊等[1]。在區塊鏈從1.0到3.0版本期間,出現過各種安全事件。作為區塊鏈1.0版本的比特幣發生過的安全問題,例如,大整數溢出造成了比特幣被盜取了千萬億;Mt.Gox交易所因攻擊者獲取wallet.dat文件副本,被盜取了幾十萬的比特幣;絲綢之路2.0交易網站曾因交易延展性問題導致比特幣被盜。區塊鏈2.0版本的以太坊發生過的安全問題,例如,著名的The DAO事件,被盜取了幾百萬的以太幣;簽名錢包Parity存在安全問題,攻擊者利用多重錢包漏洞盜取了幾十萬的以太幣;還有其他因智能合約漏洞和以太坊本身導致的各種安全事件。區塊鏈3.0版本的應用也因代碼漏洞導致安全事件發生,如Wormhole因代碼漏洞受到黑客攻擊[2]。
以上各種安全事件均暴露出基于區塊鏈技術的各種應用缺乏真正意義上的安全。區塊鏈本身是以去中心化、防篡改和匿名化等特點受到人們的廣泛關注,但在使用區塊鏈技術時出現各種安全問題,導致人們開始擔憂區塊鏈的未來,由此引發區塊鏈技術的信任危機。
國內外文獻針對區塊鏈安全問題研究存在兩種研究方式。(1)第一種方式[3-4],按照攻擊事件歸屬區塊鏈架構的某一層,進行相應分類,如表1所示。單獨分析各安全問題屬于哪層出現的安全問題,隔斷了各種安全問題的聯系,沒有考慮除六層架構以外的安全問題。因此這種研究方式缺乏各層之間安全事件的聯系性和全面性。(2)第二種方式,針對區塊鏈中某一層出現的安全問題進行研究,如孫國梓等[5]只對合約層中出現的各種安全事件進行分析,ATZEI等[6]對交易中出現安全問題所造成區塊鏈用戶資產丟失的安全事件進行研究,不過這種研究方式過于單一化與集中化,對發生在區塊鏈各層的安全問題并沒有考慮完全,缺乏全面化與綜合化。
本文考慮區塊鏈安全事件的復雜多樣,主要從區塊鏈自身安全機制問題、運行環境問題和使用者安全問題三個方面進行研究與討論。
由于區塊鏈自身安全機制存在一定問題,所以根據區塊鏈的六層邏輯架構分析區塊鏈自身安全問題。(1)數據層,區塊鏈的數據層存在哈希函數、加密技術和時間戳的安全性問題。哈希函數的攻擊是通過變色龍HASH函數[7-8]實現篡改數據,其原理是攻擊者在保持輸出相同的情況下,人為地設置自己想要的輸入值,因此變色龍HASH函數的出現改變了區塊鏈不可篡改的特點,違背了區塊鏈技術創始本意。隨著技術發展,最初采用的加密技術是在HASH256量子計算[9]下被破解的,因此無法實現區塊鏈用戶的匿名性。時間戳的使用是準確定義交易時間,防止出現雙花攻擊,但區塊上的時間戳是為礦工定義的,因此出現有利于礦工自己而設計的時間戳漏洞。例如,在GovernMental攻擊中就存在根據時間戳漏洞來設計時間戳,攻擊者使自己的時間戳比之前區塊的時間戳晚一分鐘來贏得獎勵。(2)網絡層,網絡層目前出現的問題主要是傳播機制問題。傳播機制采用的洪泛法是指每個節點將自己所含的交易信息都廣播給相鄰節點。攻擊者通過網絡層的啟發式聚類法[10]推測出每個節點關系及身份,導致區塊鏈的匿名性特點并不存在。(3)共識層,共識層由共識算法[11-12]組成,但各種共識算法有不同優缺點,導致共識層存在擴展性差和硬分叉的安全性問題。可擴展性主要是指系統效率,其中TPS(系統吞吐量)是可擴展性的一項重要指標。針對可擴展性的安全問題是粉塵攻擊和空塊攻擊,粉塵攻擊中攻擊者利用比特幣設計規則漏洞,進行大量小額交易,又由于比特幣交易區塊大小有限,導致網絡擁塞。空塊攻擊則只打包新幣發行的coinbase交易,其他類型交易都不會打包到區塊,一旦出現大量類似攻擊,會導致交易確認時間過長,系統吞吐量過低。硬分叉是指系統中各個節點出現分歧而導致區塊鏈分叉。硬分叉導致區塊鏈主要的安全問題是交易回滾和重放攻擊。(4)激勵層,激勵層主要包括發行機制和分配機制,而發行機制存在因優先打包而交易費用高的交易,導致一些費用低的交易等待時間過久的安全問題。(5)合約層,在合約層中區塊鏈本身存在的問題是合約狀態無法預測、可變的交易狀態和交易延展性。當調用一個合約時,此時合約狀態和之后狀態可能會不一樣,合約狀態受其他交易和分叉影響,導致合約狀態改變。在Dynamic Libraries攻擊中,用戶在執行交易時合約狀態改變,導致將以太傳輸給攻擊者。交易ID是由交易大小、類型、時間和簽名等因素計算而成的值。交易延展性則指當簽名改變時交易ID也會隨之發生變化,因此攻擊者利用這一缺點修改交易ID,盜取交易費用。Mt.Gox交易所就受到了類似攻擊。(6)應用層,主要涉及分布式應用程序(DAPP)。DAPP的安全事件是代碼漏洞,攻擊者利用這些漏洞設計木馬病毒攻擊DAPP,導致DAPP癱瘓。
針對區塊鏈自身安全機制出現的問題,提出區塊鏈六層架構模式的解決方案。
區塊鏈數據層針對哈希函數、加密技術和時間戳攻擊分別提出相應解決方案。對于使用變色龍哈希函數篡改區塊數據的安全問題,可以將誠實節點已知的區塊高度與當前區塊最長鏈高度進行比較,如果相差很大就有可能存在篡改區塊的行為。為防止因加密技術被量子技術破解所引發的安全問題,1989年,BENNETT等[13]根據量子力學原理提出量子加密技術。有關預防時間戳攻擊可使用Oyente工具,檢測出漏洞問題。
網絡層通過傳播機制識別節點身份的安全問題,通過零知識證明、群簽名和環簽名等方案解決該問題。使用零知識證明方案,使相鄰節點除了傳播信息這一零知識證明外,不能得到其他任何信息,攻擊者無法通過其他信息推測節點身份。而群簽名和環簽名是把多個節點信息混合,使攻擊者無法從混合節點信息推測節點身份。
共識層中涉及可擴展性差和硬分叉的問題。區塊鏈中的可擴展性差問題會影響區塊鏈系統效率,因此對于系統檢測出的可擴展性差問題,需要通過ZHOU等[14]提出的鏈上和非鏈上方法解決。硬分叉帶來的重放攻擊和交易回滾問題對區塊鏈影響非常大,而對于硬分叉問題只能采取預防手段,即中本聰所說的“鼓勵誠實節點挖‘好鏈’”[15],這樣區塊鏈才能長期維持。
激勵層中發行機制問題可通過增加時間限制和優先級來解決。當費用低的交易等待時間過長時,系統會將費用低的交易優先級進行相應調整,以防止該交易等待時間過長。合約層中存在的問題,可使用基礎的檢測工具Oyente,檢測智能合約的基礎漏洞。對于區塊鏈應用層出現的DAPP漏洞問題,則需要程序不斷打補丁,修改程序出現的漏洞問題。
區塊鏈中因交易所出現的安全問題不在少數,主要有代碼漏洞、以太坊的Solidity語言和以太坊虛擬機(EVM)問題。比特幣交易所因在編寫代碼時存在整數溢出問題,被盜走幾百萬比特幣。以太坊中Solidity語言由于沒有引入構造來處理特定領域,如導致交易記錄被不可預測地重新排序和延遲。又因每個合約中都含有fallback函數,導致攻擊者利用fallback函數轉移交易所的以太幣,如The DAO攻擊。以太坊中虛擬機存在問題,即在以太傳輸時,如果收件人地址是孤立地址(不與任何用戶或合約相關聯),則以太將永遠丟失。這些問題都是交易所在創建時所攜帶的運行環境問題。
礦池的形成給攻擊者創建攻擊機會,攻擊者對礦池的攻擊行為主要有51%算力攻擊和截留攻擊。51%算力攻擊是指某一礦池中礦工數占總礦工數比例超過50%,該礦池相當于掌握區塊鏈,即產生區塊和去除區塊。截留攻擊如圖1所示,主要是礦池A為獲取收益,將自己內部礦工成員偽裝成礦池B的成員,如果偽裝者找到一個完整的解決方案,構成完整的工作證明,則其會放棄該解決方案,從而減少礦池B的總收入。雖然礦池A獲取收益,但EYAL[16]提到礦池A只是臨時獲取收益,如果礦池B同樣攻擊礦池A,它們就將面臨囚徒困境。若一池選擇攻擊,通過攻擊進行報復,則會增加收益;然而,當兩者都攻擊時,在納什均衡時,兩者賺得比兩者不攻擊時要少。

圖1 截留攻擊工作原理
對于網絡協議上存在的漏洞,APOSTOLAKI等[17]提出因邊界網關協議(BGP)存在的漏洞,攻擊者可對自治系統(AS)進行路由攻擊。路由攻擊包括分割攻擊和延遲攻擊。分割攻擊即區塊鏈中一部分節點區域受到攻擊者控制,接受或者發送信息都通過攻擊者。因此,攻擊者不僅可以獲取信息、偽造信息,還可以在不同區發送同一筆交易,導致出現雙花攻擊。延遲攻擊則是攻擊者在分割區塊鏈各個節點后,作為中間節點把發送方的信息進行修改,然后發送給接受方,這種攻擊非常隱蔽,導致接收方與發送方無法發現攻擊,并且區塊鏈網絡中絕大多數節點容易受到此類攻擊。
區塊鏈運行環境解決方案:首先是交易所的安全問題,目前研究人員針對這些漏洞設計出許多檢測工具,如MythX、Abbe和Oyente等。專業研發員根據這些工具檢查基本漏洞,防止因這些漏洞而產生的攻擊。其次是解決礦池問題中的51%算力攻擊和截留攻擊。為防止51%算力攻擊,在區塊鏈網絡中限制各礦池占總礦池的算力比例,從而阻止攻擊發生。對于解決截留攻擊的方案分為預防和阻止,其預防原理是礦池通過部分工作證明和完全工作證明的比率來估計礦工的預期采礦功率和實際采礦功率,如果結果高于設定置信區間的差異就表示攻擊。截留攻擊的阻止方案包括兩種[18]:其一是突擊測驗,即間接檢查未提交方案的礦工;其二是修改比特幣協議,其思想是將無法辨別的有效塊交給礦池進行審查,從而阻止攻擊發生。最后給出解決網絡協議安全問題的兩種方案[19]:第一種方案是無需任何協議更改的短期措施,主要包括增加節點連接的多樣性、選擇比特幣對等點時考慮路由因素、監控往返時間(RTT)、監視其他統計數據和使用不同的ASes網關等措施;第二種方案是檢測和防止路由攻擊的長期措施,主要包括加密比特幣通信、使用消息身份驗證碼、使用UDP心跳和在多個連接上請求塊等措施。
使用者安全問題主要是秘鑰的管理問題,如太平洋資本公司CEO Peter Schiff曾在登錄比特幣錢包時,因秘鑰丟失導致無法登錄;Poker EOS交易所也因團隊私鑰管理不當,導致項目賬戶私鑰泄露,其攻擊方式是攻擊者采用釣魚攻擊手段,將網站偽裝成加密貨幣交易所Kraken網站,導致大量用戶的賬號和秘鑰被盜取。
對于使用不當導致的私鑰丟失問題,HOMOLIAK等[20]構建了SmartOTPs錢包框架,提供一種安全、可用的管理加密代幣的方法,該框架能夠阻止擁有用戶私鑰或攻擊客戶端的攻擊者。對于釣魚攻擊導致的秘鑰丟失,可以使用反釣魚軟件工具來預防釣魚攻擊。
對區塊鏈安全問題進行總結,見表2。

表2 區塊鏈安全問題總結
目前,檢測模型都是針對區塊鏈六層架構或者區塊鏈某層安全問題進行檢測,這種檢測模型忽略了運行環境和使用者所帶來的問題,導致存在檢查遺漏現象。本文提出的檢測模型根據三層分類架構進行安全問題檢測,其流程如圖2所示。首先輸入安全問題,其次判斷安全分類屬于哪類安全問題,最后根據不同的分類層次進行相應的解決。這種檢測模型比單獨針對區塊鏈六層架構安全問題的分析更加全面和徹底,不僅考慮了六層架構出現的安全問題,也考慮了運行環境和使用者出現的安全問題。

圖2 模型流程圖
綜上所述,對區塊鏈自身安全機制問題、運行環境問題和使用者安全問題分別進行討論。對于區塊鏈自身安全機制問題,通過六層架構對攻擊方式與相應解決方案進行描述;對于運行環境問題,從交易所、礦池和網絡協議三方面進行研究;對于使用者安全問題,則對秘鑰管理漏洞展開分析。本文詳細闡述了區塊鏈中存在的攻擊事件,旨在維護區塊鏈安全,促進區塊鏈健康發展。
關于區塊鏈未來發展的一項研究是漏洞檢測工具的開發。目前的檢測工具只能檢測一些基本漏洞,對復雜多樣的漏洞仍檢測不出,因此未來工作應致力于研發更精準的檢測工具軟件。關于區塊鏈未來發展的另一項研究是去匿名化,雖去匿名化與區塊鏈創立之初的想法相違背,但去匿名化有利于政府部門對犯罪行為的監督。當然,區塊鏈的去匿名化和匿名化應針對具體對象而言,既滿足普通用戶的需求,又不給犯罪分子以可乘之機,旨在維護網絡安全。