政策Samcz...

Samczsun 詳述拯救BitDAO 在MISO 荷蘭拍資金池中3.5 億美元資產經過

五個小時時間,Samczsun 與多名白帽黑客聯手完成了一場3.5 億美元資產搶救行動。

原文標題:《BitDAO 的3.5 億美元險些被盜,白帽黑客講述一場驚心動魄拯救行動全程》
撰文:Samczsun,區塊鏈投資機構Paradigm 研究合夥人、著名加密白帽黑客
編譯:Kyle

8 月17 日,區塊鏈投資機構Paradigm 研究合夥人、著名白帽黑客Samczsun 撰文披露了BitDAO 在SushiSwap IDO 平台MISO 進行的荷蘭拍的智能合約存在安全漏洞,多名白帽黑客聯手從眾籌資金池中拯救回10.9 萬枚ETH (約合3.5 億美元)的經過。


當構建軟件時經常出現的一個常見誤解是,如果系統中的每個組件都經過單獨驗證是安全的,那麼系統本身也是安全的。這種觀念在DeFi 項目中被更多地體現了出來。在DeFi 項目開發中,可組合性就是開發人員的第二天性。不幸的是,雖然將兩個安全的組件部分組在一起,在大多數情況下可能是安全的,但這也意味著只需要一個漏洞即可對數百甚至數千名無辜用戶造成嚴重的經濟損失。今天,我想告訴你我如何發現並幫助修補了一個嚴重的漏洞,這個漏洞會使超過109,000 ETH (按今天的匯率計算約3.5 億美元)面臨被盜風險。

相遇

上午9:42

當我在推特上註意到@ivangbi_和@bantg 之間關於SushiSwap 的MISO 平台上的一個新代幣銷售項目的討論時,我正隨意瀏覽Telegram 上的LobsterDAO 群聊。我通常會盡量避免在公共場合做出一些戲劇性的事情,但我忍不住在谷歌上快速搜索了一下,看看到底是怎麼回事。我得到的結果對我來說並不是特別有趣,但我繼續往下搜索,因為我覺得如果我繼續尋找,就會發現這裡有一些有趣的東西。

MISO 平台支持兩種類型的代幣拍賣模式: 荷蘭式拍賣和批量拍賣。而今天說的這個代幣銷售是通過荷蘭式拍賣進行的。當然,我做的第一件事就是在Etherscan 上打開該項目的合約地址。

上午9:44

我通過該項目的參與協議快速瀏覽了這起荷蘭式拍賣的合約並檢查了每個有意思的函數。該合約的提交函數(commitEth、commitTokens 和commitTokensFrom)似乎都已正確實現。拍賣管理函數(setDocument、setList 等)也有適當的訪問控制。然而,在底部附近,我注意到initMarket 函數沒有訪問控制,這非常令人擔憂。此外,它調用的initAuction 函數也不包含訪問控制檢查。

不過,我真的沒想到會發現這麼一個漏洞,因為我沒想到Sushi 團隊會犯下如此明顯的失誤。果然,initAccessControls 函數驗證了合約尚未初始化。

然而,這時候我又有了另一個發現。在滾動瀏覽所有文件時,我注意到了SafeTransfer 和BoringBatchable 庫。我對這兩者都很熟悉,並且立即對BoringBatchable 庫的潛在危險感到震驚。

這裡先解釋一下,BoringBatchable 是一個混合庫,旨在輕鬆地將批處理調用引入任何導入它的合約。它通過為輸入中提供的每個調用數據對當前合約執行委託調用來實現這一點。

function batch(bytes[] calldata calls, bool revertOnFail) external payable returns (bool[] memory successes, bytes[] memory results) {
        successes = new bool[](calls.length);
        results = new bytes[](calls.length);
        for (uint256 i = 0; i < calls.length; i++) {
            (bool success, bytes memory result) = address(this).delegatecall(calls[i]);
            require(success || !revertOnFail,_getRevertMsg(result));
            successes[i] = success;
            results[i] = result;
      }
}

看看上面這個函數,它似乎被正確地實現了。然而,在我腦海的角落裡,有什麼東西在提醒著我。那時我意識到我過去曾看到過非常相似的東西。

發現

上午9:47

距離今天大約一年多前,我在與Opyn 團隊的Zoom 視頻通話中,試圖弄清楚如何在遭受毀滅性黑客攻擊後恢復和保護用戶資金。黑客攻擊手法本身很簡單但很巧妙: 它使用一次ETH 支付來行使多個期權,因為Opyn 合約在循環中使用了msg.value 變量。雖然處理代幣支付涉及每個循環迭代的單獨transferFrom 調用,但處理ETH 支付只是檢查msg.value 是否足夠。這允許攻擊者多次重複使用相同的ETH。

回到今天,我意識到我正在看到的是兩個完全相同的漏洞,只是形式不同。在委託調用中,msg.sender 和msg.value 被持久化。這意味著我應該能夠批量調用commitEth 並在每個commitment 中重複使用我的msg.value,這將允許我在拍賣中能夠免費出價。

上午9:52

