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