返回部落格

從安全研究員視角回顧 Poly Network 駭客事件

Code Auditing
2021年8月15日
閱讀約 5 分鐘

在本篇部落格中,我們希望回顧 Poly Network 被駭事件的完整過程,並討論從中學到的教訓。

我們於 2021 年 8 月 10 日得知 Poly Network 遭到駭客攻擊(本部落格使用 +8 時區)。然而,當時並不清楚駭客攻擊是如何發生的,以及攻擊的根本原因為何。作為一個安全研究團隊,我們隨即展開了調查。

第一步:找到攻擊交易

我們在我們的交易虛擬化系統 (https://tx.blocksecteam.com) 中重放了攻擊交易 0xd8c1f7424593ddba11a0e072b61082bf3d931583cb75f7843fc2a8685d20033a。

執行軌跡非常簡單,這與其他操縱價格的攻擊不同。那些攻擊通常涉及極為複雜的函數呼叫(請參閱 Popsicle 駭客事件分析)。

第二步:分析合約代碼

在獲得攻擊軌跡後,我們需要審查合約的源代碼。令人驚訝的是,Poly Network 在 Etherscan 上並沒有經過驗證的源代碼。不過,我們最終在 GitHub 上找到了已發佈的源代碼。

在審查源代碼之後,我們沒有發現任何明顯的代碼漏洞。我們還將攻擊軌跡與合法交易的軌跡進行了比較,發現兩者非常相似。

第三步:恢復關鍵狀態

接著,我們恢復了攻擊期間的關鍵狀態。由於攻擊是從呼叫 VerifyHeaderAndExecuteTxEvent 開始的,我們恢復了幾個關鍵變數的值,我們已在初步分析中分享了這些內容 [1]。

在這個過程中,我們發現只有一個看守者 (keeper)(參見上圖)。由於該值是從攻擊軌跡中獲取的,且攻擊交易通過了所有簽名驗證,我們認為潛在原因可能是私鑰洩漏或伺服器簽名流程中的錯誤 [1]。

然而,我們在這裡犯了一個錯誤。分析攻擊就像剝洋蔥一樣。你必須一層一層地剝開,直到找到真正的「根源」。當時,我們並沒有進一步剝開洋蔥來查看看守者是否已被更改!

第四步:新線索

幾個小時後,Kelvin 和慢霧 (SlowMist) 在 Twitter 上提供了新的線索,證明看守者已經被更改。更改過程利用了雜湊碰撞來呼叫一個強大的功能——這是一次「極具智慧」的駭客攻擊。

現在我們意識到,我們的初步分析並不完整。根據最新資訊,我們重放了更改看守者的交易。結果顯示,其軌跡也非常簡單。

但請記住,在此次交易過程中,出現了四個看守者(而不是一個)。所有這些密鑰與其他合法交易的密鑰相同——這意味著這些密鑰是合法的。問題來了:為什麼更改看守者的交易能被成功打包上鏈並執行?

第五步:定位來源交易

我們隨即嘗試定位來源交易,因為 Poly Network 是一個跨鏈橋,理應在某處存在一筆來源交易。我們透過解碼關鍵變數(如下圖所示)完成了這項工作。它顯示了來源鏈和 Poly 鏈上的交易雜湊值。

這裡有一個尚未被其他地方提到的訣竅。該變數中的交易雜湊值,其呈現方式與 Poly 鏈上的官方雜湊值不同。例如,圖中 Poly 鏈的交易雜湊為 0x80cc978479eb082e1e656993c63dee7a5d08a00dc2b2aab88bc0e465cfa0721a。但在 Poly 鏈瀏覽器上,該雜湊值為 1a72a0cf65e4c08bb8aab2c20da0085d7aee3dc69369651e2e08eb798497cc80(你看出差別了嗎?)。我們已於 8 月 11 日 16:55 在 EthereumSecurity Telegram 群組中分享了這一發現。

第六步:定位根本原因

但我們仍然無法回答「為什麼更改看守者的交易」能夠被打包上鏈的問題。為了回答這個問題,我們從 Ontology 鏈開始追蹤,並發現了以下交易流程:

Ontology 交易 -> Ontology 中繼器 (relayer) -> Poly 鏈 -> Ethereum 中繼器 -> Ethereum

我們隨後閱讀了 Ontology 鏈和中繼器的源代碼。幾個小時後,我們發現 Ontology 中繼器對跨鏈交易缺乏足夠的驗證。這使得惡意交易能夠被打包到 Poly 鏈上,進而導致整個系統被攻破。

經過內部討論和反覆核對後,我們於 8 月 12 日 02:41 在 Twitter 和 Medium 上發佈了研究結果 [3]。

教訓

  • 設計安全性 (Security by design)。 安全應貫穿於 DeFi 項目的整個開發過程。用戶將資金託付給項目,項目則必須值得信賴。遺憾的是,我們看到了 Poly Network 對安全的忽視。例如,缺乏驗證是一種老派的安全漏洞,這我在大學課程中都曾教過。

  • 對於像這種擁有超過 6 億美元 TVL 的 DeFi 項目,竟然沒有經過驗證的源代碼。 去中心化基礎設施的基礎是信任,而信任的根基是透明度。遺憾的是,用戶願意將資金投入到一個黑箱項目中,這讓我感到驚訝與擔憂。如何提升用戶的安全意識,可能需要一個全新的解決方案。

參考文獻

[1]https://blocksecteam.medium.com/the-initial-analysis-of-the-polynetwork-hack-270ac6072e2a

[2]https://twitter.com/kelvinfichter/status/1425290462076747777

[3]https://blocksecteam.medium.com/the-further-analysis-of-the-poly-network-attack-6c459199c057

製作團隊:Yufeng Hu, Siwei Wu, Lei Wu, Yajin Zhou @ BlockSecTeam

BlockSec (@BlockSecTeam) / Twitter

訂閱最新動態
NEAR Intents 遭攻擊:退款漏洞與資安教訓
Security Insights

NEAR Intents 遭攻擊:退款漏洞與資安教訓

NEAR Intents 遭到攻擊時,攻擊者利用金額過大的退款事件,在存入的資產退回後仍保留內部餘額。本文分析重建回執流程及 BNB Chain 上合計 3,865,021 USDT 的七筆出金,將這些資金流出與專案方所稱的資金全數追回區分開來,並概述開發及審計 NEAR 智能合約時應注意的安全事項。

損失約 557萬 USD:X100 Freezer、NEM 遭攻擊 | BlockSec 週報
Security Insights

損失約 557萬 USD:X100 Freezer、NEM 遭攻擊 | BlockSec 週報

本週報涵蓋 2026年10月19日–2026年10月25日 期間發生在 Ethereum 和 BNB Chain 上的兩起安全事件。報告分析了以閃電貸提供資金、奪取 X100 Freezer 治理權的事件,以及影響 BNB Chain 上某個 NEM 代幣流動性池的稅費結算缺陷。報告範圍內的估計損失合計約 557萬 USD:具代表性的 X100 交易造成約 475萬 USD 的損失,NEM 流動性池事件造成約 82.0萬 USD 的損失。此合計金額不包含另行報導的後續 X100 資金提取。

損失約 387萬 USD:Autheo Network、UNCX 遭駭|BlockSec 週報
Security Insights

損失約 387萬 USD:Autheo Network、UNCX 遭駭|BlockSec 週報

本週報告涵蓋 2026年10月12日–2026年10月18日 期間的 3 起安全事件,估計總損失約為 387萬 USD。Autheo Network 因私鑰遭入侵損失約 176萬 USD;Qubic Wallet 因種子產生機制薄弱損失約 130萬 USD;UNCX Network 的 Smart Token Vesting V2 合約在 Ethereum、BNB Chain、Base 和 Robinhood Chain 上因帳務計算錯誤造成約 80.7萬 USD 的損失。重點分析的 UNCX 事件說明,有缺陷的份額總計計算如何將以不同代幣與份額比率建立的代幣歸屬批次混在一起,進而使人得以從共用資金池超額提領。

Web3 最佳安全審計方

在上線之前驗證設計、程式碼與業務邏輯,對標業內最高安全標準。

BlockSec 審計
從安全研究員視角回顧 Poly Network 駭客事件