一文看懂區塊鏈技術

中鈔區塊鏈技術研究院院長張一鋒、上海證券交易所技術有限責任公司執行經理朱立、中鈔區塊鏈技術研究院研究員練娜聯合撰文《區塊鏈技術與應用安全分析報告》。

摘要:

區塊鏈技術近年來快速發展,其價值得到越來越多認可的同時,技術與應用方面的安全挑戰也逐漸凸顯。本文研究了針對區塊鏈技術與應用的攻擊方式及安全事件,提出了包括基礎設施層、密碼算法層、節點通訊層、共識協議層、運行平臺層、智能合約層和系統應用層的七層安全模型,並針對模型各層對應的具體風險點,提出瞭解決方案。此外還探討了區塊鏈數據隱私問題。研究結果表明,區塊鏈安全是一個系統性工程,需要圍繞不同層級進行全面的安全體系建設,實現區塊鏈系統的整體安全,才能確保區塊鏈技術應用實踐的安全。

一 區塊鏈安全問題

區塊鏈是分佈式數據存儲、點對點傳輸、共識機制、加密算法等計算機技術的新型應用模式,是一種全新的分佈式基礎架構。人們利用區塊鏈式數據結構來驗證與存儲數據,利用共識算法來生成和更新數據,利用密碼學保證數據傳輸和訪問的安全,利用由自動執行的智能合約來兌現以數字形式定義的承諾。所以,《經濟學人》雜誌把區塊鏈技術稱爲“信任的機器”,認爲區塊鏈技術可以構建一種全新的基於網絡和算法的可信數據處理方式和多方協作機制。

一直以來,安全問題都是信息產業發展要處理的核心問題。隨着科學技術的演變和複雜化,信息安全問題的需求日益迫切,同時也被賦予了新的內涵外延。近年來區塊鏈技術被廣泛應用到各個行業領域,作爲新興信息技術的集合,它所面臨的安全問題也日趨增長。

信息安全工作通常強調所謂CIA三要素,即保密性(Confidentiality)、完整性(Integrity)和可用性(Availability)。區塊鏈安全工作同樣存在這三方面的要求:

機密性(應對泄露):確保在數據處理的每個交叉點上都實施了必要級別的安全保護措施以防止未經授權的訪問和信息披露。在數據的內部存儲、相互傳輸、訪問授權等場景中,這種級別的保護措施都應該發揮作用。
完整性(應對篡改和破壞):保證信息和系統的準確性和可靠性,並禁止對數據的非授權更改。軟硬件和通信機制必須協同工作,才能正確地維護和處理數據,並確保數據在被傳輸時不被意外更改和蓄意破壞。
可用性(應對失效):確保授權的用戶能夠及時、可靠地訪問數據和資源。系統應能夠在可以接受的性能級別以可預計的方式運行,並以安全且快速的方式從崩潰中恢復。爲此,應採取必要的保護措施消除來自內外部的威脅。

本文結合近年來區塊鏈技術與應用發展過程中出現的主流攻擊事件展開分析和探討,並嘗試給出解決方案或建議。

二 區塊鏈安全模型與分析

根據區塊鏈的技術特徵,其安全模型可以由七層架構組成,自下而上分別包括基礎設施層、密碼算法層、節點通訊層、共識協議層、運行平臺層、智能合約層和系統應用層。各層分別從各自層面應對相應的安全風險,實現區塊鏈系統的整體安全。
在這裏插入圖片描述
其中,基礎設施層包含了區塊鏈在其上運行所需的基礎軟硬件,如操作系統;密碼算法層包含了區塊鏈實現中所需要的密碼學技術,如非對稱加密算法、數據摘要算法等;節點通信層包含了節點之間的通訊傳輸機制;共識協議層主要包含了各類共識協議;運行平臺層包含了智能合約運行環境,如EVM虛擬機;智能合約層主要包含各類部署在區塊鏈上的業務合約;系統應用層指基於智能合約,結合傳統IT技術構建的可被最終用戶訪問的各類應用。

各層之間面臨着不同的安全風險:

  • 基礎設施層主要面臨黑客通過傳統安全漏洞進行攻擊的風險;
  • 密碼算法層主要面臨密碼學算法本身在加密強度、前提假設等方面存在的問題,以及其代碼實現過程中存在漏洞的風險;
  • 節點通訊層主要面臨節點傳播與驗證機制的風險,以及因爲點對點組網(主要在公鏈中使用)而形成的網絡拓撲特徵、消息傳送時間不確定、網絡分裂等因素帶來的攻擊;
  • 共識協議層因共識和激勵機制的不同而面臨不同類型的攻擊風險;
  • 運行平臺層主要面臨區塊鏈運行平臺本身實現過程中存在的漏洞帶來的風險,比如虛擬機逃逸等;
  • 智能合約層主要面臨的多種攻擊風險有:Solidity語言漏洞、時間戳依賴攻擊等;
  • 系統應用層安全風險主要集中在用戶節點、數字資產錢包以及交易平臺上。

