近日,《區塊鏈應用藍皮書:中國區塊鏈應用發展研究報告(2019)》(下稱“藍皮書”)出版發行。
藍皮書透過大量一線調研和資料分析,系統深入地對我國區塊鏈的核心技術創新進展、行業應用發展狀況以及產業與市場的基本發展情況進行了全面梳理,總結出區塊鏈的應用發展特點、產業發展特徵以及我國區塊鏈技術及應用的挑戰與發展機遇。
技術篇中,中鈔區塊鏈技術研究院院長張一鋒、上海證券交易所技術有限責任公司執行經理朱立、中鈔區塊鏈技術研究院研究員練娜聯合撰文《區塊鏈技術與應用安全分析報告》。
以下為文章全文。
摘要:區塊鏈技術近年來快速發展,其價值得到越來越多認可的同時,技術與應用方面的安全挑戰也逐漸凸顯。本文研究了針對區塊鏈技術與應用的攻擊方式及安全事件,提出了包括基礎設施層、密碼演算法層、節點通訊層、共識協議層、執行平臺層、智慧合約層和系統應用層的七層安全模型,並針對模型各層對應的具體風險點,提出瞭解決方案。此外還探討了區塊鏈資料隱私問題。研究結果表明,區塊鏈安全是一個系統性工程,需要圍繞不同層級進行全面的安全體系建設,實現區塊鏈系統的整體安全,才能確保區塊鏈技術應用實踐的安全。
關鍵詞:區塊鏈 安全密碼演算法 共識協議 智慧合約
//
一 區塊鏈安全問題
//
區塊鏈是分散式資料儲存、點對點傳輸、共識機制、加密演算法等計算機技術的新型應用模式,是一種全新的分散式基礎架構。人們利用區塊鏈式資料結構來驗證與儲存資料,利用共識演算法來生成和更新資料,利用密碼學保證資料傳輸和訪問的安全,利用由自動執行的智慧合約來兌現以數字形式定義的承諾。所以,《經濟學人》雜誌把區塊鏈技術稱為“信任的機器”,認為區塊鏈技術可以構建一種全新的基於網路和演算法的可信資料處理方式和多方協作機制。
一直以來,安全問題都是資訊產業發展要處理的核心問題。隨著科學技術的演變和複雜化,資訊保安問題的需求日益迫切,同時也被賦予了新的內涵外延。近年來區塊鏈技術被廣泛應用到各個行業領域,作為新興資訊科技的集合,它所面臨的安全問題也日趨增長。
資訊保安工作通常強調所謂CIA三要素,即保密性(Confidentiality)、完整性(Integrity)和可用性(Availability)。區塊鏈安全工作同樣存在這三方面的要求:
機密性(應對洩露):確保在資料處理的每個交叉點上都實施了必要級別的安全保護措施以防止未經授權的訪問和資訊披露。在資料的內部儲存、相互傳輸、訪問授權等場景中,這種級別的保護措施都應該發揮作用。
完整性(應對篡改和破壞):保證資訊和系統的準確性和可靠性,並禁止對資料的非授權更改。軟硬體和通訊機制必須協同工作,才能正確地維護和處理資料,並確保資料在被傳輸時不被意外更改和蓄意破壞。
可用性(應對失效):確保授權的使用者能夠及時、可靠地訪問資料和資源。系統應能夠在可以接受的效能級別以可預計的方式執行,並以安全且快速的方式從崩潰中恢復。為此,應採取必要的保護措施消除來自內外部的威脅。
本文結合近年來區塊鏈技術與應用發展過程中出現的主流攻擊事件展開分析和探討,並嘗試給出解決方案或建議。
//
二 區塊鏈安全模型與分析
//
根據區塊鏈的技術特徵,其安全模型可以由七層架構組成,自下而上分別包括基礎設施層、密碼演算法層、節點通訊層、共識協議層、執行平臺層、智慧合約層和系統應用層。各層分別從各自層面應對相應的安全風險,實現區塊鏈系統的整體安全。
圖1 區塊鏈安全模型
其中,基礎設施層包含了區塊鏈在其上執行所需的基礎軟硬體,如作業系統;密碼演算法層包含了區塊鏈實現中所需要的密碼學技術,如非對稱加密演算法、資料摘要演算法等;節點通訊層包含了節點之間的通訊傳輸機制;共識協議層主要包含了各類共識協議;執行平臺層包含了智慧合約執行環境,如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中但不能被外部看到。當然,在實現匿名的過程中,所需的代價可能較高,也可能給追蹤與監管帶來非常大的挑戰。
//
四 結束語
//
區塊鏈是資訊網際網路向價值網際網路轉變的重要基石,是現代數字貨幣體系的可選技術之一。它以密碼學技術為基礎,透過分散式多節點“共識”機制,可以“完整、不可篡改”地記錄價值轉移(交易)的全過程。
區塊鏈作為密碼學、網路技術、資料庫等多種技術組合的新型技術,複雜程度更高,更容易出現安全問題,因此區塊鏈安全在考慮傳統技術範疇內的基礎設施安全外,更需要圍繞密碼演算法安全、節點通訊安全、共識協議安全、執行平臺安全、智慧合約安全和系統應用安全等不同的層級進行全面的安全體系建設。安全是個系統性工程,風險的發生也遵循木桶原理,容易從最薄弱的一塊板上突破。
區塊鏈技術仍然處在初期階段,其安全問題處於動態發展過程中,本報告積極探索區塊鏈安全的本質,希望為區塊鏈安全的應用實踐給出指導性建議。
參考文獻:
姚前:《區塊鏈技術的激勵相容:基於博弈論的經濟分析》,《清華金融評論》 2018年第10期。
中國資訊通訊研究所、中國通訊標準化協會:《區塊鏈安全白皮書——技術應用篇》,2018。
王李笑陽、秦波、喬鑫:《區塊鏈共識機制發展與安全性》,《中興通訊技術》2018年12月第24卷第6期。
End
來源 | 《區塊鏈應用藍皮書:中國區塊鏈應用發展研究報告(2019)》