李興福
濟南職業學院 山東 濟南 250103
近年來,區塊鏈的快速發展使其在各類場景中的應用越來越多,但廣泛應用帶來的安全問題也日漸凸顯。例如技術層面PoW中50%算力攻擊,實現雙重支付問題;智能合約無法使用現有的入侵檢測技術,提供有效的代碼漏洞檢測等問題[1]。區塊鏈在安全和隱私方面的挑戰仍然制約著區塊鏈的快速發展。本文以區塊鏈安全技術為切入點,討論區塊鏈技術本身及區塊鏈應用的安全性。
區塊鏈安全事件首當其沖發生在加密數字貨幣領域,由區塊鏈安全漏洞引起的經濟損失連年攀升。首先,新型技術在某些關鍵環境下存在安全隱患。另外,量子計算機的出現對基于傳統非對稱密碼學的區塊鏈技術的安全性造成巨大沖擊。再者,區塊鏈理論網絡結構和環境與實際網絡結構和環境存在的鴻溝威脅區塊鏈應用的安全性。最后,區塊鏈用戶安全意識不足,對密鑰管理不嚴格,也給區塊鏈應用安全及用戶隱私泄露帶來巨大隱患。區塊鏈的數據需要分布式網絡中的所有節點一起維護,才能達到一致性共識,因此交易中的信息需要公開,讓所有節點都能進行驗證,這就使得區塊鏈(主要指公有鏈、聯盟鏈)上的公開信息毫無隱私可言[2]。攻擊者還可能通過交易數據和背景知識獲取真實身份,通過從區塊鏈網絡中提取有價值的敏感數據,聯合不同網絡和平臺下的用戶數據,根據用戶的購物習慣、消費記錄、出行數據等信息,準確地預測個人的隱私信息,無法保證其隱私的安全性[3]。
網絡層的安全風險與網絡的拓撲結構、網絡節點(用戶)行為以及通信策略等因素相關,主要有以下4種安全問題。
拒絕服務攻擊的定義是:攻擊者利用網絡協議存在的缺陷或直接通過暴力手段消耗掉被攻擊對象的全部資源,使得攻擊對象無法提供正常服務的行為[4]。攻擊者通過控制網絡一臺傀儡設備,攻擊與之相連的其他設備,使其在攻擊者的控制下,利用多臺傀儡設備同時向遠程的其他服務器發起攻擊,通過網絡過載、阻斷用戶訪問系統或者在較短時間向系統提交大量請求使受害者超過負荷,使目標計算機無法提供正常的服務甚至崩潰。攻擊者也可能使用2個或2個以上的物理終端向網絡上的一個或多個目標系統發起拒絕服務攻擊,實現分布式拒絕服務攻擊[5]。
日蝕攻擊是一種用于攻擊分布式網絡的常用攻擊方式,比特幣網絡作為分布式節點網絡的典型代表,成為日蝕攻擊的主要目標。為了減少區塊鏈系統中網絡資源的消耗,分布式網絡中的一個節點只連接其選擇的其他節點組,這些節點組又連接它們自己所在的節點組,在日蝕攻擊中,攻擊者試圖隔離并攻擊特定用戶,而不是攻擊整個網絡。日蝕攻擊成功后,被攻擊者將被隔離而無法獲得真實網絡活動和當前區塊鏈的真實情況。
女巫攻擊是指攻擊者可以通過少量節點偽裝出大量的節點身份標記來欺騙在區塊鏈網絡中的其他節點,把數據備份到少量的真實節點中,從而只需要控制這些節點就能破壞系統的數據備份功能。女巫攻擊的主要目的是在網絡中獲得多數影響,以在系統中執行非法行為。比如使不良行為者對網絡進行不成比例的控制,攻擊者阻止來自其他方的交易,破壞私人交易等。
竊聽攻擊指攻擊者利用區塊鏈節點的標識與其IP地址進行關聯來追溯用戶的隱私信息包括用戶所處的居住地址等傳遞信息。節點執行交易時,需要通過入口節點廣播交易到區塊鏈網絡,攻擊者可以通過監聽入口節點來識別對應的用戶節點。當用戶節點通過這些入口節點將交易擴散到區塊鏈網絡后,攻擊者通過對這些交易進行分析和對入口節點進行監聽來識別出某一交易是否是來自被識別的某一用戶節點。
智能合約安全是指合約若存在漏洞問題無法通過傳統補丁的方式去修改,只能重新部署合約,那么漏洞合約上涉及的金額也無法挽回。
智能合約能夠調用其他外部合約的代碼。調用外部合約或發送以太幣的操作可能被攻擊者劫持,迫使合約執行額外的代碼,包括那些返回到合約自己代碼的調用。重放漏洞成立的條件:①合約調用帶有足夠的Gas;②有轉賬功能;③狀態變量在重入函數調用之后。
授權用戶使用tx.origin變量的合約容易受到網絡釣魚攻擊,攻擊者可以將自己的合約地址偽裝成無代碼的私人地址,使得受害者轉賬后造成損失。
tx.origin是solidity中的一個全局變量,它可以遍歷整個調用棧并返回最初發送交易的賬戶地址。
Solidity的函數和狀態變量有4種可見性:external、public、internal和private,可見性決定一個函數的作用域。一個函數沒有設置可見性,可見性為任何調用者可見。如果此函數為獲取獎勵函數,但是沒有設置其可見性,任何人都可調用此函數。攻擊者可以不按照在withdrawWinnings函數規定的最后8個十六進制字符為0的以太坊地址時,就可以直接調用sendWinnings函數完成相應的獎勵,并且可以一直調用獲取更多獎勵。
以太坊代幣交易回執中,status字段是0×1(true)還是0×0(false)取決于交易事務執行過程中是否拋出了異常。當用戶調用代幣合約的transfer函數進行轉賬時,如果transfer函數正常運行未拋出異常,該交易的status即為0×1(true)。攻擊者可以利用存在該缺陷的代幣合約向中心化交易所、錢包等服務平臺發起充值操作,如果交易所僅判斷入TxReceiptStatus是success就以為充幣成功,那么可能就存在假充值漏洞。
共識安全是區塊鏈實現數據安全的基石,起著重要的作用。區塊鏈共識層存在的安全問題主要包括以下幾種。
賄賂攻擊指的是參與區塊鏈共識的節點會被惡意攻擊者使用數字貨幣或者法幣所賄賂,使得這些節點工作在特定的區塊或者分叉上,從而產生對惡意攻擊者有利的分叉鏈。
賄賂攻擊者模型是一個非協作選擇模型,相當于在現實商業社會中的惡意收購者。惡意收購者是指在不經過被收購者同意的情況下而希望直接取得被收購者所擁有的資源的控制權。
51%攻擊指攻擊者利用算力優勢在區塊鏈上產生分支鏈。這類攻擊主要發生在PoW機制中,擁有51%算力的礦工可以通過自己的算力優勢在新的分支鏈上生成新區塊,使得分支鏈成為主鏈從而撤銷在原主鏈上的交易記錄。
攻擊者可以先在原主鏈(白色標識)上提交一筆交易,然后等待接收者確認后,攻擊者在分支鏈上提交一筆接收地址不同但是花費的是同一比特幣的交易,最后攻擊者利用算力優勢把分支鏈(灰色)擴展為主鏈,實現雙重支付攻擊。為了避免該攻擊,一般建議用戶要在收到k個區塊確認后才能認定交易有效且不可更改,k的設定與安全強度和平臺有關。
長距離攻擊:指具有足夠計算能力的攻擊者通過從第一個區塊開始重新構建另一個區塊鏈。
向前腐化攻擊:通過控制曾經占有50%權益的貨幣所有者重新構建區塊鏈。
權益流血攻擊:在向前腐化攻擊中,攻擊者需要控制50%的權益。
權益粉碎攻擊:攻擊者利用自身的權益優勢來獲得計算出塊所需哈希值的優勢,從而擁有更高的出塊機會。
自私挖礦攻擊,指礦工通過延遲區塊的公布時間來獲得區塊優勢,實施該攻擊的核心是誠實礦工在會被淘汰公共分支上浪費算力。實現攻擊的情況可以分為下面兩種:
4.4.1 公有鏈長度大于私有鏈長度。惡意礦工需要擁有超過全網其他礦工的算力才可以通過在私有鏈上工作來超越公有鏈,這種情況下惡意礦工無法獲得利益。
4.4.2 私有鏈長度大于公有鏈長度一個區塊。惡意礦工在私有鏈上進行工作會出現兩種情況。
(1)公有鏈中的誠實礦工在公有鏈中得到下一個區塊,惡意礦工失去優勢,此時惡意礦工主動廣播私有鏈上的最新區塊與公有鏈的區塊進行競爭。
(2)私有鏈上的惡意礦工開采出新的區塊,此時私有鏈的長度優勢得到保持。
種族攻擊主要針對只收到0確認就認定交易有效的用戶。攻擊者可以創建兩個沖突的交易事務,并把第一筆交易發送給受害者,受害者接收到付款發送產品后,攻擊者立刻發送相同數量的沖突交易并廣播到區塊鏈中使得第一筆交易無效。
攻擊者首先利用一個UTXO直接向接收者發送一筆支付交易,然后再利用該UTXO加上較高的交易費用并進行廣播,由于礦工一般優先選擇具有較高交易費的交易進行確認,因此較高的手續費導致后者很快被其他礦工確認寫入新的區塊,使得接收者對應的交易被作廢。
數據層是區塊鏈的底層技術,其安全運作關系著區塊鏈系統的正常運行。在設計區塊鏈系統的過程中,對相關代碼的編寫要進行完善的安全性測試和審查,避免由于代碼實現的漏洞而帶來不必要的安全事故。
惡意信息攻擊是指攻擊者利用區塊鏈數據的不可篡改性,把一些病毒特征碼、虛假敏感信息通過交易形式寫入區塊中,區塊鏈不可逆轉地記錄著信息、圖片等各種數據,而且每個分布式全節點都保存了本地復制完整的區塊鏈,通過點對點方式將危害信息進行快速傳播,給區塊鏈的生態帶來嚴重影響。
長度擴展攻擊是指攻擊者在已知一個消息的Hash值和該消息長度的情況下可以計算在該消息基礎上延長由攻擊者選擇的任意消息比特的Hash值,而不需要知道該消息的任何比特信息。即攻擊者知道Hash(m1)及m1的長度就可以計算Hash(m1||m2),其中m2是由攻擊者任意選擇的。基于Merker-Damgard構造的MD5、SHA-1和SHA-2等哈希算法都容易受到此類攻擊。
哈希函數能把任意長度的字符序列映射成為定長的字符串,不可避免會產生碰撞。例如:把32位的二進制字符串映射到16位二進制字符串。32位字符串有232種組合方式,而16位字符串只有216種結果,那么就會出現字符串的哈希值相同的情況,這就是碰撞。
針對哈希函數的內在結構缺陷,可以利用某些特定攻擊算法對哈希函數進行攻擊。差分攻擊就是針對哈希函數的一個有效攻擊方法。避免差分攻擊的辦法是使用能夠抵御差分攻擊的哈希函數,例如:比特幣使用的哈希函數SHA-256。
交易延展性攻擊主要是指比特幣支付交易發出后,在未被確認之前可以被修改(或稱為偽造復制)。在簽名被公鑰驗證之前,攻擊者故意添加的那部分內容會被丟棄,不會被驗證。這樣一來即使簽名被修改,也能被驗證通過。攻擊者利用這一性質,對交易的哈希值進行篡改,從而導致擁有錯誤的哈希值的交易被寫入塊中。
應用層主要指區塊鏈的交易平臺、錢包客戶端、Web應用端等,安全問題主要體現在以下幾個方面:字典攻擊、撞庫攻擊、鍵盤記錄攻擊、貨幣木馬攻擊等。
用戶的地址并非是公鑰,在知道地址的交易中,如果想要獲得該比特幣需要經過以下幾個過程:通過詞典查找的方式,隨機生成一個私鑰;通過該私鑰計算出對應的公鑰;通過公鑰計算出對應的地址,并確認該地址是否與比特幣地址一致,如果不一致則重新回到第一步進行計算。理論上來說,攻擊者通過上述過程來完成對私鑰的字典攻擊的成功率是非常低的,但由于一些區塊鏈系統在設計過程中使用了不準確的助記詞來幫助生成私鑰,導致攻擊者很容易就通過弱的助記詞來生成用戶的私鑰。
很多用戶安全意識不足或為了方便記憶,對不同的系統都設置了通用的賬戶名和密碼,攻擊者通過盜取其中一個網站系統的使用密碼,來嘗試獲取用戶在其他網站系統的登錄賬號,這種攻擊就叫作撞庫攻擊。
鍵盤記錄攻擊是指通過一些軟件程序或者硬件設備將用戶所有的鍵擊數據進行捕獲的攻擊方式。主要有2種形式。
6.3.1 硬件鍵盤記錄器。通常使用USB或物理設備連接到計算機或鍵盤的芯片來實現,這種是很容易被察覺的攻擊方式。
6.3.2 軟件鍵盤記錄器。由于其隱蔽性較高,這種惡意軟件的安裝往往是不容易察覺的。
貨幣木馬病毒通常指攻擊者設計的一段惡意代碼或者惡意軟件,這些代碼偽裝成合法代碼或者軟件來控制用戶終端設備的客戶端。攻擊者利用木馬病毒來竊取數字加密貨幣的攻擊方式原理如下:①攻擊者通過某種方式在受害者計算機或者移動設備端安裝特定的木馬病毒。②截取用戶發起的數字加密貨幣交易,通過實時數字加密貨幣的交易地址。③如果檢測到有數字加密貨幣地址,在用戶將交易地址復制到錢包時,利用木馬病毒將惡意地址替換原來的合法地址。④如果用戶沒有進行地址檢查,貨幣就會被轉移到攻擊者賬戶下。
區塊鏈解決了分布式網絡中的數據一致性及信任問題,但由于區塊鏈技術還處于不斷演進發展階段,還沒有完全解決鏈碼安全、應用安全、缺乏標準和規定等各類安全性問題。就目前區塊鏈技術及應用的安全而言,技術人員仍需要保持嚴謹的態度,避免因為區塊鏈的安全漏洞及隱私泄露引發大規模安全事件。區塊鏈安全是系統穩定發展的基石,未來區塊鏈將圍繞共識機制設計、隱私保護、安全體系構建等方向加強安全設計與實現,促進區塊鏈技術及應用的健康發展。
