跳至內容

加密貨幣安全報告:2022年4月

介紹 Endo 為 MetaMask npm 依賴鏈實現的 CommonJS 相容里程碑、LavaMoat v6 的「a'a」套件命名推出、LavaMoat 邁向 React Native 與 MetaMask Mobile 的路徑,以及 MetaMask 金庫資料的 iCloud 備份建議。

5 分鐘
加密貨幣安全報告:2022年4月

每個月,MetaMask 安全總監 Luker 都會報告您需要了解的最新加密貨幣攻擊事件與新興風險。

MetaMask 安全團隊的 2022 年 4 月報告涵蓋以下內容:Endo 在 npm 依賴鏈上達成的 CommonJS 相容性里程碑、LavaMoat v6 全新的 'a'a 套件命名標記法將 metamask-extension 執行時間從 10 分鐘縮短至不到 1 秒(約提升 600 倍)、MetaMask Extension 採用 LavaMoat v6 供應鏈防護機制、LavaMoat 的 lockdown() 達成 React Native 相容性以開闢通往 MetaMask Mobile 的路徑,以及針對 MetaMask 金庫資料 iCloud 備份的安全建議。請繼續閱讀詳細內容,但首先……

精選 STEM 先驅人物:Butler Lampson,基於能力的電腦安全之父

Butler Lampson 是一位美國電腦科學家,他將軟體如何控制資源存取的方式系統化。他在 1970 年代初期開發的存取矩陣模型,將能力(capabilities)與存取控制清單(access control lists)整合為單一框架,並因此榮獲 1992 年圖靈獎。他所開創的基於能力的隔離機制,是 Endo 和 LavaMoat 今日用於保護 MetaMask 的隔離沙箱技術的理論基礎。

Endo 達成 CommonJS 模組相容性,揭露 npm 套件載入的剩餘缺口

Endo 的 CommonJS 支援於 2022 年 4 月達到重要里程碑。針對 npm 生態系中真實套件(主要從 MetaMask 依賴項中選取)進行的端對端測試,揭露了 CommonJS 支援不足的情況,並推動了相關實作的改進。一項比較多種匯出形式的測試——涵蓋在 Endo、Node.js 及多種打包工具中以 ESM 匯入 CommonJS 的情境——有助於設定目標並避免功能退化。

此期間 Endo CommonJS 支援的最重要變更包括:將匯出連接至 import * 並引入隱式預設匯出、改善詞法分析器以偵測所有 require 的出現位置並將缺少套件的錯誤延後至執行時期、重構匯出處理邏輯以將 module.exports 設為預設並識別具名匯出,以及新增對巢狀 package.json 中 type:module 的支援,以及 package.json 匯出中可選值陣列的支援。

進度追蹤詳見 CommonJS 追蹤 epic。

Endo 現已支援正確載入 CommonJS 模組。從 npm 載入真實套件時,所有剩餘問題可歸納為四類:使用缺失功能(如 require.resolve 或 import.meta)、修改全域變數與內建物件、觸發防止注入匯入或 HTML 註解的過濾器,以及 Endo 的匯出對應與模組類型解析錯誤。

Endo 實驗性 run 指令可在隔離的 compartment 中執行 JS 檔案

基於用於串接 Endo 端對端測試的現有工具,實驗性的 endo run 指令現已能以 compartments 執行 JS 檔案——類似於 node app.js,但套用了 Endo 的隔離模型。

目前,程式碼庫及其依賴項可透過 require/import 使用所有 Node.js 核心模組。後續工作應新增對 LavaMoat 政策(policies)的支援。

LavaMoat v6 的 'a'a 套件命名將 metamask-extension 執行時間提升 600 倍,從 10 分鐘縮短至不到 1 秒

LavaMoat v6 推出了全新的套件識別碼標記法,以防止因冒名頂替和套件名稱重複使用所引發的問題。這種標記法稱為 'a'a,現已用於政策檔案中的鍵值。

初始實作的效能因 Node.js 在查找和存取檔案時的低效率而受到嚴重影響。第一次效能改善嘗試——僅限於兩種簡單的記憶化(memoization)情境——將 metamask-extension 中 'a'a 的最壞情況執行時間從 10 分鐘縮短至 30 秒,但記憶體使用量的峰值代價過高。

第二次效能診斷與改善迭代透過全新演算法、消除遞迴,以及對 Node.js 模組解析的本地效能優化,相較第一次迭代結果,時間與記憶體用量均減少了超過 25 倍。

從第一個完整實作到目前版本,執行時間總計提升了約 600 倍。

MetaMask Extension 採用 LavaMoat v6 供應鏈防護機制

MetaMask Extension 現已在 LavaMoat v6 的防護機制下運行,推出進度追蹤詳見 PR #14488。

LavaMoat lockdown() 達成 React Native 相容性,開闢通往 MetaMask Mobile 的路徑

讓 LavaMoat 在 React Native 應用程式中運作的關鍵步驟,是執行 SES 的 lockdown() 函式。lockdown() 函式透過列舉 JavaScript 中的原始物件(primordials)並凍結原型,保護軟體免受供應鏈攻擊,使惡意行為者難以執行原型污染攻擊(prototype pollution attack)。

此次工作中所發現的詳細見解,記錄於 React Native 相容性追蹤器中。達成相容性的關鍵要點包括:允許 Metro 透過執行 .cjs 檔案來運行 SES bundle、新增特定的 lockdown 選項、移除 Babel 插件,以及移除 Promise polyfill。其他問題則與 MetaMask Mobile 應用程式本身相關,例如 Sentry 和 EthereumJS 依賴項。

最終成果是向 MetaMask Mobile 應用程式儲存庫提交的一個拉取請求(pull request)。後續步驟包括執行端對端測試,確認 lockdown() 未破壞其他功能,再進入下一階段:將 LavaMoat 整合至 MetaMask Mobile。

iCloud 備份被發現包含密碼加密的 MetaMask 金庫資料

已為應用程式資料啟用 iCloud 備份的 Apple 用戶,可能在不知情的情況下備份了以密碼加密的 MetaMask 金庫。若您的密碼強度不足,且有人釣魚取得您的 iCloud 憑證,這可能導致資金遭竊。MetaMask 已在 X 上發布指引,說明如何在裝置上控制此設定的步驟。


MetaMask 2022 年 4 月加密貨幣安全報告涵蓋了 Endo 在 MetaMask npm 依賴鏈上達成的 CommonJS 相容性里程碑、LavaMoat v6 透過全新 'a'a 套件命名標記法將 metamask-extension 效能提升 600 倍,以及針對 MetaMask 金庫資料 iCloud 備份的安全建議。瀏覽往期 MetaMask 加密貨幣安全報告,了解更多威脅、趨勢,以及在整個生態系中保持安全的實用建議。

AI 翻譯。可能包含錯誤。請務必核實資訊。

評價此翻譯

本文作者:

  • Luker

      Jen Luker(多數人都直接稱她為 Luker)是 Consensys 的產品安全總監,帶領第一線防禦團隊,在去中心化技術領域中防範漏洞、新興威脅與惡意行為者,守護數百萬名使用者。自 2017 年起,她便積極參與以太坊生態系,曾擔任 ETHNews 編輯與 MyCrypto 專案經理等關鍵職務。Luker 經常在產業研討會上擔任講者,是 MetaMask 每月《加密貨幣安全報告》的作者,並持有由 The DAO 指定的官方 ETH Security Badge。她也積極倡議持續教育與安全意識,認為這兩者是以太坊與區塊鏈技術未來不可或缺的核心支柱。

      閱讀所有文章