CertiK獨家分析:如何透過ZenGo針對MPC 錢包的整體安全性

CertiK獨家分析:如何透過ZenGo針對MPC 錢包的整體安全性

ZenGo 是一個使用多方計算(MPC)技術的安全 Web 3 錢包。

最近,CertiK 的 SkyFall 團隊對眾多移動錢包進行了徹底的審計和研究,發現 ZenGo 的 MPC 解決方案提供了比普通移動錢包更強大的安全防禦措施——ZenGo 的錢包使用者,尤其是那些高價值的錢包使用者可以防禦來自高階攻擊者的直接攻擊:例如利用零日漏洞或高階惡意軟體在使用者裝置上獲得 root 許可權。

該威脅是最新出現且僅被 CertiK 團隊發現,因此 MPC 錢包開發者請務必注意攻擊細節!

防禦特權攻擊者是具有挑戰性的。我們在報告結果中提出了一個新的攻擊方式,與針對 ZenGo 中的 MPC 方法攻擊向量。於是我們立即向 ZenGo 報告了這個安全問題,同時 ZenGo 也迅速做出了回應並修復了該問題。

本文我們將深入探討該發現的技術細節,並分享我們是如何與 ZenGo 合作以提高 MPC 錢包的整體安全性的。

基於我們對 ZenGo 安全設計的徹底審查和他們對問題的專業回應,CertiK 認為 ZenGo 可以被稱為目前市場上安全度較高的錢包解決方案。

如下圖所示,該錢包並不是由一個傳統的私鑰來控制簽署交易,而是由多個私鑰分片參與交易簽署過程,併產生一個最終簽名從而進行驗證。

<p “=””>ZenGo MPC 設計和安全保證

透過本次研究,我們已認識到與 MPC 方法相關的挑戰和潛在的安全風險對於 Web 3 資產保護的重要性。於是我們想要透過探索和解決這些挑戰來更好地保護Web3使用者。

 因此我們可以想一下這個問題:與傳統的加密錢包相比,為什麼 MPC 錢包可以提供更高的安全性?它又是如何做到的?

在評估了不同 Web 3 錢包的設計後,我們研究了 MPC 的 Web 3 錢包——我們評估了市場上最受推崇的 MPC 錢包之一,同時也是頭部的自我託管 MPC 錢包——ZenGo。

本次評估我們採用了與之前研究概述中相同的威脅模型:“如果你的裝置被植入了惡意軟體,那麼該錢包還能保護你的資產嗎?”

有了這些安全功能,攻擊者就不能再從記憶體或儲存文件中竊取使用者的私鑰並控制 ZenGo 使用者的資產。ZenGo 還利用 TEE 來保護伺服器和客戶端之間的互動不能夠被篡改。這也意味著“中間人”和 “APP 劫持”攻擊被有效阻止和防禦了。

我們的審計證實,ZenGo 確實有一個安全的設計和實現可以抵禦這些攻擊,並且這已是我們所接觸過的被審計錢包中具備最高安全水準的設計。

ZenGo 的安全設計和實現成功地防禦了包括來自特權的攻擊及上述攻擊。然而處理所有型別的特權攻擊也並不是易事,特別是考慮到攻擊者可以讀取(以及在某些情況下寫入)任意記憶體。

透過審計整個錢包,我們能夠發現 ZenGo 中的一個實現問題那就是:該錢包允許我們作為特權攻擊者從而繞過某些保護。

不過在討論細節之前,讓我們先回顧一下 ZenGo 錢包的安全機制。

ZenGo 錢包的安全做法

透過本次研究,我們已認識到與 MPC 方法相關的挑戰和潛在的安全風險對於 Web 3 資產保護的重要性。於是我們想要透過探索和解決這些挑戰來更好地保護Web3使用者。

因此我們可以想一下這個問題:與傳統的加密錢包相比,為什麼 MPC 錢包可以提供更高的安全性?它又是如何做到的?

一個經典的 Web 3 錢包只需要一個私鑰。然而使用者總是有一定可能會透露私鑰或助記詞的。因此他們可能會丟失私鑰,然後眼睜睜看著攻擊者佔有資產。

