本文是來自社區的帖子。作者是 CertiK 審計員 Minzhi He。
本文表達的觀點屬於貢獻者/作者的觀點,並不一定反映幣安學院的觀點。
概括
區塊鏈橋對於實現區塊鏈領域的互操作性非常重要。因此,橋樑安全非常重要。橋的一些常見安全漏洞包括鏈上和鏈下驗證薄弱、原生代幣處理不當以及配置錯誤。建議針對所有可能的攻擊向量測試網橋,以確保合理的驗證邏輯。
介紹
橋接區塊鏈是一種連接兩個區塊鏈以允許它們之間交互的協議。如果您擁有比特幣,但想參與以太坊網絡上的 DeFi 活動,區塊鏈橋可以讓您無需出售比特幣即可實現這一目標。
區塊鏈橋樑對於實現區塊鏈領域的互操作性至關重要。該橋使用各種鏈上和鏈下驗證來發揮作用,因此存在各種安全漏洞。
爲什麼橋樑安全很重要?
橋通常存儲用戶想要從一個鏈轉移到另一個鏈的代幣。橋接器通常以智能合約的形式實現,並隨着跨鏈傳輸的積累而存儲大量代幣,這使得它們成爲黑客的誘人目標。
此外,區塊鏈橋由於涉及的組件較多,因此存在較大的攻擊缺口。因此,犯罪分子針對跨鏈應用的動機非常強烈,以盜取大量資金。
據 CertiK 估計,到 2022 年,橋樑攻擊造成的損失將超過 13 億美元,佔當年總損失的 36%。
橋樑常見安全漏洞
爲了提高橋樑的安全性,在啓用之前瞭解橋樑和測試橋樑的常見安全漏洞非常重要。這些漏洞可以分爲四個領域。
鏈上驗證較弱
對於簡單的橋接器,尤其是那些爲特定 DApp 設計的橋接器,鏈上驗證是最少的。該橋依靠集中式後端來執行基本操作,例如鑄造、燃燒和代幣轉移,而所有驗證都是在鏈下完成的。
相比之下,其他類型的橋使用智能合約來驗證消息並進行鏈上驗證。在這種情況下,當用戶將資金存入鏈時,智能合約將生成一條簽名消息並在交易中返回簽名。該簽名作爲存款證明,用於驗證其他鏈上的用戶請求。此過程應防止各種安全攻擊,包括重放攻擊和虛假存款記錄。
然而,如果鏈上驗證過程中存在漏洞,攻擊者可能會造成嚴重損害。例如,如果橋使用 Merkle 樹來驗證交易記錄,攻擊者可能會生成虛假證據。這意味着如果驗證過程存在漏洞,他們可以繞過證明驗證並向其帳戶鑄造新代幣。
一些橋實現了“包裝令牌”的概念。例如,當用戶將 DAI 從以太坊轉移到 BNB Chain 時,他的 DAI 會從以太坊合約中取出,並將等量的包裝後的 DAI 發行給 BNB Chain。
然而,如果這些交易沒有得到正確驗證,攻擊者可以實施惡意合約,通過操縱其功能將包裝的代幣從網橋路由到錯誤的地址。
攻擊者還要求受害者同意橋接合約,以便使用“transferFrom”函數轉移代幣,從而從橋接合約中耗盡資產。
不幸的是,情況變得更糟,因爲大多數橋樑都需要 DApp 用戶無限的代幣批准。這是降低汽油費的常見做法,但由於允許智能合約從無限數量的用戶錢包訪問代幣,從而帶來了額外的風險。攻擊者可以利用缺乏驗證和過度批准的情況將代幣從其他用戶轉移給自己。
鏈下驗證薄弱
在一些橋接系統中,鏈下後端服務器在驗證從區塊鏈發送的消息的有效性方面發揮着重要作用。在這種情況下,我們重點關注驗證存款交易。
區塊鏈橋與鏈外驗證的工作方式如下:
用戶與DApp交互,將代幣存入源鏈上的智能合約中。
然後,DApp 通過 API 將存款交易的哈希值發送到後端服務器。
交易哈希需要服務器進行一些驗證。如果認爲有效,簽名者會對消息進行簽名,然後通過 API 將簽名發送回用戶界面。
DApp收到簽名後進行驗證,然後允許用戶從目標鏈提取代幣。
後端服務器必須確保所處理的存款交易真實發生且未被僞造。該後端服務器決定用戶是否可以提取目標鏈上的代幣,使其成爲攻擊者的高價值目標。
後端服務器必須驗證交易產生的事件結構以及生成事件的合約地址。如果合約地址被忽略,那麼攻擊者就可以使用與合法存款事件相同的結構來實現惡意合約來僞造存款事件。
如果它沒有驗證生成事件的地址,後端服務器可以假設該合同有效並簽署消息。然後,攻擊者可以將交易哈希發送到後端,從而繞過驗證並允許他們從目標鏈中提取代幣。
對原生令牌的不當處理
Bridge 採用多種方法來處理原生代幣和實用代幣。例如,在以太坊網絡上,原生代幣是 ETH,大多數實用代幣都遵循 ERC-20 標準。
當用戶打算將其 ETH 轉移到另一條鏈時,他必須先將其存入橋接合約中。爲了實現這一點,用戶只需將 ETH 附加到交易中,然後可以通過讀取交易的“msg.value”字段來檢索 ETH 的數量。
存入 ERC-20 代幣與存入 ETH 有很大不同。要存入 ERC-20 代幣,用戶必須首先允許橋接合約使用其代幣。一旦他同意並將代幣存入橋合約,合約將使用“burnFrom()”函數銷燬用戶的代幣,或者使用“transferFrom()”函數將用戶的代幣轉移到合約中。
區分它們的一種方法是在同一函數中使用 if-else 語句。另一種方法是創建兩個單獨的函數來處理每個場景。嘗試使用 ERC-20 存款功能存入 ETH 可能會導致資金損失。
在處理 ERC-20 存款請求時,用戶通常會提供代幣地址作爲存款功能的輸入。此操作會帶來重大風險,因爲交易期間可能會發生不受信任的外部調用。實施僅包含橋支持代幣的白名單是最大程度降低風險的常見做法。僅允許將列入白名單的地址作爲參數傳遞。這樣可以防止外部調用,因爲項目組已經過濾了代幣地址。
然而,當橋處理原生代幣的跨鏈傳輸時,也會出現問題,因爲原生代幣沒有地址。地址零 (0x000...0) 代表原始令牌。這可能會產生問題,因爲即使實現不正確,將空地址傳遞給函數也可以繞過白名單驗證。
當橋接合約調用“transferFrom”將用戶資產轉移到合約時,外部調用零地址會返回 false,因爲零地址沒有實現“transferFrom”函數。但是,如果合約無法正確處理結果值,交易仍然可能發生。這爲攻擊者創造了在不將代幣轉移到合約的情況下執行交易的機會。
配置錯誤
在大多數區塊鏈橋中,特權位置負責將代幣和地址列入白名單或黑名單、分配或更改簽名者以及其他重要配置。確保所有配置準確至關重要,因爲即使看似微不足道的錯誤也可能導致重大損失。
事實上,在一次事件中,攻擊者由於配置錯誤而設法繞過傳輸記錄驗證。項目團隊在黑客攻擊前幾天實施了協議升級,其中包括更改變量。該變量用於表示可信消息的默認值。此更改導致所有消息都被視爲自動經過驗證,從而允許攻擊者隨意發送消息並繞過驗證過程。
如何提高橋樑安全
上述橋接器的四個常見漏洞表明了在互連的區塊鏈生態系統中確保安全性所面臨的挑戰。解決這些漏洞時需要考慮很多重要因素。沒有一個適用於所有事情的單一準則。
例如,提供一般準則來確保無錯誤的驗證過程很困難,因爲每個橋都有獨特的驗證要求。防止驗證繞過的最有效方法是針對所有可能的攻擊向量徹底測試網橋,並確保驗證邏輯有意義。
總之,對潛在的攻擊進行嚴格的測試並特別關注橋樑中常見的安全漏洞非常重要。
閉幕式
由於其高價值,跨鏈橋長期以來一直是攻擊者的目標。建築商可以通過在實施前進行徹底的測試並進行第三方審覈來增強橋樑的安全性,以降低過去幾年困擾橋樑的代價高昂的黑客攻擊的風險。橋樑在多鏈世界中至關重要,但在設計和構建有效的 Web3 基礎設施時,安全性必須是首要考慮的問題。
進一步閱讀
什麼是橋接區塊鏈?
什麼是跨鏈互操作性?
三種流行的加密橋及其工作原理
什麼是包裝代幣?
免責聲明和風險警告:此內容按“原樣”提供給您,僅用於一般信息和教育目的,不提供任何形式的陳述或保證。此內容不應被解釋爲財務、法律或其他專業建議,也無意推薦購買任何特定產品或服務。您應該尋求適當的專業顧問的建議。如果文章是第三方貢獻者的貢獻,請注意,所表達的觀點僅代表第三方貢獻者的觀點,並不一定反映幣安學院的觀點。請在此處閱讀我們的完整免責聲明以瞭解更多詳細信息。數字資產價格可能會波動。您的投資價值可能會下降或上升。您可能無法取回投資金額。您對您的投資決定負全部責任。幣安學院對您可能遭受的任何損失不承擔任何責任。本材料不應被視爲財務、法律或其他專業建議。欲瞭解更多信息,請閱讀我們的使用條款和風險警告。

