Back to Blog

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

Code Auditing
August 15, 2021
5 min read

在本篇部落格中,我們希望回顧 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

Best Security Auditor for Web3

Validate design, code, and business logic before launch. Aligned with the highest industry security standards.

BlockSec Audit