MPC 錢包的工作方式則不同。該錢包沒有單一的私鑰,使用者現在只持有一份私鑰分片,對其餘的私鑰分片一無所知。從這個角度看,攻擊者即使獲得了使用者那一份的個人金鑰,也不能直接轉移資金。而為了進一步保護使用者,ZenGo 使用了多種手段來加強他們的安全設計:不僅僅是上述的雙方簽名方案和基於 TEE 的裝置保護,還有基於面部掃描的生物識別認證及額外金鑰加密等。

使用者註冊和使用者賬號恢復過程中的保護措施

在使用者註冊和賬號恢復過程中,ZenGo 採用了以下保護措施來保護使用者資產。

使用者識別保護: 雙方簽名方案要求只有當使用者與另一方(ZenGo 的設定為伺服器方)互動,才能動用他們的資金。為了能夠識別使用者和儲存在伺服器上的相關金鑰份額,ZenGo 需要使用者的電子郵件以便註冊賬戶。

為了避免電子郵件被黑,ZenGo 使用了面部掃描技術(FaceTec 的 Zoom),將生物識別資訊與使用者賬戶繫結。在註冊與電子郵件驗證後的賬號恢復過程中,使用者需要“刷臉”來進行認證。

應用程序-伺服器通訊保護: 為了確保 ZenGo 伺服器與合法使用者的裝置進行互動,ZenGo 在註冊和賬號恢復過程中在 TEE 環境中生成並註冊了一個非對稱金鑰。ZenGo 應用程序和伺服器之間的所有互動都需要由這個特定的金鑰簽署。因為它受到硬體支援的安全解決方案的保護,因此攻擊者不能直接讀取這個金鑰,而該金鑰也很難被濫用。

ZenGo 使用者註冊和賬號恢復過程

使用者金鑰共享保護: 讓使用者儲存和備份其金鑰分片是有風險的,因為這或將危及到 ZenGo 提供的所有安全措施。而為了解決這個安全問題,ZenGo 在註冊過程中生成了一個加密金鑰。加密金鑰對使用者的金鑰共享進行加密,並將密碼文字儲存在其伺服器上。

但是,加密金鑰不與 ZenGo 共享,而是強制與使用者的 Google Drive 或 iCloud 進行同步。只有在使用者透過電子郵件驗證和基於伺服器的生物識別認證後,才能將加密的金鑰共享並進一步解密。其中基於伺服器的生物識別認證(FaceTec 人臉識別)幾乎不可能被常規的2D/3D人臉重建“矇騙”。

<p “=””>ZenGo MPC 設計中的問題發現

正如我們之前所討論的,ZenGo 的安全設計中涉及許多加密金鑰,每一個金鑰都有不同的職責。在下面的表格中,我們顯示了 ZenGo 使用了哪些金鑰以及它們是如何被保護的。

透過這個表格,我們可以看到,在客戶端有三個金鑰被使用:主金鑰②,裝置金鑰和加密金鑰。攻擊者需要同時獲得主金鑰②和裝置金鑰,以便與 ZenGo 伺服器互動,竊取使用者資金。

正如前面交易細節部分所介紹的,主金鑰②在記憶體中作為文字參與雙方簽名的生成,它允許攻擊者讀取程序記憶體並提取主金鑰②。而作為一種一定程度上的解決方案,所有對 ZenGo 伺服器的交易請求都需要由裝置金鑰簽署,而裝置金鑰是不能被讀取或提取的。這個過程是在 TEE 中完成的,攻擊者無法控制。

然而,儘管 ZenGo 的安全設計考慮到了許多方面,CertiK 的 SkyFall 團隊仍然在其中發現了一個漏洞。在對 ZenGo 應用程序中所有 API 進行細節審計後,我們注意到某些 API 允許攻擊者欺騙 ZenGo 伺服器,並輕鬆生成一個新的裝置金鑰,以便在其他裝置上使用。