我的直覺告訴我這是真實的交易,但我無法在沒有實際驗證的情況下確定。我迅速打開Remix 並編寫了一個概念驗證。令我沮喪的是,我的主網分叉環境之前不久被完全損壞了。我一定是在倫敦硬分叉期間不小心弄壞了它。有這麼多資金正處於風險之中,而我卻沒有足夠的時間。我很快在命令行上拼湊了一個簡陋的主網分叉並測試了我的漏洞。結果跟我想的一樣。

上午10:13

在對外報告這個漏洞風險之前,我給我的同事Georgios Konstantopoulos 打了電話,讓他​​們再看一遍。在等待回應的同時,我又回到合約中尋找確定嚴重性的方法。在這種情況下,能夠免費參加拍賣是一回事,但能夠竊取所有其他參與者的出價則是另一回事。

我注意到在我最初的掃描過程中有一些退款邏輯,但當時我並未多想。現在,這已是一種讓ETH 退出合約的方法。我很快檢查了我需要滿足哪些條件才能讓合約為我提供退款。

令我驚訝(和恐懼)的是,我發現發送的任何超過拍賣硬上限的ETH 都會獲得退款。即使達到硬上限,這也適用,這意味著合約不會完全拒絕交易,而是簡單地退還您的所有ETH。

突然間,我發現的這個漏洞變得巨大。我不是在處理一個讓你出價可以超過其他參與者的漏洞。我在看的是一個價值3.5 億美元的漏洞。

披露

上午10:38

在與Georgios 確認這個漏洞後,我讓他和Dan Robinson 嘗試聯繫Sushi CTO Joseph Delong。幾分鐘後,Joseph 做出了回應,然後我與Georgios、Joseph、Mudit、Keno 和Omakase 一起進行了Zoom 通話。我就漏洞向其他參與者進行了快速匯報,然後他們開始四處協調響應。整個通話只持續了幾分鐘。

準備

上午11:26

在救援行動室裡,Mudit、Keno、Georgios 和我正在忙著寫一份簡單的救援合約。我們決定最乾淨的做法是發起一筆閃電貸,直接購買到硬上限,結束拍賣,然後使用拍賣本身的收益償還閃電貸。這種方法不需要前期準備資金,效果非常好。

下午1:36

當我們完成救援合約的工作時,我們討論了批量拍賣的後續步驟。 Mudit 指出,即使在拍賣進行時也可以設置一個積分列表,並且在每次ETH commitment 期間都會調用它。我們立即意識到這可能是我們正在尋找的暫停功能。

我們集思廣益,想出了不同的方法來使用這個方法。立即還原是一個顯而易見的解決方案,但我們想要更好的方案。我考慮添加一個檢查,每個源只能為每個區塊做出一個commitment,但我們注意到該函數被標記為視圖,這意味著Solidity 編譯器將使用靜態調用操作碼。我們的方式不允許進行任何狀態修改。

經過一番思考,我意識到我們可以使用積分列表來驗證拍賣合約是否有足夠的ETH 來匹配所做的commitment。換句話說,如果有人試圖利用這個漏洞,那麼commitment 會比ETH 多。我們可以很容易地檢測到這一點並還原交易。 Mudit 和Keno 開始編寫測試以進行驗證。

救援

下午2:01

通信突圍團隊與救援突圍團隊合併工作以同步進度。他們已經與執行拍賣的團隊(BitDAO)取得了聯繫,但該團隊希望手動完成拍賣。我們討論了風險並認為某個自動化機器人注意到這筆交易或能夠對其採取任何行動的可能性很小。

下午2:44

執行拍賣的團隊完成了拍賣,消除了直接威脅。我們互相祝賀成功,然後各自解散。這次批量拍賣將在當天晚些時候悄悄結束。不知情的人恐怕不知道剛剛避免了一場多麼嚴重的災難。

反思

下午4:03

過去的幾個小時讓人感覺很模糊,時間好像靜止一樣。我從相遇這個項目到發現漏洞只用了半個多小時,20 分鐘內進行了披露,另外30 分鐘內作戰室,三個小時內修復漏洞。總而言之,只用了五個小時就保護了3.5 億美元不落入壞人之手。

即使沒有金錢上的損失,我相信所有參與其中的人都更願意一開始就沒有經歷過這個過程。針對這次事件,我有兩個主要的要點給你。

首先,在復雜系統中使用msg.value 很困難。它是一個全局變量,您無法更改並在委託調用中保持不變。如果您使用msg.value 來檢查是否已收到付款,則絕對不能將該邏輯置於循環中。隨著代碼庫複雜性的增加,很容易忘記發生的位置並意外地在錯誤的位置循環某些內容。雖然封裝和釋放ETH 很麻煩並且引入了額外的步驟,但如果想要避免這樣的事情,那麼WETH 和其他ERC20 代幣之間的統一接口可能值得一試。

其次,兩個安全組件組合在一起,可能就會得到不安全的東西。我之前曾在可組合性和DeFi 協議的背景下聲明過這一點,但這次事件表明,即使是安全的合約級組件也可能以產生不安全的合約級行為的方式混合。這裡沒有像「檢查-效果-交互」這樣的包羅萬象的建議,所以你只需要了解新組件引入的額外交互。