據統計2011-2018年9月,智能合約層和系統應用層安全事件所佔整體安全事件比重一直穩定在90%以上。進入2018年以後,由於智能合約快速應用,其對應的安全事件所佔比重呈現出一定的上漲。

2018年區塊鏈安全事件同比增長近400%,安全攻擊主要集中在系統應用層和智能合約層,分別佔60%與30%左右。

01 基礎設施層

區塊鏈節點服務器仍存在被黑客植入木馬、竊聽網絡通信、DDOS攻擊等安全風險。雖然區塊鏈技術本身能夠在一定程度上抵禦少數節點被惡意控制所造成的破壞,但如果因爲底層系統漏洞使得黑客可以輕易控制大部分節點,整個區塊鏈網絡仍會面臨較大危險。

這方面因爲與傳統IT系統的安全攻擊與防護沒有太大的差異,所以本文不展開做詳細的闡述。

02密碼算法層

加密算法是保證區塊鏈的安全性和不可篡改性的關鍵,爲區塊鏈的信息完整性、認證性和不可抵賴性提供了關鍵保障。

根據被破譯的難易程度,不同的密碼算法具有不同的安全等級。不存在絕對的安全,如果破譯密文的代價大於加密數據的價值,那麼可以認爲“安全的”;如果破譯密文所需的時間比加密數據的時間更長,那也可以認爲是“安全的”。

區塊鏈技術大量依賴了密碼學的研究成果,如非對稱算法和哈希(Hash)算法。這些密碼算法目前是相對安全的,但並非絕對安全。

一是存在對密碼學算法的攻擊方法,如作用於散列函數的窮舉攻擊、碰撞攻擊、長度擴展攻擊。

窮舉攻擊是指是對截獲到的密文嘗試遍歷所有可能的密鑰,直到獲得了一種從密文到明文的可理解的轉換;或使用不變的密鑰對所有可能的明文加密直到得到與截獲到的密文一致爲止。

碰撞攻擊是指攻擊者找到算法的弱點,瓦解它的強抗碰撞性,使攻擊者能在較短的時間能尋找到值不同但hash相同的兩個值。

長度擴展攻擊是指針對某些允許包含額外信息的加密散列函數的攻擊手段。在已知密文hash和密文長度的情況下,推導出密文與另一消息拼接後計算出來的hash。

二是算法實現過程中可能存在後門和漏洞,威脅到區塊鏈系統的安全性。比如,所採用的密碼算法本身雖然沒有安全漏洞,但算法庫的實現存在錯誤,這類代碼編程過程中形成的漏洞,有可能成爲區塊鏈實踐中黑天鵝安全事件爆發的誘因,例如:OpenSSL就曾因代碼編寫錯誤出現密鑰安全漏洞。

三是未來可能作用於多種密碼學算法的量子攻擊。隨着量子計算機算力提升,使得窮舉時間複雜度大大降低,目前多種加密算法面臨被瓦解的風險。

因此,爲在密碼算法層防範安全風險,應當注意以下幾點。

第一,儘量採用經過安全認證的硬件密碼機或算法庫,來保證密碼算法和密鑰管理方面的安全性。

第二,應充分考量隨着時間的推移支持遷移到新算法的可行性。計算機計算能力變得更快,這變相降低了現有算法的強度,當前一般通過增加密鑰長度的方式以抵消其帶來的風險。不排除未來出現安全性更高、速度更快、計算和存儲資源要求更少的優異特性的新算法的可能。

第三,充分考量密鑰管理的重要性。區塊鏈系統包含的各種密鑰和Hash值等數據需要得到有效保護和管理,以保證區塊鏈系統自身不受損害。密鑰的安全至關重要,其管理系統應包括密鑰創建、密鑰派生、密鑰分發、密鑰存儲和安全審計等安全性管理功能。

第四,充分考量在用戶丟失密鑰、密鑰過期或受到其他危害時使用區塊鏈的例外程序。密鑰或私鑰的盜竊風險可以通過限制密鑰的有效期和使用量來緩解。實踐中,某些區塊鏈系統因沒有設計任何方法來替換被盜用的密鑰,導致用戶損失。