這種由裝置金鑰註冊的 API 缺乏必要的安全保護措施:攻擊者可以在其他裝置上生成一個新的 NIST P-256 橢圓曲線金鑰,然後攻擊者可以利用裝置金鑰註冊 API,並註冊新生成的金鑰對,假裝新的使用者裝置並請求交易。

我們將這種攻擊命名為裝置分叉攻擊。

裝置金鑰:在註冊或賬號恢復過程中,TEE 中的使用者裝置上會生成一個有效的裝置金鑰作為對前述明文提取威脅的解決方案。裝置金鑰並不能被有特權許可權的攻擊者讀取,然而,攻擊者可以使用相同的裝置金鑰註冊 API,從而來註冊另一對金鑰並使用它。

裝置金鑰註冊 API 只有一個非常基礎的認證機制:攻擊者可以使用一個普通的明文字地儲存的 JWT 令牌和提取到的主金鑰②進行 API 身份認證。根據設計,該 API 涉及到的伺服器程式碼也應該經過 Face tec 生物識別認證。然而在實踐中,由於邏輯缺陷,程式碼未能執行此環節。

在我們的模擬攻擊中,我們模擬了一個具備特權許可權的攻擊者,並持續監控受害者的裝置。一旦 ZenGo 應用程序被啟動,我們便立即從記憶體中提取主金鑰②,並從本地資料庫中讀取 API 令牌。而這些資訊足以讓攻擊者盜取使用者的全部資金!

一旦有了 API 令牌,我們就會生成一個新的裝置金鑰,並呼叫裝置金鑰註冊 API 從而在 ZenGo 伺服器上註冊裝置金鑰。隨後,我們構建了所有的 API 請求,與 ZenGo 伺服器互動來發起交易。對於 MPC 錢包來說,生成雙方簽名是一個非常獨特並且複雜的過程。不過好在 ZenGo 的開發過程始終秉承著開源精神,我們才能夠編譯官方 ZenGo 應用程序中使用的雙方簽名庫並在本地執行。

上圖中展示了我們是如何提取主金鑰②並代表受害者註冊一個新的裝置金鑰的。隨後我們利用這兩個金鑰向“攻擊者的賬戶”傳送了 0.00222 ETH。這整個過程只用了幾秒鐘,並且受害者也會完全意識不到。

為了解決這個問題,ZenGo 在伺服器端為裝置註冊實施了 FaceTec 生物識別認證。伺服器 API 級別的解決措施消除了這種攻擊的可能性,且不需要更新客戶端程式碼。

總結

在 CertiK 對 ZenGo 的評估中,我們徹底檢查並審計了其為保護使用者資產所採取的所有安全措施。這些措施包括雙方簽名方案、基於 TEE 的裝置保護以及用來註冊和恢復賬號的生物識別。

儘管 ZenGo 有著較高的安全意識,並採取了諸多措施用來提高自己的安全性,CertiK 還是在 ZenGo 的實施中發現了一個關鍵的可被利用的 API 訪問認證風險。該漏洞可以讓持有特權的攻擊者繞過現有的安全措施,並在使用者的裝置被破壞時竊取使用者的資金。

ZenGo 及時解決了該問題並部署了一個補丁,CeritK 隨後也進行了徹底的進一步審計並確定該補丁已修復報告中提到的風險。

隨著補丁的部署,我們相信 ZenGo 在日後可以有效地預防特權使用者非法訪問使用者資金。防禦特權攻擊者是一項艱鉅的任務,而 ZenGo 的安全實踐向我們展示了全面保護使用者的安全方法。該錢包的做法超過了目前市場上絕大多數常規錢包。

我們很榮幸能夠與 ZenGo 合作,並很榮幸能夠與 ZenGo 在保護 Web 3 使用者安全方面做出共同努力並解決安全挑戰。同時也感謝 ZenGo 對我們發現漏洞的及時回應與高效的漏洞補丁出臺行動。

作為安全行業的從業者,我們很高興看到一個頂級 Web 3 錢包公司如此重視安全,對使用者和使用者的資金具備如此高的責任心。希望在未來的安全道路中,我們可為更多專案提升安全性,為其使用者賦予“安心”。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *