注:原文來自rekt。

回想起來,這是不可避免的。

這是發生在幣安智能鏈(BSC)上的首次令人印象深刻的攻擊事件,Meerkat Finance丟失的資金排到了排行榜的第三位。

在僅僅運營一天之後,Meerkat Finance就捲走了1300萬BUSD以及大約73000 BNB,目前涉及資金總額約為3100萬美元。

我們一直在觀察幣安智能鏈,其網絡似乎正複製以太坊DeFi夏天的發展走勢,當一些項目方通過複製的代碼建立足夠的資本後,就出現了捲款跑路(rug pull)的現象。

而這一事件的後續,將會是一種非常有趣的情況。

CZ及其團隊會不會回滾他們的公司鏈,或者就這麼讓用戶遭受損失?

這樣的騙局使得小偷無處藏身,在這麼一條鏈上,他們能跑到哪裡去呢?幣安關閉了橋樑,甚至bscscan.com也暫停了一會兒。是流量太大,還是某種類型的煙幕彈?

Meerkat Finance最初聲稱這是一次黑客攻擊,但隨後該項目方刪除了他們的賬戶,只剩下BSC用戶自己,或者去怪幣安。

感謝0xdeadf4ce提供的幫助。

Meerkat Finance部署者升級了該項目的2個金庫。攻擊者地址通過Vault代理調用無需許可初始化函數,有效地允許任何人成為Vault所有者[2]。攻擊者隨後通過調用簽名為0x70fcb0a7的函數來耗盡金庫,該函數接受了一個代幣地址作為輸入。升級為智能合約的反編譯,顯示了所調用函數的唯一用途是移除以所有者為受益人的資金。

通常,如果合約具有允許所有者主動取回策略/金庫中使用資產的函數,那麼你就是在信任這個項目團隊。

而他們可以隨時選擇跑路。

這就是為什麼像yearn這樣的項目會添加如下圖所示的檢查函數,這樣項目方就只能取回那些沒有被策略/機槍池所使用的資金。

兩個受影響的金庫都使用了OpenZeppelin的透明代理升級模式,通過在Vault代理級別上調用upgradeTo(address newImplementation)函數,可以將Vault邏輯升級到新的邏輯實現。

BUSD金庫的先前實現部署在0x49509a31898452529a69a64156ab66167e755dfb,而WBNB金庫的先前實現部署在0x3586a7d9904e9f350bb7828dff05bf46a18bb271,兩者都是相當不起眼的。

Meerkat Finance部署者調用了upgradeTo()函數兩次:

在區塊高度5381239時,將WBNB Vault實施地址設置為0x9d3a4c3acee56dce2392fb75dd274a249aee7d57;在區塊高度5381246時,將BUSD Vault實施地址設置為0xb2603fc47331e3500eaf053bd7a971b57e613d36;

這改變了金庫邏輯,引入連個值得注意的函數,而它們並非是最初實現的一部分。

init(地址所有者)根據反編譯字節碼,此函數將存儲slot 0上的地址設置為提供給該函數的地址;

無需權限檢查,這個新添加的函數成為了攻擊者闖入金庫的最終後門。

在透明代理中使用特定的Initializer模式是最佳實踐,並且已在第一個Vault實現中應用,因此除了計劃盜竊Vault資金之外,添加init()方法的意圖也是非常值得懷疑的。

0x70fcb0a7(address _param1)

源代碼不可用,反編譯源僅限於檢查調用者是否等於init()方法中設置的存儲slot 0,並使用金庫地址作為查詢目標,轉出param1隨附的代幣合約上的balanceOf() 。這兩種功能都不是以前Vault實現的一部分。

比較新舊實現的字節碼大小,我們可以發現,新實現的字節碼大小僅為以前邏輯的1/4。

由於升級是Meerkat Finance部署者完成的,考慮到鏈上數據的所有方面,因此這次事件最有可能的情況是蓄意的跑路事件,而私鑰洩露的可能性是非常小的。

截至這篇文章發佈時,被盜資金的部分已被分配到不同的地址,並被發送到似乎屬於幣安交易所託管的幣安橋。

Binance.org橋目前已暫停,可能是為了避免資金被輕易轉移到其他區塊鏈。

時間線(2021年3月4日)

2021年3月4日上午UTC時間08:53:10,Meerkat Finance部署者將WBNB金庫改到合約0x9d3a4c3acee56dce2392fb75dd274a249aee7d57;2021年3月4日上午UTC時間08:53:31,Meerkat Finance部署者將BUSD金庫改到合約0xb2603fc47331e3500eaf053bd7a971b57e613d36;2021年3月4日上午UTC時間08:54:31,攻擊者調用BUSD金庫上的0x70fcb0a7方法以轉出13,968,039 BUSD2021年3月4日上午UTC時間08:54:55,攻擊者調用WBNB金庫上的0x70fcb0a7方法以轉出73,635 WBNB

同樣的把戲在不同的鏈上發生過,但權力的平衡是不同的。在CZ的監視下,橋樑被燒毀了,強盜無處藏身。

即使是在Meerkat_Rugpull電報群中,關於幣安如何處理這種情況的問題,聊天成員們也沒有達成共識。

幣安會回滾區塊鏈並將錢退給用戶嗎?

答案並不是那麼清晰,21名神秘驗證者理論上可以安排退款,但可能性並不大,這只會助長CeDeFi的問題,並為(可能已經有壓力的)BSC律師創造更多的工作。

幣安如何處理這次事件,可能會開創一個先例。

雖然這並不是發生在BSC上的第一次捲款跑路事件,但這是自PancakeSwap興起以來的第一次,也是涉及金額最大的一次。 .

因此,我們發現,在BSC上的協議並不比在以太坊安全。

CZ不會救你,他們的交易確實便宜了,但沒有獨創的發展。

一旦以太坊Layer 2落地了,BSC這條企業鏈將會變成什麼樣?