第五,加密算法應當在安全性和計算成本之間有所折衷。在應用環境中,應根據特定行業所需的保護級別,選擇合適的密碼算法和密鑰長度。要特別注意的是,雖然目前依賴現有的密碼算法的加密算法和密鑰長度可以滿足當前的安全需求,但需要充分考慮量子計算的發展在未來可能帶來的影響。

03節點通信層

大部分公有區塊鏈系統以P2P網絡爲基礎,P2P網絡技術重要的特點就是開放性,它在帶來方便的同時,也伴隨着各種安全問題。P2P網絡依賴附近的節點進行信息傳輸會暴露對方的IP,攻擊者可以利用這個漏洞給其他節點帶來安全威脅,區塊鏈節點可能是普通家庭PC,可能是雲服務器等等,其安全性參差不齊,其中安全性較差的節點更易遭受攻擊,進而影響P2P網絡的整體安全。

針對P2P網絡,攻擊者可以發動日蝕攻擊、竊聽攻擊、分割攻擊、延遲攻擊、拒絕服務攻擊(DDoS)等攻擊。

日蝕攻擊是其他節點實施的網絡層面攻擊,其攻擊手段是囤積和霸佔受害者的點對點連接的對等節點,將該節點從主網中隔離,這樣的節點被爲日蝕節點。這種類型的攻擊旨在阻止最新的區塊鏈信息進入到日蝕節點,使其成爲信息孤島,甚至控制其信息輸入。

竊聽攻擊可以使攻擊者將區塊鏈中的用戶標識與IP關聯起來。

分割攻擊的攻擊者可以利用邊界網關協議(BGP)劫持來將區塊鏈網絡劃分成兩個或多個不相交的網絡,此時的區塊鏈會分叉爲兩條或多條並行鏈。攻擊停止後,區塊鏈會重新統一爲一條鏈,以最長的鏈爲主鏈。其他的鏈將被廢棄,其上的交易、獎勵等全部無效。

延遲攻擊是攻擊者利用邊界網關協議劫持來延遲目標的區塊更新,而且不被發現。因爲它是基於中間人修改目標請求區塊的數據來做到的,在目標請求獲取最新區塊的時候,將它的這一請求修改爲獲取舊區塊的請求,使得目標獲得較舊的塊。

DDoS攻擊是通過大流量或漏洞的方式攻擊P2P網絡中的節點,使網絡中部分節點網絡癱瘓。

2018年3月閃電網絡遭受DDoS攻擊,導致大約200個節點離線,節點從大約1050個降到了870個。只要閃電網絡骨幹節點被攻擊,整體網絡就會面臨巨大危險。理論上節點分佈更均衡可以解決該問題,但是閃電網絡很難做到分佈均衡,就像其開發者所說的:“我部署的閃電網絡服務從一開始就遭受僵屍網絡的攻擊。在對抗條件下部署去中心化很難。”尤其不少許可鏈的項目,其共識節點大量集中部署在單一雲計算服務供應商的網絡內,更容易受到這方面的影響。

公有鏈對加入其中的用戶不設任何訪問授權機制,惡意節點可在加入後刻意擾亂運行秩序,破壞正常業務;而許可鏈儘管設置了不同等級的訪問控制機制,也可能存在惡意節點利用漏洞混入進而展開攻擊,或發生節點聯合等情況。

鑑於以上這些情況可能帶來的安全威脅:應在對等節點進行信息傳輸時進行加密,包括傳輸過程的加密和信息本身的加密;應通過安全散列計算及數字簽名等技術保證傳輸過程中數據的完整性;應通過節點身份認證防止信息傳遞過程中受到攻擊。對許可鏈而言,具體做法一是採取節點授權准入原則,二是在終端接入時進行身份認證,三是在交易前對節點通信雙方進行身份認證。

04共識協議層

區塊鏈有不同的類型,如根據准入機制不同,區塊鏈分爲公有鏈和許可鏈。這就需要相適應的共識機制來保證鏈上最後的區塊能夠在任何時候都反應出全網的狀態。共識機制是維持區塊鏈系統有序運行的基礎,相互間未建立信任關係的區塊鏈節點通過共識機制,共同對寫入新區塊的信息達成一致。

以Fabric爲代表的許可鏈系統使用PBFT共識機制。PBFT是一種狀態機副本複製算法,即作爲狀態機進行建模,使得狀態機可以在分佈式系統的不同節點進行安全可靠的副本複製。對於許可鏈來說,由多信任方共同管理維護,節點信任度高,使得PBFT成爲首選共識機制。只要大於2/3的節點是誠實的,PBFT就能在理論上保證系統的安全性,所以目前沒有針對PBFT的有效攻擊方法。