我要感謝Sushi 的貢獻者,Joseph、Mudit、Keno 和Omakase 對這個問題的快速響應,以及我的同事Georgios、Dan 和Jim 在整個過程中提供的幫助,包括審閱了這篇文章。

來源鏈接:www.8btc.com

.

Source Link

最受歡迎

繼續閱讀

長期持有者持有的比特幣(BTC)供應量達到最高水平

根據Glassnode 的估計,比特幣的長期持有者(LTH)目前擁有1452 萬枚BTC,創歷史新高,只剩下25% 留給短期持...

抓住Web3 遊戲的先發優勢:成功策略

Web3和區塊鏈技術的出現徹底改變了遊戲行業,為開發者和企業家提供了前所未有的機遇。 Web3 遊戲的去中心化性質為創新遊戲貨幣化模式、玩家所有權和社區參與打...

現在讀

$COOKIE, the Cookie3 Mark...

Tallinn, Estonia, March 26th, 2024...

長期持有者持有的比特幣(BTC)供應量達到最高水平...

根據Glassnode 的估計,比特幣的長期持有者(LTH)目前擁有1452 萬枚BTC,創歷史新高,只剩下25% 留給短期持有者和投機者。 儘管BTC 的價格在過去一個月中保持相對平穩,範圍在約29,000 美元至31,000 美元之間,但人們還是開始瘋狂囤積。 ...

Caldera 宣布與Espresso Syste...

Caldera 開發人員可以利用Espresso Sequence...

抓住Web3 遊戲的先發優勢:成功策略

Web3和區塊鏈技術的出現徹底改變了遊戲行業,為開發者和企業家提供了前所未有的機遇。 Web3 遊戲的去中心化性質為創新遊戲貨幣化模式、玩家所有權和社區參與打開了大門。對於那些尋求利用Web3 遊戲巨大潛力的人來說,確保先發優勢至關重要。 了解Web3 遊戲生態系統在深入研究Web3 遊戲之前,有...

Taapsee Pannu 推出NFT 平台,介紹...

企業家貢獻者表達的意見是他們自己的。 您正在閱讀《企業家印度》,這是企業家媒體的國際特許經營刊物。 女演員Taapsee Pannu 最近推出了“taapseeclub.com”,這是她自己的非同質代...

比特幣(BTC) 地址休眠超過11 年,轉移310...

經過11 年多的閒置之後,一個包含3100 萬美元BTC 的休眠比特幣地址最近突然活躍起來。 2023年7月22日,地址 轉入 將其全部餘額轉移到新地址。 早期BTC 地址復活 比特幣自2009 年以來就已經存在,因此存在多年來不活躍的休眠地址,其中包含大量BTC。這種加密貨幣的一些早期採用者能夠...

加密貨幣死了嗎?當今加密貨幣的現狀

您之前可能聽說過加密貨幣正在消亡(或比特幣已消亡)。在這篇文章中,我們將研究加密貨幣的狀態,並嘗試回答這個問題:加密貨幣現在已經死了嗎? 在我們開始之前,我們想澄清一下,本文指的是最廣泛意義上的“加密貨幣行業”; 在裡面 網絡3 感覺。該定義包括加密資產市場; 但它還包括其他非財務用例。 隨著近來加...

Chancer 可能成為體育和社交博彩領域的下一個...

加密貨幣 隨著企業財報季節的繼續,本週股市表現好壞參半。在Ne...

以太坊(ETH) 創下兩個月來CEX 流入最高紀錄...

過去一周,以太坊(ETH)流入中心化交易所(CEX)的資金量創下了過去兩個月來的最高水平。這些重大的資產變動表明ETH 的價格可能會下跌。 CoinGecko 數據顯示,第二大加密貨幣的價格一直在小幅下跌,過去一周價值下跌了2.5%。截至撰寫本文時,以太幣易手價格為1,892.65 美元,過去24...

新的DeFi 法案有“不可行的義務”

加密貨幣創新委員會表示,新的反洗錢法案沒有為DeFi 中的非法金融...

幣安大幅削減成本,瑞波幣為美國銀行和加密貨幣風險投...

美國證券交易委員會(SEC)對加密貨幣公司的打擊似乎嚴重影響了幣安的業務。據報導,在過去幾週內,該加密貨幣交易所解雇了1,000 多名員工,並削減了一些福利。 幣安表示,“當前的市場環境和監管環境”導致利潤下降,這表明可能正在進行更多削減。一位發言人告訴Cointelegraph,該公司將考慮縮減“...

Automata 雙週更新:第48 期| 通過自動...

迎接新的季度意味著設定我們的意圖並為團隊規劃下一步的行動。幕後醞釀的一切——合作、產品功能和營銷發布——很難抑制我們的興奮。我們一開始就在1RPC(2 個備受期待的第2 層主網)上添加了對Linea 和Base 的支持。科技載體更新頁腳以顯示界面版本平滑的用戶體驗 USDC CCTP 支持 關於仲裁...