風險提示:防範以"虛擬貨幣""區塊鏈"名義進行非法集資的風險。——銀保監會等五部門
資訊
發現
搜索
登錄
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt
BTC
ETH
HTX
SOL
BNB
查看行情
解析:約5.66億美元BNB被盜全過程
秦晓峰
Odaily资深作者
@QinXiaofeng888
2022-10-07 02:43
本文約2416字,閱讀全文需要約4分鐘
CZ:網絡暫停,用戶資金安全。

北京時間今天上午,BNB Chian 跨鏈橋BSC Token Hub 遭遇攻擊。黑客利用跨鏈橋漏洞分兩次共獲取200 萬枚BNB,價值約5.66 億美元。(注:BSC Token Hub 是BNB 信標鏈(BEP2)和BNB 鏈(BEP20 或BSC)之間的跨鏈橋。)

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

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

samczsun 分析文章如下:

二級標題

samczsun 分析文章如下:

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

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

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

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

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

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

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

(8)基本上,當你驗證一個IAVL 樹時,你指定了一個“操作”列表。幣安跨鏈橋通常需要兩個操作:“iavl:v”操作和“multistore”操作。以下是它們的實現(implementation):https://github.com/bnb-chain/bsc/blob/46d185b4cfed54436f526b24c47b15ed58a5e1bb/core/vm/lightclient/multistoreproof.go#L106-L125

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

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

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

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

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

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

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

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

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

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

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

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

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

https://gist.github.com/samczsun/8635f49fac0ec66a5a61080835cae3db…

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

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

BNB
Paradigm