公有鏈與許可鏈在共識協議安全上考慮的因素不盡相同。以PBFT爲代表的傳統BFT算法的安全前提通常只假設整個網絡中惡意節點不超過一定比例(比如不超過33%),但不去追究或考慮惡意節點的比例爲何可以滿足實際要求,也不考慮如何通過制度設計引導節點控制者的行爲以促成惡意節點的比例不超閾值。但對於大部分公有鏈而言,由於節點可以匿名地動態加入及退出,如果沒有良好的基於經濟人假設的獎懲制度設計,合作不會自動產生,類似於“惡意節點比例不超閾值”這樣的安全前提也不會神祕地自動滿足。所以本文所說的“共識機制”,也包括區塊鏈的激勵機制。

以比特幣爲代表的公有鏈多使用POW共識機制。POW共識機制本質上就是在所有提供算力資源的集羣中通過一種算法機制選擇出一個幸運節點,因POW算法不存在終局性(即可被後期追趕的最長鏈推翻)狀態,一旦總算力過小,則非常容易被攻擊者劫持整個區塊鏈,嚴重影響區塊鏈系統的安全性。尤其隨着通用礦機(可以挖多種幣的礦機)和算力雲化租賃服務的出現,算力分佈更容易隨着租賃方的變化在不同鏈之間快速切換,這是因爲此時某條鏈上的加密貨幣受到攻擊而貶值不會影響到礦機擁有者的利益,所以礦機擁有者有動力出租礦機給黑客而不顧及用途,從而降低了51%攻擊的門檻。如果礦機擁有者擁有的礦機只能用於挖掘某一種特定的加密貨幣,則其利益在相當程度上和特定加密貨幣的安全性是一致的,此時礦機擁有者隨意出借礦機給攻擊者允許其造成這種加密貨幣的價格大幅下跌,就變得非常不理性,因此攻擊者就較難通過短期租賃算力的方式開展這種攻擊。這正是一個典型的激勵不相容降低公有鏈安全性的案例。

以Peercoin爲代表的加密貨幣使用POS共識機制。採用工作量證明機制發行新幣,採用權益證明機制維護網絡安全。POS機制根據每個節點擁有代幣的比例和時間,依據算法等比例地降低節點的挖礦難度,從而加快了尋找隨機數的速度。這種共識機制可以縮短達成共識所需的時間,但本質上仍然需要網絡中的節點進行挖礦運算。

常見的針對公鏈共識機制的攻擊有51%攻擊、長距離攻擊、幣齡累計攻擊、預計算攻擊等。其中長距離攻擊、幣齡累計攻擊、預計算攻擊是針對POS共識機制的;51%攻擊是針對POW共識機制的。

在區塊鏈的實施中如何選擇共識機制,取決於實際場景對共識機制安全性與效率的要求,共識機制發展最終是資源消耗、節點擴展、安全性、效率和開放性這五個因素的均衡。

05運行平臺層

區塊鏈的運行平臺層,在密碼算法層、節點通信層、共識協議層的基礎上構建了面向智能合約和區塊鏈應用的運行環境,是構成區塊鏈PAAS服務的核心部分,其攻擊與安全風險主要來自於智能合約虛擬機的設計與實現。智能合約虛擬機是區塊鏈智能合約的運行環境。安全的智能合約虛擬機是沙盒封裝的,並確保其運行環境是完全隔離的,即在智能合約虛擬機中運行代碼是無法訪問網絡、文件系統和其他進程的。甚至智能合約之間的訪問和調用也需要接受必要的管理和限制。

智能合約虛擬機運行在區塊鏈的各個節點上,接收並部署來自節點的智能合約代碼,若虛擬機存在漏洞或相關限制機制不完善,很可能運行來自攻擊者的惡意的智能合約。目前針對合約虛擬機的主要攻擊方式有:逃逸漏洞攻擊、邏輯漏洞攻擊、堆棧溢出漏洞攻擊、資源濫用漏洞攻擊。

逃逸漏洞攻擊是指在虛擬機運行字節碼時提供沙盒環境,一般用戶只能在沙盒的限制中執行相應的代碼時,此類型漏洞會使得攻擊者退出沙盒環境,執行其他本不能執行的代碼。

邏輯漏洞攻擊是指利用編碼不合規範,未對特定數據或代碼做容錯處理,進而構建特定場景,導致系統出現邏輯問題。

堆棧溢出漏洞攻擊是指攻擊者通過編寫惡意代碼讓虛擬機去解析執行,最終導致棧的深度超過虛擬機允許的最大深度,或不斷佔用系統內存導致內存溢出。

