區(qū)塊鏈橋是區(qū)塊鏈領(lǐng)域?qū)崿F(xiàn)互操作性的根本所在。因此,跨鏈橋接技術(shù)的安全至關(guān)重要。一些常見(jiàn)的區(qū)塊鏈橋安全漏洞包括鏈上和鏈下驗(yàn)證不足、原生Tokens處理不當(dāng)以及配置錯(cuò)誤。為了確保驗(yàn)證邏輯合理,建議針對(duì)所有可能的攻擊向量對(duì)跨鏈橋進(jìn)行測(cè)試。
導(dǎo)語(yǔ)
區(qū)塊鏈橋是連接兩個(gè)區(qū)塊鏈,讓二者實(shí)現(xiàn)交互的協(xié)議。通過(guò)區(qū)塊鏈橋,用戶如要參與Ethereum網(wǎng)絡(luò)的DeFi活動(dòng),只需持有Bitcoin,無(wú)需出售即可達(dá)成目的。
區(qū)塊鏈橋是區(qū)塊鏈領(lǐng)域?qū)崿F(xiàn)互操作性的根基。它們使用各種鏈上和鏈下驗(yàn)證來(lái)發(fā)揮作用,因此也可能存在不同的安全漏洞。
為什么區(qū)塊鏈橋的安全至關(guān)重要?
區(qū)塊鏈橋通常會(huì)持有用戶想從一條鏈轉(zhuǎn)移到另一條鏈的Tokens。區(qū)塊鏈橋通常以智能合約的形式部署,隨著跨鏈轉(zhuǎn)移的持續(xù)積累,橋上會(huì)持有大量的Tokens,這筆巨額的財(cái)富就會(huì)使它們成為黑客覬覦的目標(biāo)。
此外,由于涉及許多組件,區(qū)塊鏈橋的攻擊面往往很大。因此,不法分子有著強(qiáng)烈的動(dòng)機(jī)把跨鏈應(yīng)用作為目標(biāo),以期攫取大量資金。
根據(jù)CertiK的估計(jì),在2022年,區(qū)塊鏈橋攻擊造成了超過(guò)13億美元的損失,占當(dāng)年總損失的36%。
常見(jiàn)的跨鏈橋接安全漏洞
為了增強(qiáng)區(qū)塊鏈橋的安全性,了解常見(jiàn)的跨鏈橋接安全漏洞并在啟動(dòng)前測(cè)試區(qū)塊鏈橋十分重要。這些漏洞主要來(lái)自以下四個(gè)方面:
鏈上驗(yàn)證不足
對(duì)于簡(jiǎn)單的區(qū)塊鏈橋,尤其是專為特定dApp設(shè)計(jì)的區(qū)塊鏈橋,通常只有最低程度的鏈上驗(yàn)證。這些橋依靠集中式后端來(lái)執(zhí)行基本操作,例如鑄幣、銷毀和Tokens轉(zhuǎn)移,所有驗(yàn)證都是在鏈下進(jìn)行的。
而其他類型的橋則使用智能合約來(lái)驗(yàn)證消息并在鏈上進(jìn)行驗(yàn)證。在這種情況下,當(dāng)用戶將資金存入鏈中時(shí),智能合約會(huì)生成簽名的消息并在交易中返回簽名。這個(gè)簽名就會(huì)用作充值的證明,用于驗(yàn)證用戶在另一條鏈上的提現(xiàn)請(qǐng)求。這一流程應(yīng)該能夠防止各種安全攻擊,包括重放攻擊和偽造充值記錄。
但是,如果鏈上驗(yàn)證過(guò)程存在漏洞,攻擊可能會(huì)造成嚴(yán)重?fù)p失。例如,如果區(qū)塊鏈用默克爾樹(shù)來(lái)驗(yàn)證交易記錄,那攻擊者就可以生成偽造證明。這意味著,如果驗(yàn)證過(guò)程存在漏洞,攻擊者就可以繞過(guò)證明驗(yàn)證,并在其賬戶中鑄造新的Tokens。
某些區(qū)塊鏈橋會(huì)實(shí)施“包裝Tokens(wrapped tokens)”的概念。例如,當(dāng)用戶將DAI從Ethereum轉(zhuǎn)移到BNB Chain時(shí),他們的DAI將從Ethereum合約中取出,并在BNB Chain上發(fā)行等量的包裝DAI。
但是,如果此交易沒(méi)有正確驗(yàn)證,攻擊者就可以部署惡意合約,通過(guò)操縱該功能,將包裝的Tokens從橋接路由到錯(cuò)誤的地址。
攻擊者還需要受害者先批準(zhǔn)跨鏈橋合約,才能使用“TransferFrom”功能轉(zhuǎn)移Tokens,從而從跨鏈橋合約中卷走資產(chǎn)。
但棘手的是,許多跨鏈橋都會(huì)要求dApp用戶無(wú)限地批準(zhǔn)Tokens,這種做法很常見(jiàn),它可以降低燃料費(fèi),但允許智能合約從用戶的錢包中訪問(wèn)不限量的Tokens,會(huì)帶來(lái)額外的風(fēng)險(xiǎn)。攻擊者會(huì)利用這些驗(yàn)證不足和批準(zhǔn)過(guò)度,將Tokens從其他用戶轉(zhuǎn)移給自己。
鏈下驗(yàn)證不足
在某些跨鏈橋系統(tǒng)中,鏈下后端服務(wù)器在驗(yàn)證從區(qū)塊鏈發(fā)送的消息的合法性時(shí)起著至關(guān)重要的作用。在這種情況下,我們要重點(diǎn)關(guān)注充值交易的驗(yàn)證。
有鏈下驗(yàn)證的區(qū)塊鏈橋的工作原理如下:
用戶與dApp交互,將Tokens存入源鏈上的智能合約。
然后,dApp通過(guò)API將充值交易哈希發(fā)送到后端服務(wù)器。
交易哈希需要經(jīng)過(guò)服務(wù)器的多次驗(yàn)證。如果被認(rèn)為合法,則簽名者會(huì)簽署一條消息,并將簽名通過(guò)API發(fā)回到用戶界面。
收到簽名后,dApp會(huì)對(duì)其進(jìn)行驗(yàn)證,并允許用戶從目標(biāo)鏈中提取Tokens。
后端服務(wù)器必須確保其處理的充值交易是真實(shí)發(fā)生而并非偽造的。該后端服務(wù)器會(huì)決定用戶是否可以在目標(biāo)鏈上提取Tokens,因此成為首當(dāng)其沖的攻擊目標(biāo)。
后端服務(wù)器需要驗(yàn)證交易發(fā)起事件的結(jié)構(gòu),以及發(fā)起該事件的合約地址。如果忽視后者,攻擊者就可能會(huì)部署惡意合約,來(lái)偽造與合法充值事件結(jié)構(gòu)相同的充值事件。
如果后端服務(wù)器不驗(yàn)證哪個(gè)地址發(fā)起了該事件,它就會(huì)認(rèn)為這是有效交易,并且簽署消息。攻擊者就可以向后端服務(wù)器發(fā)送交易哈希,繞過(guò)驗(yàn)證,使其從目標(biāo)鏈中提取Tokens。
不當(dāng)?shù)脑鶷okens處理
跨鏈橋采用不同的方法來(lái)處理原生Tokens和效用Tokens。比如,在Ethereum網(wǎng)絡(luò)上,原生Tokens是ETH,大多數(shù)效用Tokens都符合ERC-20標(biāo)準(zhǔn)。
如果用戶打算把自己的ETH轉(zhuǎn)移到另一條鏈,必須先將其存入跨鏈橋合約。為此,用戶只需將ETH附到交易中,即可通過(guò)讀取“msg.value”交易字段來(lái)檢索ETH的數(shù)量。
存入ERC-20Tokens與存入ETH有很大區(qū)別。要存入ERC-20Tokens,用戶必須先允許跨鏈橋合約使用他們的Tokens。在他們批準(zhǔn)并將Tokens存入跨鏈橋合約后,合約將用 “burnFrom()”函數(shù)銷毀用戶的Tokens,或用“transferFrom()”函數(shù)將用戶的Tokens轉(zhuǎn)移到合約中。
要區(qū)別是哪種操作,可以在同一個(gè)函數(shù)中使用if-else語(yǔ)句;蚴莿(chuàng)建兩個(gè)單獨(dú)的函數(shù)來(lái)處理每種場(chǎng)景。由于處理方式不同,如果用戶嘗試使用ERC-20充值函數(shù)來(lái)存入ETH,那么這些ETH可能會(huì)丟失。
在處理ERC-20充值請(qǐng)求時(shí),用戶通常提供Tokens地址作為輸入?yún)?shù)傳遞給充值函數(shù)。這會(huì)構(gòu)成重大風(fēng)險(xiǎn),因?yàn)樵诮灰走^(guò)程中可能會(huì)發(fā)生不可信的外部調(diào)用。使用白名單來(lái)只包含跨鏈橋支持的Tokens,是把風(fēng)險(xiǎn)降到最低的常見(jiàn)做法。只有列入白名單的地址會(huì)作為參數(shù)傳遞。這樣可以防止外部調(diào)用,因?yàn)轫?xiàng)目團(tuán)隊(duì)已經(jīng)過(guò)濾了Tokens地址。
但是,當(dāng)跨鏈橋處理原生Tokens跨鏈傳輸時(shí),也有個(gè)麻煩,因?yàn)樵鶷okens沒(méi)有地址。原生Tokens可以使用一個(gè)特殊的地址來(lái)代表,即“零地址”(0x000... 0)。但這樣做存在一個(gè)問(wèn)題,如果未正確實(shí)現(xiàn)白名單驗(yàn)證邏輯,使用零地址傳遞給函數(shù)可能會(huì)繞過(guò)白名單驗(yàn)證。
當(dāng)跨鏈橋合約調(diào)用“TransferFrom”將用戶資產(chǎn)轉(zhuǎn)移到合約時(shí),對(duì)零地址的外部調(diào)用會(huì)返回false,因?yàn)榱愕刂分袥](méi)有實(shí)現(xiàn)“transferFrom”函數(shù)。但是,如果合約沒(méi)有正確處理返回值,交易仍可能繼續(xù)發(fā)生。這就會(huì)為攻擊者創(chuàng)造機(jī)會(huì),使其不用向合約轉(zhuǎn)移任何Tokens就能執(zhí)行交易。
配置錯(cuò)誤
在大多數(shù)區(qū)塊鏈橋中,有一個(gè)特權(quán)角色負(fù)責(zé)將Tokens和地址列入白名單或黑名單,分配或改變簽名者,以及其他關(guān)鍵配置。確保所有配置準(zhǔn)確無(wú)誤非常關(guān)鍵,因?yàn)榭此莆⒉蛔愕赖氖韬鲆部赡軐?dǎo)致重大損失。
實(shí)際上,曾經(jīng)真的發(fā)生過(guò)攻擊者由于配置錯(cuò)誤而成功繞過(guò)傳輸記錄驗(yàn)證的事件。該項(xiàng)目團(tuán)隊(duì)在黑客攻擊發(fā)生前幾天實(shí)施了協(xié)議升級(jí),其中更改了某個(gè)變量。該變量是用來(lái)表示可信消息的默認(rèn)值。這個(gè)更改導(dǎo)致所有消息都被自動(dòng)認(rèn)為是經(jīng)過(guò)驗(yàn)證的,因此使攻擊者隨便提交一個(gè)消息就能通過(guò)驗(yàn)證。
如何提高跨鏈橋的安全性
上面所述的四個(gè)常見(jiàn)跨鏈橋漏洞表明,在互聯(lián)區(qū)塊鏈生態(tài)系統(tǒng)中安全所面臨的挑戰(zhàn)不可小覷。要應(yīng)對(duì)這些漏洞,需要“因地制宜”地考慮,沒(méi)有哪個(gè)方法可以全能地對(duì)付所有漏洞。
例如,由于每個(gè)跨鏈橋都有獨(dú)特的驗(yàn)證要求,因此僅僅提供通用準(zhǔn)則就想確保驗(yàn)證過(guò)程沒(méi)有錯(cuò)誤,這很難做到。防止繞過(guò)驗(yàn)證的最有效方法,是針對(duì)所有可能的攻擊向量對(duì)跨鏈橋進(jìn)行全面測(cè)試,并確保驗(yàn)證邏輯是合理的。
總而言之,必須針對(duì)潛在攻擊進(jìn)行嚴(yán)格的測(cè)試,并特別注意跨鏈橋中最常見(jiàn)的安全漏洞。
結(jié)語(yǔ)
由于資金量巨大,跨鏈橋長(zhǎng)期以來(lái)一直是攻擊者的目標(biāo)。構(gòu)建者可以通過(guò)進(jìn)行全面的部署前測(cè)試和納入第三方審計(jì)來(lái)加強(qiáng)跨鏈橋的安全,從而降低過(guò)去幾年來(lái)籠罩在跨鏈橋上的災(zāi)難性黑客攻擊的風(fēng)險(xiǎn)。跨鏈橋在多鏈的世界中至關(guān)重要,但在設(shè)計(jì)和構(gòu)建有效的Web3基礎(chǔ)架構(gòu)時(shí),安全性必須是首要考慮因素。