security

security

BNB Chain 攻擊鏈路全面複盤解析

10 月 6 日,BNB Chain 推特發文稱,由於平台上的異常攻擊,現在 BSC 網絡已經暫停服務。攻擊者利用跨鏈橋 BSC Token Hub(BSC Token Hub 是 BNB 信標鏈和 BNB 鏈之間的跨鏈橋)的漏洞,套利了大約 7000 億至 8000 億美元。

Hyperlab:BNB Chain 攻擊鏈路全面複盤解析

Hyperlab:BNB Chain 攻擊鏈路全面複盤解析

交易地址:Transaction Address

https://bscscan.com/tx/0xebf83628ba893d35b496121fb8201666b8e09f3cbadf0e269162baa72efe3b8b

錢包地址:Wallet Address

https://bscscan.com/address/0x489a8756c18c0b8b24ec2a2b9ff3d4d447f79bec

Hyperlab 安全實驗室根據 @samczsun 的分析,此次攻擊發生的要原因在於

BSC 跨鏈橋的驗證方式存在 BUG,該 BUG 可能允許攻擊者偽造任意消息;本次攻擊中,攻擊者偽造信息通過了 BSC 跨鏈橋的驗證,使跨鏈橋向攻擊者地址發送了 200 萬枚 BNB。

幸運的是,攻擊者顯然沒有足夠快地將代幣轉移到鏈外,因為 BNB Chain 在大部分代幣被轉移之前就凍結了所有交易活動。

Hyperlab 安全實驗室提醒:當前區塊鏈行業發展迅猛,跨鏈技術的發展使得用戶對於不同區塊鏈之間的互操作成為可能。跨鏈橋作為應用範圍最廣的跨鏈解決方案(大多數雙向跨鏈橋使用 lock 和 mint 以及 burn 和 mint 模型的組合),同時成為了一個非常吸引力的目標(對於對黑客來說)。後端漏洞,多重簽名隱患,智能合約漏洞是三種跨鏈橋常見的安全風險。此次 BSC 跨鏈橋的攻擊事件也是針對跨鏈合約協議漏洞(驗證方式)而發起的。這讓人不由地聯想到了另一起跨鏈橋攻擊事件:由於執行不善的智能合約更新未能正確驗證交易輸入,Nomad 被盜竊了近 1.9 億美元。總的來說,針對合約的攻擊向量很難緩解。Hyperlab 建議採取更強大的安全審計來應對這些風險。協議開發人員需培養足夠的安全意識,充分了解跨鏈橋設計的攻擊風險,並更加關注代碼底層的邏輯細節。

附錄

