通過破壞 Infrua,基本上可以破壞所有 Rollup。

原文標題:《以太坊使用 Rollup 技術的安全風險在哪裏?》
整理:Qingzhou

以太坊已經確認了以 Rollup 爲中心的 2.0 路線圖,這讓 Rollup 成爲了炙手可熱的技術,也可以說已經成爲了 Layer 2 擴容的主流技術。如果與零知識證明搭配起來,Rollup 會是 Layer 2 技術裏解決方案的集大成者。

但正所謂「沒有絕對安全的系統」,Rollup 同樣存在一定安全隱患,以太坊研究者論壇的開發者已經在討論此事。1 月 20 日,以太坊開發者「jchancehud」發佈了關於虛擬 Rollup 攻擊的討論。

以下爲關於虛擬 Rollup 攻擊的討論。經白計劃團隊整理,有所修改和批註。

Rollup 的安全風險原因

模擬 Rollup 攻擊的基本原理是:只要虛擬狀態有效,任何以太坊節點都可以向 Optimistic Rollup 協調員撒謊。而協調員只有在嘗試發送交易或切換以太坊供應商時(意味着同步全節點狀態)纔會發現這一點。

Optimistic Rollup 是通過在以太坊網絡上使用 calldata 存儲塊信息來進行。這個過程允許任何人操作以太坊節點並下載 Rollup 狀態。但實際上,有些人不會操作他們自己的以太坊節點,而是依靠託管解決方案(例如 Infura)。

需要驗證有效性

如果要快速低成本地構建有效的 Rollup 鏈,需要做的是進行交易、構建狀態並將其存儲在以太坊網絡以外的其他位置。當 Rollup 協調員從以太坊節點接收狀態歷史記錄時,協調員可以通過重播狀態交易來確定數據是否有效。然而,協調員不能確定鏈上是否存在該狀態,最好的辦法是詢問以太坊節點。

如果出現人爲攻擊

如果想象一個名爲 Untrust 的以太坊節點服務。Untrust 爲以太坊 DApp 提供了低成本的基礎架構。如果他們選擇不信任,則可以查看特定的 Rollup 並創建虛構的歷史記錄。他們甚至可以通過從某些真實交易中提取通信數據並將其與虛擬交易混合來創建半虛擬歷史。

這樣,他們將創建一個完全不同的當前狀態哈希,但只有在使用 Untrust 的 Rollup 運算符去(向鏈上)提交一個塊的情況下,這纔會被發現(這將是欺詐性的)。

這種類型的攻擊並不是特別強大。攻擊者無法僞造簽名,不能直接竊取資金,但可以在 Rollup 中撒謊自己的活動。

想象一下,Untrust 變得更加複雜。他們決定攻擊名爲 MoneyMover 的 Rollup。

當收到對 MoneyMover 地址的請求時,它們會從運行完全獨立的以太坊網絡的節點返回信息。在這個獨立的以太坊網絡中,Untrust 鏡像了大多數交易(使賬戶餘額看起來相似),並在需要時注入自己的(假)交易。

現在說 Untrust 找到一個使用 MoneyMoverRollup 付款的網站。該網站運行自己的 MoneyMover 協調員,該協調員連接 Untrust 以訪問以太坊網絡。

Untrust 可能會在其鏡像網絡中創建虛構的交易,MoneyMover 協調員將其解釋爲有效(只要狀態交易有效)。由於 MoneyMover 協調員未與任何對等方連接,因此確定鏈上存在的唯一方法是詢問以太坊節點(在本例中爲 Untrust)。

Untrust 在其鏡像網絡上進行了一次虛構的交易,該網站運營的 MoneyMover 協調員將其檢測爲有效付款。Untrust 現在無需付費即可訪問該網站。網站只會在他們提交交易或切換到其他以太坊供應商(即要與其他節點同步數據)時才發現這種虛構的付款。

實際可能出現的風險

以上的攻擊是僅當協調員未運行其自己的以太坊節點時,此攻擊纔有意義。有一些情況是有問題的:

  1. 協調員數據的下游使用者無法知道他們接收的數據是否(在鏈上)存在,他們不能信任協調員正在使用的 eth 節點,因爲使用者沒有自己運行該節點。
  2. 欺詐證明者(去證明惡意交易的一方)尤其容易受到這種攻擊,因爲它們僅在檢測到欺詐行爲時纔會提交交易。惡意的 eth 節點可能會從區塊鏈數據中剝離無效交易,並僅返回不同的狀態哈希。欺詐證明者將無法得知狀態哈希是虛構的,並且永遠不會提交欺詐聲明。
    3.eth 節點操作員向 Rollup 協調員說謊,以誘使他們要麼提交無效的狀態交易,要麼提交無效的欺詐聲明。一旦發生這種情況,惡意的 eth 節點運營商就可以充當有效的交易對手並收集抵押的資金。

