加密貨幣市場 Paradigm 研究員:5.66 億美元 BNB 被盜全過程

Paradigm 研究員:5.66 億美元 BNB 被盜全過程

10 月 7 日上午,BNB Chain 跨鏈橋 BSC Token Hub 遭遇攻擊。駭客利用跨鏈橋漏洞分兩次共獲取 200 萬枚 BNB,價值約 5.66 億美元。(注:BSC Token Hub 是 BNB 信標鏈(BEP2)和 BNB 鏈(BEP20 或 BSC)之間的跨鏈橋。)

消息一出,BNB 價格在 2 小時內一度下跌近 5%,跌至 278.7 美元低點,撰文時報 285.34 美元,24 小時跌幅 3.2%。

根據 BNB Chain 的說法,從 BSC 提取的資金初步估計在 1 億美元至 1.1 億美元之間。並且,Tether 也在第一時間將駭客地址列入黑名單,BNB Chain 官方表示,「感謝社群和我們的內部和外部安全合作夥伴,估計有 700 萬美元已經被凍結。」

幣安創辦人  CZ 在推特上發文表示,幣安已要求所有驗證者暫停 BSC 網絡,用戶的資金是安全的,對於給用戶帶來的不便深表歉意,並將相應地提供進一步的更新。

針對具體的攻擊方式,Paradigm  研究員 Samczsun 發文表示,鏈上數據及相關代碼顯示,BSC 跨鏈橋的驗證方式存在 BUG,該 BUG 可能允許攻擊者偽造任意消息;本次攻擊中,攻擊者偽造訊息通過了 BSC 跨鏈橋的驗證,使跨鏈橋向攻擊者地址發送了 200 萬枚 BNB。

Samczsun 分析文章如下:

(1)五小時前,攻擊者從 Binance Bridge 竊取了 200 萬 BNB(約 5.66 億美元)。此後我一直在與多方密切合作致力於揭示這一切如何發生的。

幣安漏洞

(2)事情的起因是 @zachxbt 突然把攻擊者的地址發給了我。當我點擊進去的時候,我看到了一個價值數億美元的帳戶;要麼是有項目 Rug Pull 跑路,要麼就是有大規模的駭客攻擊正在進行中。

幣安漏洞

(3)一開始,我以為 @VenusProtocol 又被駭了。然而,很快我就確定了攻擊者「真的」向 Venus 存入了超過 2 億美元。這時,我就需要弄清楚這些資金的來源。

幣安漏洞

(4)答案是,攻擊者以某種方式說服了幣安跨鏈橋,直接給他們(駭客)發送了 1,000,000 BNB,而且是兩次。

幣安漏洞

(5)要麼是幣安推出 Web3 有史以來最大的「禮包」,要麼是攻擊者發現了一個嚴重的漏洞。我首先將攻擊者的交易與合法提款進行比較。我注意到的第一件事是攻擊者使用的高度始終相同——110217401,而合法提款使用的高度要大得多,例如 270822321。

幣安漏洞

幣安漏洞

(6)我還注意到,攻擊者的證明明顯短於合法提款的證明。這兩個事實使我確信,攻擊者已經找到了一種方法來偽造該特定區塊(110217401)的證明。現在,我必須弄清楚這些證明是如何工作的。

幣安漏洞

(7)在幣安上,有一個特殊的預編譯合約用於驗證 IAVL 樹。如果你對 IAVL 樹一無所知,也不要擔心,因為有 95% 的內容我也不懂。幸運的是,你和我所需要的只是知道這剩下的 5%。

幣安漏洞

(8)基本上,當你驗證一個 IAVL 樹時,你指定了一個「操作」列表。幣安跨鏈橋通常需要兩個操作:「iavl:v」操作和「multistore」操作。請參考它們的實現(implementation)

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

(10)通過查看 implementation,我們可以發現,操縱根哈希是不可能的,或者非常困難。這意味著,我們需要輸入值等於其中一個提交 ID。

幣安漏洞

幣安漏洞

(11)「multistore」操作的輸入值是「iavl:v」操作的輸出值。這意味著,我們想以某種方式控制這裡的根變量,同時仍然通過值驗證。

幣安漏洞

幣安漏洞

(12)那麼如何計算根哈希?它發生在一個名為 COMPUTEHASH 的函數中。在非常高的層次上,它遞歸地遍歷每條路徑和葉節點並進行大量的哈希運算

(13)實際上,實現細節並不重要,重要的是,由於哈希函數的工作方式,我們基本上可以肯定地說,任何(path, nleaf)對都會產生唯一的哈希。如果我們想偽造證據,這些就得保持不變。

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

幣安漏洞

(15)當然,如果我們添加一個新的葉節點,我們還需要添加一個新的內部節點來匹配。

幣安漏洞

(16)現在我們只需要面對最後一個障礙。我們如何真正讓 COMPUTEHASH 返回我們想要的根哈希?好吧,請注意,最終我們將需要一個包含非零右哈希的路徑。當我們找到一個匹配時,我們斷言它與中間根哈希匹配。

幣安漏洞

(17)讓我們稍微檢測一下代碼,這樣我們就可以弄清楚我們需要什麼哈希,然後剩下的就是把它們放在一起,我們將採用合法證明並對其進行修改,以便:

1)我們為偽造的有效負載添加一個新葉節點;

2)我們添加一個空白內部節點以滿足證明者;

3)我們調整我們的葉節點以使用正確的根哈希提前退出。

幣安漏洞

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

(19)總之,幣安跨鏈橋驗證證明的方式存在一個錯誤,該錯誤可能允許攻擊者偽造任意消息。幸運的是,這裡的攻擊者只偽造了兩條消息,但損害可能要嚴重得多。