王崇宇,朱宇坤,陳瑞東
(電子科技大學,四川 成都 611731)
自2013年起,國家接連頒布多項與區塊鏈相關的重大政策,2017年,中國信息技術部門成立區塊鏈研究實驗室。而中央在2019年則將區塊鏈作為核心技術自主創新的重要突破口[1]。2021兩會,區塊鏈更是被納入到五年規劃中。從2016年國務院發布《“十三五”國家信息化規劃》到2021年的“十四五”,短短幾年,區塊鏈技術在國內已經逐漸從理論研究走向實際應用,成為國家層面發展戰略。但區塊鏈底層平臺、應用服務等方面都在飛速發展的同時,對區塊鏈的測評研究目前還依舊處于探索階段,行業缺乏統一的評價標準,面臨著區塊鏈安全風險難以評估對比的痛點。因此面向科學、系統的區塊鏈測評體系構建的普遍需求,開展區塊鏈安全測評技術研究尤為重要。基于此,本文主要針對當前區塊鏈相關技術標準及各個層級間的安全風險問題進行了深入分析,提出了包含功能、性能、安全性及可靠性等方面測評指標的安全測評模型。
在區塊鏈網絡中,所有節點維護自己的公私鑰密鑰對,基于公私鑰體系保障數據傳輸的安全性。在區塊鏈中非對稱加密主要用于數據加密和簽名[2]。數據加密、簽名主要都是對一個消息的內容進行處理,進而確保區塊鏈安全。數據加密通常是用消息接收方的公鑰進行加密,而數字簽名則通常是用發送方的私鑰加密。這兩種方式分別保障了區塊鏈網絡底層數據的可靠傳輸和可信驗證。
哈希散列算法通過散列函數把數據進行變換后,生成一個數據摘要,固定每個數據量的格式。函數將數據打亂混合后,重新創建由短隨機字母和數字組成的字符串(散列值/哈希值),成為數據指紋[3],用來標識區塊,若區塊變化,則對應散列值也對應發生變化。而區塊鏈中Merkle Tree的引入,更是靈活地將樹形結構和哈希列表結合到一起,解決了哈希算法可能存在哈希沖突的問題。
P2P網絡的出現,建立了一個相互通信的對等計算機網絡,每個節點都具有路由的功能,不同類型節點包含部分功能,這種網絡結合分布式存儲構成了區塊鏈網絡層結構的基礎,基于P2P網絡去中心化等特性,區塊鏈可以針對不同節點進行設計,劃分出挖礦節點、輕節點等角色[4],從而產生后續的相關算法。
共識機制讓眾多節點構成的區塊鏈分布較為均勻。區塊鏈解決了在不可信信道上傳輸信息、價值轉移等問題 ,而共識機制解決了區塊鏈如何在分布式場景下達成一致性的問題[5]。例如針對公鏈,中本聰在《Bitcoin:A peer-to-peer electronic cash system》中提及工作量證明(POW)共識機制,這種機制在去中心化的思想下解決了節點間相互信任的問題。
智能合約是一種在滿足特定條件時,自動執行的計算機程序。Nick Szabo 將智能合約定義為:一個智能合約是一套以數字形式定義的承諾(commitment),包括合約參與方可以在上面執行這些承諾的協議[6]。當條件成立時自動去執行,不需要三方參與共享程序代碼,具有去信任、經濟高效、無需三方仲裁的特點。
區塊鏈詳細架構如圖1所示。與TCP/IP四層模型的分層結構有些許相近,區塊鏈主要分為數據層、網絡層、共識層、激勵層、合約層和應用層,各層之間相互配合實現P2P的共識模式。通過針對區塊鏈模型不同層級進行風險分析,使得后續評估模型的構建更為準確。區塊鏈的數據層使用大量密碼學算法確保安全,如非對稱加密、哈希加密等,主要進行數據存儲,具有典型中心化和封裝鏈式結構的特點。而區塊鏈網絡層由P2P網絡構成,確保節點連接和通信,進行廣播驗證等操作。區塊鏈共識層包含共識機制算法,通過共識選舉記賬節點,同時進行賬本同步,確保全網節點交易數據一致。激勵層一般僅作用于公鏈,進行代幣發行機制和分配機制,懲罰不守規則的節點。合約層封裝腳本算法和合約,使區塊鏈具有可編程的特性。應用層則封裝了各種場景和案例[7]。
圖1 區塊鏈詳細架構Fig.1 Blockchain detailed architecture
上述架構中激勵層常用于聯盟鏈,其他層為區塊鏈共有層級。因此本節將對應劃分的區塊鏈架構,從區塊鏈應用層、智能合約、共識算法、網絡層和數據層五方面進行簡要的風險分析,如圖2所示。
圖2 區塊鏈各層安全風險分析Fig.2 Blockchain detailed architecture
風險主要來自以下十方面:
① 注入漏洞。當不可信數據作為命令或查詢的一部分發送給解釋器時,會發生注入漏洞,如SQL、NoSQL、OS和LDAP注入[8]。同時由于區塊鏈部分項目及應用部署搭載在Windows系統上,因為在Window系統中,當前目錄下的DLL會被先運行,攻擊者可以設計偽裝LPK.DLL,通過這種方式讓系統優先加載有風險的代碼段,在DLL中調用系統原函數。
② 失效的身份認證。當認證、會話管理等功能在落實過程中出現漏洞時,黑客就可以針對密碼、密鑰和會話令牌進行攻擊,導致身份認證失效。此外黑客也可以利用其他實施過程的缺陷實現短時間或長期侵占用戶身份。
③ 敏感數據泄漏。許多區塊鏈Web應用程序和API不能正確保護敏感數據,攻擊者可能會竊取或修改這些缺乏安全保護措施的數據[9]。例如攻擊者可以獲取用戶在傳輸、存儲過程中的身份數據、財務明細等信息,進一步實現信用卡欺詐、身份盜用等手段。
④ 惡意XML外部實體(XXE)。對用區塊鏈Web應用中許多舊的或配置不佳的XML處理器評估XML文檔中的外部實體引用。外部實體可用于使用文件URI處理程序、內部文件共享、內部端口掃描、遠程代碼執行和拒絕服務攻擊來公開內部文件[10]。
⑤ 跨站腳本(XSS)。通過應用程序在未經適當驗證或轉義的情況下,更新用戶提供數據的現有網頁等方式,在受害者的瀏覽器中執行腳本,從而劫持用戶會話,破壞網站或將用戶重定向到惡意網站[11]。
⑥ 安全配置錯誤。操作系統、框架、庫和應用程序通常出現不安全的默認配置、不完整或特殊配置、開放的云存儲、錯誤配置的HTTP標頭以及包含敏感信息的詳細錯誤消息的結果,這些配置非常容易被黑客利用[12]。
⑦ 不安全的反序列化。反序列化是從磁盤文件或數據庫讀取對象。不安全的反序列化通常導致遠程代碼執行、重播攻擊,注入攻擊和特權升級攻擊[13]。區塊鏈應用由Java語言開發的占比不低,Java反序列化漏洞在應用和智能合約的開發中危害較重。
⑧ 組件(如庫、框架和其他軟件模塊)以與區塊鏈應用程序相同的權限運行。如果一個易受攻擊的組件被利用,這種攻擊可能會導致嚴重的數據丟失或服務器接管[11]。
⑨ 不安全的加密存儲。由于加密算法的強度太弱或者沒有對密碼等需要保護的字段進行加密,導致存儲數據很容易被破解。
⑩ 記錄和監視不足,再加上事件響應缺失或無效集成,攻擊者可以進一步攻擊系統,維持持久性,轉向更多的系統并篡改、提取或銷毀數據[10]。
針對智能合約攻擊是區塊鏈中常見的問題,相關研究較為成熟。對合約本身風險主要來源以下幾種情況:代碼重入、DoS攻擊、龐氏攻擊、權限控制問題、整數溢出、操作數異常處理問題、偽隨機問題、delegatecall 委托調用、操縱區塊時間戳進行時間戳依賴攻擊以及競爭條件/非法預先交易。針對合約環境,存在逃逸漏洞、堆棧溢出、資源濫用及邏輯漏洞等問題,這也會導致智能合約產生風險。
共識算法的風險主要來自以下幾方面:
① 安全性假設不可靠,存在優勢節點、DoS攻擊和“51%”攻擊。以“51%”攻擊為例,如果攻擊者掌握很強算力,共識算法中缺乏對算力的約束,某一個節點控制了 51% 及以上算力,就有構造累計工作量超過當前主鏈的能力,引起篡改賬本等風險。
② 一致性不穩定,如針對POW、POS算法進行雙花攻擊,結合MPC會導致POS節點離線問題的出現。同時區塊鏈的POS也常常受到長程攻擊,區塊鏈本身會被攻擊者利用可信硬件進行后門攻擊。
③ 擴展性差,針對區塊鏈共識層拓展性差的問題可以實現粉塵攻擊、空塊攻擊等。
④ 初始化困難,存在中心化、優勢節點等問題。以中心化問題為例,較為典型的攻擊方式是幣齡累計攻擊,因為挖礦難度受到當前節點賬戶中的余額、每個節點持幣時間兩點因素的影響。因此攻擊者持有的節點在等待足夠長時間后,可以通過 Age 的增加來進一步攻擊整個P2P網絡。
⑤ 還有多種針對共識層的攻擊方式,如預計算攻擊。當POS 中攻擊者的節點占有了一定數量的算力,攻擊者就可以在當前算力范圍中通過控制 Hprev 計算Hnext,產生安全問題。此外短距離攻擊也較為常見,例如“賄賂攻擊”,這種攻擊主要影響POS共識機制。只要賄賂攻擊的成本小于貨物或者服務費用,此次攻擊就是成功的,但這種攻擊成本較高,對于共識算法風險影響較小。
區塊鏈網絡層遭受的風險與傳統安全中網絡層遭受風險極其相近,傳統安全中大部分針對網絡層的攻擊也可在區塊鏈網絡層實現。其原理都是從網絡通信層面對網絡進行破壞,進而引起一系列的安全問題,常見的有針對路由表的日食攻擊、針對P2P網絡的DDoS攻擊。在數據進行跨域傳輸時,代理節點不安全也會為網絡帶來風險。此外對于區塊鏈中個別節點進行入侵,會導致失去節點掌控權或引發節點身份問題,從而方便黑客實現女巫攻擊等一系列攻擊方式,在此不多贅述。
數據安全風險常常來自以下幾方面:
① 離鏈存儲的策略風險。這種策略使敏感的用戶數據遠離區塊鏈,允許連續的區塊鏈記錄和數據刪除功能。但外部鏈接系統通過傳統方法存儲數據,在很大程度上破壞了區塊鏈的目的,這意味著數據更容易受到黑客攻擊、編輯和其他欺騙。
② 刪除加密密鑰的策略風險。GDPR明確要求刪除數據,但刪除加密密鑰實質上是通過使數據不可訪問而刪除數據,從技術上講并不能清除數據。因此仍然易受攻擊。
③ 匿名化的風險。鏈上指針將主鏈信息連接到敏感的離鏈信息[14]。一旦脫鏈數據被破壞,鏈路就會中斷,鏈上的信息將是匿名的。但這種方法仍然會在主鏈上留下數據,雖然很困難,但仍然可以從區塊鏈中獲得識別信息。
④ 集中式后端系統。創建集中式的后端系統,使數據可以匿名,不中斷任何鏈,讓GDPR、區塊鏈和平共存,但破壞了區塊鏈的基礎。集中式管理的后端將數據控制反饋給企業,增加了數據安全風險。
按照《區塊鏈與分布式記賬信息系統評估規范》中要求的保密性、完整性、抗抵賴性、真實性以及可追溯性等質量特性,結合區塊鏈安全風險分析,針對區塊鏈技術標準及安全防護體系,構建了一套區塊鏈安全測評模型架構/關鍵指標分析模型,如圖3所示。
圖3 區塊鏈安全測評模型Fig.3 Blockchain security evaluation model
數據層針對數據存儲方式、密鑰管理體系、密碼算法標準、信道安全、硬件安全以及區塊安全的詳細測評項進行了劃分。
① 數據存儲方式:檢測區塊鏈是否使用了離線存儲。
② 密鑰管理體系:針對密鑰的生命周期,從創建、使用到結束進行分析,同時檢測密鑰使用范圍是否合規,避免出現因密鑰管理體系導致的安全問題。
③ 密碼算法標準:部分區塊鏈底層密碼參考標準較低,因此評估時應結合國家最新出臺的通用密碼標準進行檢測,確保待評估區塊鏈底層密碼算法符合最新國密標準。
④ 信道安全:結合針對信道的攻擊檢測手段,對待檢測區塊鏈進行分析,防止區塊鏈硬件存在風險。
⑤ 硬件安全:測評區塊鏈中硬件是否存在后門植入等問題,避免從底層引入安全隱患。
⑥ 區塊安全:針對底層區塊生成時間、區塊間關系進行測評,確保底層區塊安全性。
測評模型網絡層主要針對節點安全、文件配置、P2P網絡和通信過程進行測評。
① 節點安全:檢測入網驗證時節點是否安全、節點入網流程是否安全、入網過程中耗時是否可接受。對比網絡中可接受的節點損毀數量,分析節點損毀時對于網絡安全和性能帶來的問題。當節點出現叛變時,評估叛變節點數量是否在網絡可接受的欺騙范圍內。分析區塊鏈對節點行為的審計流程、審計結果,從而確保節點為區塊鏈帶來的風險可被管控。
② 文件配置:針對文件配置合規性進行分析,判斷文件配置是否會為當前區塊鏈帶來風險。
③ P2P網絡:參考較為安全的網絡,對于帶測評區塊鏈網絡時延平均值進行測試。分析待測評區塊鏈網絡環境復雜度、抗DDoS程度,針對路由算法的安全性進行等級劃分。在傳輸環境保障方面,首先檢測區塊鏈是否構建了可信環境;之后分析網絡中數據是否使用同態加密確保數據安全;最后針對網絡中邊界網關進行安全性檢驗。
④ 通信過程:檢測區塊鏈節點通信時是否使用了雙向認證方式。針對聯盟鏈和私有鏈,判定是否對節點數據傳輸進行了限制,例如數據能否被未授權的節點讀取或修改。
共識層測評主要從共識算法、賬本安全和分叉管理三方面進行劃分。
① 共識算法:通過統計學方式,檢測區塊鏈中節點共識程度,保證全網各節點共識一致。當節點共識不一致時,對當前共識算法的容錯性進行測評。針對優勢節點、后門問題進行檢測,確保共識過程中全網每個節點權利盡可能一致。
② 賬本安全:檢測全局賬本在各個節點的同步情況。針對全局賬本查詢的準確程度進行分析,評估出錯次數是否為可忽略值。分析賬本同步到節點的策略、局部賬本和全局賬本沖突的處理機制。對賬本備份恢復機制、可用情況和同步情況進行評估。
③ 分叉管理:針對當前區塊鏈對軟分叉或硬分叉的管理策略進行橫向對比評估。
合約層針對智能合約和合約環境兩方面進行評估。
① 智能合約:判斷智能合約是否圖靈完備。對部署前注冊審批、發布時后臺審計進行評估。對生產、使用、銷毀分別測試,記錄合約生命周期中相關操作,如設置合約的過期時間、銷毀所需條件等。在不同賬戶部署不同數量的合約,查詢某一賬戶下的所有智能合約、某一合約對應的部署賬戶地址[15]。測試合約的可用性。
② 合約環境:評估監視策略(詳細約束和規則),檢查區塊鏈是否對操作碼結構進行維護。從而避免整數溢出及其他問題無法被發現,確保合約虛擬機安全。
應用層針對賬戶體系、插件安全和區塊鏈應急響應進行評估。
① 賬戶體系:分析待測評區塊鏈是否嚴格實行分級策略,各級間訪問控制機制是否可以確保不出現越權等問題。
② 集成插件安全:分析插件本身是否具有漏洞。對于接口進行分析,檢測接口是否存在越權等問題。評估引入插件后,是否會對區塊鏈點對點傳輸等應用特點產生影響。
③ 區塊鏈應急響應:評估待測評區塊鏈是否使用風險感知平臺進行風險管控,區塊鏈預警平臺遭受攻擊時報警時延。
本文主要針對區塊鏈安全風險進行分析,面向區塊鏈提出了一套較為完整的安全測評模型。基于當前人們對區塊鏈各層架構的共識,從系統組成結構的角度對每層易受到的安全風險進行分析,指出當前各層可能存在的風險隱患,并對于一些攻擊產生的效果和攻擊實現的難易程度進行說明。結合國家發布的相關白皮書等技術指導,對于指標進行劃分,對指標中的關鍵點進行闡述,形成一套評估模型,便于后續的科研人員在此基礎上面向區塊鏈進行進一步的安全測評。