解決方案

在工作量證明鏈的背景下,協調員可以請求塊數據並檢查其是否足夠困難。檢查當前難度的至少一半應該可以使大多數攻擊因爲財務問題無法實現。

在權益證明鏈中,這個過程變得不可行,因爲惡意的 eth 節點可能會從未投票的地址提供簽名。他們可以通過在查詢時質押抵押金額來做到這一點。

解決方案

一個不太優雅的解決方案是:對信譽良好的節點不斷簽名,併發布已存在於鏈上的 Rollup 狀態哈希的列表。該列表可以在 IPFS 之類的服務上發佈。協調員節點可以包括一個已知的信譽良好的公共密鑰的預設列表(Rollup 創建者,EF 等)。

如果出現以下情況,協調員會知道 Rollup 數據是真實的:

  1. 所有狀態交易均有效。
  2. 所有狀態散列均由信譽良好的來源(節點)進行簽名。

這將確保 Rollup 數據有效且非虛構,並且將允許 Rollup 節點使用任何以太坊節點來同步數據。

以上是「jchancehud」討論的 Rollup 安全攻擊的可能性。

主要是因爲 Rollup 是鏈下狀態,容易在很多狀態裏出現信息同步不及時的情況,據「jchancehud」表示的,需要驗證鏈下狀態是否有效的一方需要同步其他以太坊全節點的數據纔可以確認最終安全性,這意味着很多平臺需要運行一個以太坊節點。

對於上文舉出的虛擬攻擊方式,以太坊的 Layer 2 解決方案團隊 SKALE Labs 首席技術官「Konstantin Kladko」表示,「這真的很有趣!我認爲這表明,通過破壞 Infrua,可以基本上破壞所有 Rollup。」

當然,這是代表着那些通過 Infura 來與以太坊通訊的產品,Infura 承擔着很大的以太坊節點服務規模,此前也有關於 Infura 是否會是以太坊網絡最大單點漏洞的討論。而對於這個單點安全風險,主要是以多節點負載均衡的方式處理,盡力規避。

而對於「jchancehud」的討論,最有趣的是開發者「adlerjohn」提出,這種虛擬的「攻擊」似乎不僅適用於 optimistic Rollup,而且還適用於 zkRollup,實際上也適用於任何智能合約。

這一推論很可能是基於「只要存在信息不對稱危險」的協作過程,就會面臨「jchancehud」所說的攻擊風險。

所以「adlerjohn」提出,在比特幣的白皮書第 8 節,有如何驗證信息對錯的方式,即驗證者確定最長鏈,信任最長鏈,這個方式描述了一種衆所周知的方案,這個該方案可用於防止 Sybil 節點提供虛假信息,這樣可以不要求大多數計算是誠實的。

Rollup 成爲以太坊擴容主力,但這些技術風險不容忽視比特幣白皮書的第 8 節

此外,「adlerjohn」提出,Rollup 的狀態根可以作爲事件發出,甚至可以存儲在以太坊狀態中,也可以進行僞造交易的查詢(例如比特幣白皮書中第 7 節表示可通過驗證區塊頭進行確認)。

Rollup 成爲以太坊擴容主力,但這些技術風險不容忽視比特幣白皮書的第 8 節

另外,「adlerjohn」還提到了關於 optimistic Rollup 方案中,還可以包含名爲「最小可行合併共識」的設計,該設計可以通過發佈有序數據來實現數據可用性,可以讓多個側鏈、分片使用。

白計劃注: 最小可行合併共識的解讀在如下鏈接

https://ethresear.ch/t/minimal-viable-merged-consensus/5617

但可以預見的是,使用「adlerjohn」提出的方式,是存在較大的設計難度的。

在討論的最後,「jchancehud」回覆「adlerjohn」表示,不能確定這種攻擊預測是否適用於 ZKRollup。但因爲 ZK 證明更難生成,至少會更加困難。如果 Rollup 被廣泛採用,那麼這樣考慮 Rollup 尤其重要。

Rollup 協調員可以在使用節點之前驗證節點中的所有區塊頭,這是另一種潛在的解決方案,儘管時間和帶寬昂貴。但用戶最好運行自己知道可以信任的 eth 輕節點。如果已經解決驗證問題,運行輕節點還可以查詢事件。

討論在最後,我們會發現爲了實現安全性、可擴展性、效率,這些方案按工程化的思路是可以嘗試的,但實施過程一定是困難的,因爲不同開發者的討論思路最後還要合成代碼,以及包含網絡結構、客戶端、語言、操作界面等多個挑戰。

時間戳向前,區塊不停,我們繼續期待吧。