資源濫用攻擊是指攻擊者在虛擬機上部署一份惡意代碼,消耗系統的網絡資源、存儲資源、計算資源、內存資源。

2018年5月29日,國內安全軟件360安全衛士在其官方微博上發佈長文《360發現區塊鏈史詩級漏洞,可完全控制虛擬貨幣交易》,指出在EOS平臺的智能合約虛擬機中發現一系列新型安全漏洞。如果這一系列安全漏洞受到攻擊,攻擊者會構造併發布包含惡意代碼的智能合約,EOS超級節點將會執行這個惡意合約,並觸發其中的安全漏洞。攻擊者再利用超級節點將惡意合約打包進新的區塊,就會導致網絡中所有安全節點(備選超級節點、交易所充值提現節點、加密貨幣錢包服務器節點等)被遠程控制。之後,攻擊者可以“竊取EOS超級節點的密鑰,控制EOS網絡的虛擬貨幣交易,獲取EOS網絡參與節點系統中的其他金融和隱私數據,例如交易所中的加密貨幣、保存在錢包中的用戶密鑰、關鍵的用戶資料和隱私數據等”。

雖然因爲EOS當時處於早期階段並未正式上線,沒有形成很嚴重的後果,但因爲運行平臺層技術實現上的複雜性,以及其自身新的功能也在不斷迭代開發,所以新的 bug 和安全漏洞可能會不斷被發現,其面臨的安全威脅也將不斷變化。因此,僅僅防範已知的漏洞是不夠的,還需要具有新的開發理念,一是有出現錯誤能即時終止的手段以及及時修復bug的途徑;二是謹慎發佈和校驗智能合約;三是通過公開資源來確保獲取到最新的安全進展;四是對區塊鏈的特性加深理解。

06智能合約層

智能合約本質是一段運行在區塊鏈網絡中的代碼,它完成用戶所賦予的業務邏輯。一方面,區塊鏈爲智能合約的運用提供可信的計算運行平臺,另一方面,智能合約大大擴展了區塊鏈的應用範圍。合約條款由計算機代碼評估並執行不受人爲干預,所以合約代碼一旦上鍊,執行過程和結果都完全公開而且不可篡改。隨着智能合約的廣泛應用,出現了各種漏洞攻擊事件,安全風險問題日益嚴重。智能合約漏洞一旦被黑客利用就可能導致很多嚴重的安全問題,特別是資產安全問題。

一旦智能合約的編程代碼設計不完善,就可能出現安全風險。其安全風險包含了三個方面:第一,漏洞風險,包括合約代碼中是否有常見的安全漏洞。第二,可信風險。沒有漏洞的智能合約,未必就安全,合約本身要保證公平可信。第三,不合規範風險。由於合約的創建要求以數字形式來定義承諾,所以如果合約的創建過程不夠規範,就容易留下巨大的隱患。

目前針對智能合約的主要攻擊方式有:可重入攻擊、調用深度攻擊、交易順序依賴攻擊、時間戳依賴攻擊、誤操作異常攻擊、整數溢出攻擊和接口權限攻擊等。

可重入攻擊是指當一個合約調用另一個合約的時候,當前的操作就要等到調用結束之後纔會繼續。這時,如果被調用者需要使用調用者當前所處的狀態,就可能發生問題。2017年7月,以太坊錢包Parity爆出極其嚴重的的漏洞,使得攻擊者從三個高安全的多重簽名合約中竊取到超過15萬ETH(約3000萬美元)。攻擊者通過調用initWallet智能合約(理論上這個智能合約只允許被調用成功一次),而initWallet智能合約未設置重入檢查,以防止攻擊者多次初始化智能合約將這個錢包合約的所有者進行覆蓋從而將錢包所有者修改爲攻擊者,這相當於從unix中獲得了root權限。

調用深度攻擊針對虛擬機中智能合約的調用深度限制,這個限制是爲了防止調用棧資源被濫用。調用深度攻擊可以讓合約調用失敗,即使這個調用在邏輯上不存在任何問題,在虛擬機層面已經不被允許了,因爲調用深度達到了虛擬機中的閾值,不再往下執行。攻擊者可以通過控制調用深度來使某些關鍵操作無法執行,如轉賬、餘額清零等。

交易順序依賴攻擊是指交易進入未確認的交易池,並可能被礦工無序地包含在區塊中,因此打包在區塊中的交易順序與交易生成的順序完全不同。如果攻擊者可監聽到網絡中對應合約的交易,然後發出他自己的交易來改變當前的合約狀態,例如對於懸賞合約減少合約回報,則有一定機率使這兩筆交易包含在同一個區塊下面,並且排在另一個交易之前,完成攻擊。