@samczsun 的分析詳情如下:(https://twitter.com/samczsun/status/1578175778314780673 原文帖鏈接)

起初,以為 @VenusProtocol 又一次被黑了。然而,後面證實攻擊者將 2 億多美元存入 Venus。

Hyperlab:BNB Chain 攻擊鏈路全面複盤解析

攻擊者向 Binance Bridge 發送 100 萬 BNB 兩次。

Hyperlab:BNB Chain 攻擊鏈路全面複盤解析

首先比較了攻擊者的交易和合法提款的交易。注意到的一點是,攻擊者使用的高度總是相同的 - 110217401。合法取款人使用的高度要大得多,如 270822321

Hyperlab:BNB Chain 攻擊鏈路全面複盤解析

Hyperlab:BNB Chain 攻擊鏈路全面複盤解析

同時,攻擊者的證明明顯比合法提款的證明短。攻擊者已經找到了一種方法來偽造該特定區塊的證明 - 110217401。接下來須弄清楚這些證明是如何工作的

Hyperlab:BNB Chain 攻擊鏈路全面複盤解析

在 Binance 中,有一個特殊的預編譯合約,用於驗證 IAVL 樹,如下圖所示

Hyperlab:BNB Chain 攻擊鏈路全面複盤解析

基本上,當你驗證一個 IAVL 樹時,你指定一個 "操作" 列表。Binance Bridge 通常期望其中的兩個:一個 "IAVL"操作和一個"multistore" 操作。以下是它們的實現方式

(https://github.com/cosmos/iavl/blob/de0740903a67b624d887f9055d4c60175dcfa758/proof_iavl_value.go#L61-L82)

Hyperlab:BNB Chain 攻擊鏈路全面複盤解析

為了偽造一個證明,我們需要兩個操作都成功,而且我們需要最後一個操作(multistore)返回一個固定值(指定塊的哈希值:110217401)。

根據下圖的實現代碼,要操縱根哈希值是不可能的,或者至少是非常困難的

Hyperlab:BNB Chain 攻擊鏈路全面複盤解析

"multistore" 操作的輸入值是 "iavl" 操作的輸出值。這意味著我們要在這裡以某種方式控制根變量,同時還要傳遞驗證值

Hyperlab:BNB Chain 攻擊鏈路全面複盤解析

Hyperlab:BNB Chain 攻擊鏈路全面複盤解析

根哈希值是通過 COMPUTEHASH 的函數金進行激素。它遞歸到每個路徑和葉子上,做了一堆散列,實際上實現細節並不重要

(https://github.com/cosmos/iavl/blob/de0740903a67b624d887f9055d4c60175dcfa758/proof_range.go#L237-L290)

Hyperlab:BNB Chain 攻擊鏈路全面複盤解析

重要的是,由於哈希函數的工作方式,我們基本上可以肯定地說,任何(路徑,Nleaf)對都會產生一個唯一的哈希值。如果我們想偽造一個證明,這些就需要保持不變。

在合法交易中證明的佈局方式中,我們看到它有一個很長的路徑,沒有內部節點,只有一個葉子節點。這個葉子節點包含了我們的惡意有效載荷的哈希值!如果我們不能修改這個葉子節點,那麼我們就需要添加一個新的葉子節點

Hyperlab:BNB Chain 攻擊鏈路全面複盤解析

如果我們讓添加一個新的葉子節點,那麼我們也同樣需要添加一個與之匹配的內部節點

Hyperlab:BNB Chain 攻擊鏈路全面複盤解析

我們怎樣才能讓 COMPUTEHASH 返回我們想要的根哈希值?請注意,最終我們需要一個路徑包含一個非零的右邊哈希值。當我們找到一個這樣的路徑時,我們斷言它與中間的根哈希值相匹配

Hyperlab:BNB Chain 攻擊鏈路全面複盤解析

讓我們對代碼進行一下分析,以便弄清楚我們需要什麼哈希值

Hyperlab:BNB Chain 攻擊鏈路全面複盤解析

Hyperlab:BNB Chain 攻擊鏈路全面複盤解析

剩下的就是把這一切放在一起。我們將採取一個合法的證明,並對其進行修改,以便。

1)我們為我們的偽造的有效載荷添加一個新的葉子

2)我們添加一個空白的內部節點以滿足驗證者的要求

3)我們對我們的葉子進行調整,使其提前退出正確的根哈希值

(https://gist.github.com/samczsun/8635f49fac0ec66a5a61080835cae3db)

(值得注意的是,這並不是攻擊者使用的確切方法。他們的證明路徑要短得多,我不確定他們到底是如何生成的。然而,該漏洞的其餘部分是相同的,我相信展示如何從頭開始構建它是有價值的)

總之,Binance Bridge 驗證證明的方式有一個錯誤,可能允許攻擊者偽造任意信息。幸運的是,這裡的攻擊者只偽造了兩條信息,但損失可能會更大。

作者:HyperLab 安全實驗室
本文為 PANews 入駐專欄作者的觀點,不代表 PANews 立場,不承擔法律責任。文章及觀點也不構成投資意見。
圖片來源:HyperLab 安全實驗室 如有侵權,請聯繫作者刪除。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。