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