時間戳依賴攻擊是指攻擊者可以通過設置區塊的時間戳來儘可能滿足有利於他的條件,從中獲利。

誤操作異常攻擊是指當一個合約調用另外一個合約時,後者操作可能執行失敗,從而退回到未執行前的狀態,此時前者若不檢查後者執行的結果繼續往下執行,會導致很多問題。

整數溢出攻擊是指如果攻擊者向智能合約提供了一個超出代碼處理範圍的參數,就會產生崩潰結果,這樣的崩潰助長了多重攻擊。崩潰可能觸發拒絕服務攻擊,更嚴重地,關於系統內部的重要信息可能會在錯誤消息中泄漏。2018年初,區塊鍊形式化驗證平臺VaaS(Verification as a Service)檢測發現,基於EOS區塊鏈的代幣合約同樣可能存在BEC代幣合約類似的整數溢出漏洞。

接口權限攻擊是指智能合約錯誤地將高權限的接口暴露給普通用戶調用,導致系統狀態出現異常。常見的接口權限攻擊多出現在ERC20 代幣合約的鑄幣權限上,一些開發者沒有在初始化後關閉鑄幣權限,導致任何人可以調用生成新的代幣。2017年11月,著名的Parity 多籤錢包被一個用戶誤觸發了共享庫銷燬函數,導致價值2.85億美元的以太幣永久鎖定。

從以上的安全事件可以看出,現階段智能合約並不完善,存在的各種漏洞一旦被黑客利用,就會造成資產損失。解決這些問題仍具有挑戰性。以整數溢出爲例,智能合約中有存在針對數值的計算和存儲都是在無符號整數的範圍中計算和存儲的情況。一旦提供的數字輸入或計算結果超過定義的字節數(即其數值範圍超過了正常能夠表示的數值範圍),則會發生數值溢出情況。此種情況一旦在合約中出現,極易影響其合約中的處理邏輯和數值狀態,導致驗證的安全問題。如2018年4月,黑客利用美鏈BEC代幣智能合約中的數據溢出的漏洞進行攻擊,成功地向兩個地址轉出了天量級別的BEC代幣,導致市場上海量BEC被拋售,BEC價格幾小時內幾近歸零。

智能合約的本質是代碼,它界定了各方使用合約的條件,在滿足合約條件下機器指令被執行,其開發本身對程序員就是一項挑戰。受限於自身的安全意識和代碼編寫能力,開發人員一旦沒有全面考慮可能應對的風險,智能合約的可靠性就難以保證。

爲防範智能合約層的安全風險,首先,在開發數值計算相關的智能合約時應該使用安全數值計算庫,並做完整的生命週期式安全合規檢查,防止整數溢出漏洞;應充分考量智能合約執行的功能,不能對數據完整性、安全性和平臺穩定性產生負面影響。

其次,智能合約不可避免地與區塊鏈之外的應用程序相互作用,目前沒有方法和標準可以將與外部應用程序連接時引入安全漏洞的風險降至最低。所以一方面需要先進行智能合約協議安全性分析,防止業務邏輯漏洞的出現;另一方面應對與外部應用程序進行智能合約交互進行標準化,爲保護完整性、安全性和穩定性提供指導。

最後,在系統安裝智能合約代碼時,確保代碼來自正確的可信提供商並且未被修改,如果攻擊者有能力安裝惡意智能合約代碼則可以改變智能合約的行爲。必須有控制措施確保智能合約只能由已被授權人員安裝,或能將部署在鏈上的代碼和公佈的合約源碼自行編譯後的結果進行比對以確認其一致。

07系統應用層

系統應用層涉及不同行業領域的場景和用戶交互,導致各類傳統安全隱患較爲集中,成爲攻擊者實施攻擊的首選。2018年7月至12月間,EOS鏈上的DApp共發生49起安全事件,波及37個DApp,導致項目方共損失近75萬枚EOS,按照攻擊發生時的幣價折算,總損失約合319萬美元。

加密貨幣交易平臺是爲用戶提供在線交易服務的重要渠道。不論是內部泄露數據還是外部黑客入侵,都會造成關鍵信息泄露。目前針對交易平臺的攻擊主要包括:賬戶泄露攻擊(撞庫、窮舉)、DDoS攻擊、Web注入攻擊、釣魚網頁攻擊。

賬戶泄露攻擊(撞庫、窮舉)是指攻擊者通過手機互聯網上已公開或還未公開的用戶名、郵箱、密碼等信息來在要攻擊的網站上通過程序批量嘗試。若網站不對登陸接口做請求限制或者風控,則會導致攻擊者可以無限發送請求逐個測試可能的值來暴力破解某些關鍵信息。

