Mozilla 開始實作 RLBox 函式庫隔離技術

來自史丹佛大學、加州大學聖地牙哥分校和德州大學奧斯汀分校的研究人員 發達 工具 RL盒子,它可以用作額外的隔離層來阻止函數庫中的漏洞。 RLBox旨在解決不受信任的第三方程式庫的安全問題,這些第三方程式庫不受開發人員控制,但其漏洞可能會危及主專案。

摩斯拉公司 計劃 在 Firefox 74 的 Linux 版本和 Firefox 75 的 macOS 版本中使用 RLBox 來隔離程式庫執行 石墨黑色,負責渲染字體。 然而,RLBox 並不是 Firefox 特有的,可以用來隔離任意專案中的任何函式庫。 動態 RL盒子 傳播 根據麻省理工學院的許可。 RLBox 目前支援 Linux 和 macOS 平台,預計稍後支援 Windows。

機制 RLBox 的工作歸結為將獨立庫的 C/C++ 程式碼編譯為低階中間 WebAssembly 程式碼,然後將其設計為 WebAssembly 模組,其權限僅與該模組相關(例如,一個庫)用於處理字串將無法開啟網絡套接字或文件)。 將 C/C++ 程式碼轉換為 WebAssembly 是使用 wasi-sdk.

為了直接執行,WebAssembly 模組使用編譯器編譯為機器碼 盧賽特 並在與應用程式記憶體的其餘部分隔離的單獨“奈米進程”中運行。 Lucet編譯器是基於與JIT引擎相同的程式碼 起重機升降機,在 Firefox 中用於執行 WebAssembly。

組裝後的模組在單獨的記憶體區域中運行,並且無法存取其餘的位址空間。 如果利用庫中的漏洞,攻擊者將受到限制,無法存取主進程的記憶體區域或將控制權轉移到隔離環境之外。

Mozilla 開始實作 RLBox 函式庫隔離技術

為開發人員提供高級信息 API,它允許您在隔離模式下呼叫庫函數。 WebAssembly 處理程序幾乎不需要額外的資源,與它們的交互並不比調用普通函數慢多少(庫函數以本機程式碼的形式執行,只有在與隔離環境交互期間複製和檢查資料時才會產生開銷成本) 。 孤立的函式庫函數不能直接調用,必須使用
層invoke_sandbox_function()。

反過來,如果需要從函式庫中呼叫外部函數,則必須使用 register_callback 方法明確定義這些函數(預設情況下,RLBox 提供對函數的存取) 標準函式庫)。 為了確保記憶體安全,程式碼執行隔離是不夠的,還需要檢查傳回的資料流。

在隔離環境中產生的值被標記為不可信並限制使用 污點 為了“清潔”,他們需要 驗證 並複製到應用程式記憶體。
如果不進行清理,嘗試在需要常規資料的上下文中使用受污染的資料(反之亦然)會導致在編譯時產生錯誤。 小函數參數、返回值和結構透過進程記憶體和沙箱記憶體之間的複製來傳遞。 對於大型資料集,內存在隔離環境中分配,並將直接沙箱引用指標傳回主程序。

來源: opennet.ru

添加評論