2017年10月2日,OKCoin旗下交易所出現大量賬戶被盜情況,不完全統計損失金額在1000萬元人民幣左右,用戶懷疑平臺已被攻擊,或有已被關閉平臺的交易所員工向黑客泄漏了平臺用戶的賬戶信息,黑客通過用戶信息破解賬戶密碼登錄平臺,然後在平臺上完成數字資產轉移。

DDoS攻擊是攻擊者想辦法讓目標機器停止提供服務,若交易平臺被DDoS攻擊,不但交易平臺蒙受損失,加密貨幣的交易量也將大大減少,間接影響價格漲跌。

Web注入攻擊是指通過對web連接的數據庫發送惡意的SQL語句而產生的攻擊,從而產生安全隱患和對網站的威脅,可以造成逃過驗證或者私密信息泄露等危害。

釣魚網頁攻擊是指是一種企圖從電子通訊中,通過僞裝成用戶信任的網頁以獲得如用戶名、密碼和信用卡明細等個人敏感信息的犯罪詐騙過程。常用手段是導引用戶到URL與界面外觀與真正網站幾無二致的假冒網站輸入個人數據。就算使用強式加密的SSL服務器認證,要偵測網站是否仿冒實際上仍很困難。

區塊鏈的錢包是密鑰管理的工具,錢包中包含公私鑰對,私鑰與用戶的資產直接相關。用戶用私鑰進行簽名交易,從而證明用戶交易的輸出權。獲取了私鑰,就獲得了資產的使用權和交易權。目前主流的錢包分爲軟錢包和硬件錢包。

軟錢包一般運行在有互聯網連接的設備上,因此也稱其爲熱錢包,例如電腦客戶端錢包、手機APP錢包、網頁錢包等。用軟錢包交易是很方便的,但是安全性相對於硬件錢包來說要低很多。主要攻擊手段包括私鑰竊取、破解攻擊、APP內存篡改攻擊。

私鑰竊取是指由於錢包私鑰文件多點備份不安全導致錢包私鑰泄露。經調查,在互聯網可接入的地方,都能看到密鑰的存儲。攻擊者可以針對密鑰文件進行專門掃描,以及開發相關的木馬病毒進竊取。2019年1月14日,加密貨幣交易所Cryptopia被盜,成爲2019年第一黑客盜竊事件,共有價值1600萬美元的以太坊ETH被盜竊。此次攻擊涉及了大量錢包,超過7.6萬,而且這部分錢包都沒有基於智能合約,這意味着黑客獲得的私鑰數量不是一個兩個而是成千上萬。

APP內存篡改攻擊是指攻擊者通過控制內存中的應用代碼,解析出APP內邏輯、功能、流程、漏洞等各類關鍵內容,針對發現的漏洞植入相應後門代碼並針對APP進一步攻擊。

硬件錢包的私鑰存儲和運算,往往是運行在封閉的硬件(如安全芯片)內部,沒有直接暴露在互聯網或開放的軟件運行環境中,有時候也被叫做冷錢包,其安全性要遠高於軟錢包,但往往不方便交易。但硬件錢包也非絕對安全,比如2018年初硬件錢包製造商Ledger公司產品上發生過的中間人攻擊,以及第35屆混沌通訊大會(35C3)上WalletFail團隊所展示的側通道攻擊(side channel assault)等,都說明硬件錢包的安全仍需要不斷的完善。

還有一種針對錢包私鑰的攻擊叫作“彩虹攻擊”,即通過事先遍歷所有常見的助記詞組合並預先生成對應的公私鑰,然後在網絡中尋找已經被彩虹表記錄碰撞出來的賬戶,一旦被彩虹表碰撞,則意味着攻擊者擁有了對應賬戶的控制私鑰,驗證威脅賬號安全。該安全攻擊手段使得熱錢包和冷錢包都面臨較大的風險。2018年7月11日上午,在發佈EOS賬戶存在”彩虹“攻擊風險的高危預警後,區塊鏈安全公司PeckShield緊急啓動部署了一系列應急處理方案。其中啓用的EOS Rescuer公共查詢服務已累計提供數萬次查詢,監測到的受影響的高危賬戶資產也已做妥善管理。

爲應對系統應用層的安全風險:平臺端上線前應進行滲透測試,運行中進行全方位安全防護,同時制定遭受攻擊後的應對措施。錢包端因爲涉及加密資產的安全,更容易被攻擊者攻擊。這其中私鑰的保護最爲重要,用戶私鑰的生成最好使用隨機字符串進行生成,若允許用戶自定義輸入則必須輸入足夠複雜的助記詞。應該加密保存私鑰,恪守按需使用、離線使用的原則使用私鑰,尤其不應該通過網絡傳輸私鑰。另外,結合門限簽名等密碼算法的私鑰管理方案,對於錢包端私鑰的安全保護,也具有重要的實踐意義。

事實上在實踐中,大部分的區塊鏈系統應用層的安全問題,都不是區塊鏈自身的安全風險帶來的,甚至與區塊鏈本身沒有絲毫關係。比如大量加密貨幣交易平臺爆出的安全問題,本質上都是其自身上層應用中存在的安全管理漏洞所致,不涉及底層的區塊鏈技術。但是很多輿論宣傳傾向於把這類安全事件歸類到和區塊鏈相關的安全案例中。所以還是需要人們提高風險辨別能力,對風險能夠有清晰的認識從而加以正確的區分。

三 區塊鏈隱私泄露問題

在CIA三要素中,區塊鏈在確保完整性和可用性方面天然具有某種優勢,但在確保機密性方面尚存在較大挑戰。

隱私是一種與公共利益、羣體利益無關,當事人不願他人知道或他人不便知道的個人信息(只能公開於有保密義務的人)、當事人不願他人干涉或他人不便干涉的個人私事,以及當事人不願他人侵入或他人不便侵入的個人領域。

在區塊鏈上,實體的標識信息及其在區塊鏈上的交易活動信息都可能被用戶認爲有隱私保護的必要。區塊鏈上個人信息保護可參考的法規有我國的《GB/T35273-2017 信息安全技術個人信息安全規範》中關於開展收集、保存、使用、共享、轉讓、公開披露等個人信息處理活動應遵循的原則和安全相關要求,以及國際上的《通用數據保護條例》(General Data Protection Regulation)。

區塊鏈技術的邏輯要求相關上鍊數據必須得到不同節點的共識驗證,因此,區塊鏈上的數據隱私保護與傳統的數據隱私保護相比,具有不同的特點與要求,往往需要設計專門的隱私保護策略:一是設計隱私保護技術方案,區塊鏈在設計和實現時,宜考慮提供適當的隱私保護方案來加強對其上運行的隱私數據的保護。二是鏈上(on-chain)鏈下(off-chain)分割,區塊鏈上的隱私保護,需根據實現方案考慮鏈上和鏈下隱私數據的保護策略。三是訪問控制,區塊鏈在設計和實現時,應採取技術措施控制隱私相關數據的訪問權限,對隱私數據訪問者進行身份驗證並檢查其授權。四是需要重點研究同態加密、零知識證明、安全多方計算、TEE(如SGX)等技術領域,最大限度地爲區塊鏈體系提供隱私保護能力。同態加密在保證信息不解密的情況下運行。零知識證明即證明者能夠在不向驗證者提供信息本身內容的情況下,使驗證者相信某個論斷真實可信,保證身份的匿名性。安全多方計算是解決一組互不信任的參與方之間隱私保護的協同計算問題,安全兩方計算作爲其特例,一般基於混淆電路和不經意傳輸等技術實現。TEE技術則是在信任特定硬件設備(如Intel芯片的SGX功能)難以攻破的前提下選擇在受硬件保護的Enclave環境中解密外部輸入數據、執行智能合約代碼、加密輸出數據,此過程中明文信息只出現在Enclave中但不能被外部看到。當然,在實現匿名的過程中,所需的代價可能較高,也可能給追蹤與監管帶來非常大的挑戰。

四 結束語

區塊鏈是信息互聯網向價值互聯網轉變的重要基石,是現代數字貨幣體系的可選技術之一。它以密碼學技術爲基礎,通過分佈式多節點“共識”機制,可以“完整、不可篡改”地記錄價值轉移(交易)的全過程。

區塊鏈作爲密碼學、網絡技術、數據庫等多種技術組合的新型技術,複雜程度更高,更容易出現安全問題,因此區塊鏈安全在考慮傳統技術範疇內的基礎設施安全外,更需要圍繞密碼算法安全、節點通信安全、共識協議安全、運行平臺安全、智能合約安全和系統應用安全等不同的層級進行全面的安全體系建設。安全是個系統性工程,風險的發生也遵循木桶原理,容易從最薄弱的一塊板上突破。

區塊鏈技術仍然處在初期階段,其安全問題處於動態發展過程中,本報告積極探索區塊鏈安全的本質,希望爲區塊鏈安全的應用實踐給出指導性建議。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章